uploadNewImagesOrFiles<DataT extends Data> method
upload / add a bunch of images
Implementation
Future<String?> uploadNewImagesOrFiles<DataT extends Data>(
DataT data,
List<XFile> files, {
Data? caller,
bool forceUpdate = false,
}) async {
// Wenn forceOffline aktiv ist: nur lokal speichern und Request zum Retry vormerken
bool prefersOffline = _dataPrefersCache(
caller, type: Helper.SimulatedRequestType.PUT) ??
false;
// fallback: nutze Daten-Flag oder globale Option
try {
prefersOffline =
prefersOffline || (caller as WithOffline).forceOffline;
} catch (_) {}
try {
prefersOffline =
prefersOffline || (data as WithOffline).forceOffline;
} catch (_) {}
prefersOffline = prefersOffline || Options().forceOffline;
if (prefersOffline) {
final rap = remote.uploadNewImagesOrFiles<DataT>(data, files);
await local.uploadNewImagesOrFiles(
data,
files,
caller: caller,
forceUpdate: forceUpdate,
);
await local.logFailedReq(rap.rd);
return 'added files offline (queued)';
}
final requestType = Helper.SimulatedRequestType.PUT;
return _run(
itPrefersCache: _dataPrefersCache(data, type: requestType),
offline: () => local.uploadNewImagesOrFiles(
data,
files,
caller: caller,
forceUpdate: forceUpdate,
),
online: () => remote.uploadNewImagesOrFiles(
data,
files,
),
// onlineSuccessCB: (response) async {},
onlineFailedCB: (onlineRes, rap) {
debugPrint('failed to upload images, ' +
rap.rd.json.toString() +
': ' +
onlineRes.toString());
var rd = rap.rd;
//biscchen ugly
// rd.multipartFiles = rd.multipartFiles.map((_e) async {
// var e = await _e;
// // e.name = newName;
// var newName = LOCALLY_ADDED_PREFIX + e.name;
// var newPath =
// e.path.substring(0, e.path.length - e.name.length) + newName;
// e.saveTo(newPath);
// e = XFile(newPath);
// return e;
// }).toList();
local.logFailedReq(rd);
},
requestType: requestType,
).last;
}