mirror of
https://gitlab.com/nkming2/nc-photos.git
synced 2025-01-22 16:56:19 +01:00
PutFileBinary creates parent dirs automatically
This commit is contained in:
parent
7b8ed4885d
commit
bea76298dd
2 changed files with 30 additions and 19 deletions
|
@ -15,7 +15,6 @@ import 'package:nc_photos/int_util.dart' as int_util;
|
||||||
import 'package:nc_photos/iterable_extension.dart';
|
import 'package:nc_photos/iterable_extension.dart';
|
||||||
import 'package:nc_photos/list_extension.dart';
|
import 'package:nc_photos/list_extension.dart';
|
||||||
import 'package:nc_photos/remote_storage_util.dart' as remote_storage_util;
|
import 'package:nc_photos/remote_storage_util.dart' as remote_storage_util;
|
||||||
import 'package:nc_photos/use_case/create_dir.dart';
|
|
||||||
import 'package:nc_photos/use_case/get_file_binary.dart';
|
import 'package:nc_photos/use_case/get_file_binary.dart';
|
||||||
import 'package:nc_photos/use_case/ls.dart';
|
import 'package:nc_photos/use_case/ls.dart';
|
||||||
import 'package:nc_photos/use_case/put_file_binary.dart';
|
import 'package:nc_photos/use_case/put_file_binary.dart';
|
||||||
|
@ -296,22 +295,9 @@ class AlbumRemoteDataSource implements AlbumDataSource {
|
||||||
final filePath =
|
final filePath =
|
||||||
"${remote_storage_util.getRemoteAlbumsDir(account)}/$fileName";
|
"${remote_storage_util.getRemoteAlbumsDir(account)}/$fileName";
|
||||||
final fileRepo = FileRepo(FileWebdavDataSource());
|
final fileRepo = FileRepo(FileWebdavDataSource());
|
||||||
try {
|
|
||||||
await PutFileBinary(fileRepo)(
|
await PutFileBinary(fileRepo)(
|
||||||
account, filePath, utf8.encode(jsonEncode(album.toRemoteJson())));
|
account, filePath, utf8.encode(jsonEncode(album.toRemoteJson())),
|
||||||
} on ApiException catch (e) {
|
shouldCreateMissingDir: true);
|
||||||
if (e.response.statusCode == 404) {
|
|
||||||
_log.info("[create] Missing album dir, creating");
|
|
||||||
// no dir
|
|
||||||
await CreateDir(fileRepo)(
|
|
||||||
account, remote_storage_util.getRemoteAlbumsDir(account));
|
|
||||||
// then retry
|
|
||||||
await PutFileBinary(fileRepo)(
|
|
||||||
account, filePath, utf8.encode(jsonEncode(album.toRemoteJson())));
|
|
||||||
} else {
|
|
||||||
rethrow;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// query album file
|
// query album file
|
||||||
final list = await Ls(fileRepo)(account, File(path: filePath),
|
final list = await Ls(fileRepo)(account, File(path: filePath),
|
||||||
shouldExcludeRootDir: false);
|
shouldExcludeRootDir: false);
|
||||||
|
|
|
@ -1,14 +1,39 @@
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
|
||||||
|
import 'package:logging/logging.dart';
|
||||||
import 'package:nc_photos/account.dart';
|
import 'package:nc_photos/account.dart';
|
||||||
import 'package:nc_photos/entity/file.dart';
|
import 'package:nc_photos/entity/file.dart';
|
||||||
|
import 'package:nc_photos/exception.dart';
|
||||||
|
import 'package:nc_photos/use_case/create_dir.dart';
|
||||||
|
import 'package:path/path.dart' as path_lib;
|
||||||
|
|
||||||
class PutFileBinary {
|
class PutFileBinary {
|
||||||
PutFileBinary(this.fileRepo);
|
PutFileBinary(this.fileRepo);
|
||||||
|
|
||||||
/// Upload file to [path]
|
/// Upload file to [path]
|
||||||
Future<void> call(Account account, String path, Uint8List content) =>
|
Future<void> call(
|
||||||
fileRepo.putBinary(account, path, content);
|
Account account,
|
||||||
|
String path,
|
||||||
|
Uint8List content, {
|
||||||
|
bool shouldCreateMissingDir = false,
|
||||||
|
}) async {
|
||||||
|
try {
|
||||||
|
await fileRepo.putBinary(account, path, content);
|
||||||
|
} catch (e) {
|
||||||
|
if (e is ApiException &&
|
||||||
|
e.response.statusCode == 404 &&
|
||||||
|
shouldCreateMissingDir) {
|
||||||
|
// no dir
|
||||||
|
_log.info("[call] Auto creating parent dirs");
|
||||||
|
await CreateDir(fileRepo)(account, path_lib.dirname(path));
|
||||||
|
await fileRepo.putBinary(account, path, content);
|
||||||
|
} else {
|
||||||
|
rethrow;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final FileRepo fileRepo;
|
final FileRepo fileRepo;
|
||||||
|
|
||||||
|
static final _log = Logger("use_case.put_file_binary.PutFileBinary");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue