Revert "Improve WebDAV data sync version handling and force sync (#207)" (#218)

This reverts commit a630771f0b.
This commit is contained in:
nyne
2025-02-21 10:25:06 +08:00
committed by GitHub
parent 7b601058eb
commit e829f567e5
4 changed files with 30 additions and 57 deletions

View File

@@ -190,7 +190,6 @@
"Operation": "操作", "Operation": "操作",
"Upload": "上传", "Upload": "上传",
"Saved": "已保存", "Saved": "已保存",
"Saved Failed": "保存失败",
"Sync Data": "同步数据", "Sync Data": "同步数据",
"Syncing Data": "正在同步数据", "Syncing Data": "正在同步数据",
"Data Sync": "数据同步", "Data Sync": "数据同步",
@@ -554,7 +553,6 @@
"Operation": "操作", "Operation": "操作",
"Upload": "上傳", "Upload": "上傳",
"Saved": "已保存", "Saved": "已保存",
"Saved Failed": "保存失敗",
"Sync Data": "同步數據", "Sync Data": "同步數據",
"Syncing Data": "正在同步數據", "Syncing Data": "正在同步數據",
"Data Sync": "數據同步", "Data Sync": "數據同步",

View File

@@ -56,18 +56,6 @@ void _checkOldConfigs() {
.map((e) => e.key) .map((e) => e.key)
.toList(); .toList();
} }
if (appdata.settings['webdavAutoSync'] == null) {
var webdavConfig = appdata.settings['webdav'];
if (webdavConfig is List &&
webdavConfig.length == 3 &&
webdavConfig.whereType<String>().length == 3) {
appdata.settings['webdavAutoSync'] = true;
} else {
appdata.settings['webdavAutoSync'] = false;
}
appdata.saveData();
}
} }
Future<void> _checkAppUpdates() async { Future<void> _checkAppUpdates() async {

View File

@@ -473,8 +473,8 @@ class _WebdavSettingState extends State<_WebdavSetting> {
isTesting = true; isTesting = true;
}); });
var testResult = upload var testResult = upload
? await DataSync().uploadData(forceSync: true) ? await DataSync().uploadData()
: await DataSync().downloadData(forceSync: true); : await DataSync().downloadData();
if (testResult.error) { if (testResult.error) {
setState(() { setState(() {
isTesting = false; isTesting = false;
@@ -482,12 +482,11 @@ class _WebdavSettingState extends State<_WebdavSetting> {
appdata.settings['webdav'] = oldConfig; appdata.settings['webdav'] = oldConfig;
appdata.settings['webdavAutoSync'] = oldAutoSync; appdata.settings['webdavAutoSync'] = oldAutoSync;
context.showMessage(message: testResult.errorMessage!); context.showMessage(message: testResult.errorMessage!);
context.showMessage(message: "Saved Failed".tl); return;
} else {
appdata.saveData();
context.showMessage(message: "Saved".tl);
App.rootPop();
} }
appdata.saveData();
context.showMessage(message: "Saved".tl);
App.rootPop();
}, },
child: Text("Continue".tl), child: Text("Continue".tl),
), ),

View File

@@ -58,7 +58,7 @@ class DataSync with ChangeNotifier {
return List.from(config); return List.from(config);
} }
Future<Res<bool>> uploadData({bool forceSync = false}) async { Future<Res<bool>> uploadData() async {
if (isDownloading) return const Res(true); if (isDownloading) return const Res(true);
if (haveWaitingTask) return const Res(true); if (haveWaitingTask) return const Res(true);
while (isUploading) { while (isUploading) {
@@ -102,32 +102,20 @@ class DataSync with ChangeNotifier {
} }
try { try {
var files = await client.readDir('/'); appdata.settings['dataVersion']++;
files = files.where((e) => e.name!.endsWith('.venera')).toList();
files.sort((a, b) => b.name!.compareTo(a.name!));
var remoteFile = files.firstWhereOrNull((e) => e.name!.endsWith('.venera'));
var remoteVersion = 0;
if (remoteFile != null) {
remoteVersion = int.tryParse(remoteFile.name!.split('-').elementAtOrNull(1)?.split('.').first ?? '0') ?? 0;
}
var localVersion = appdata.settings['dataVersion'] ?? 0;
if (!forceSync && remoteVersion >= localVersion) {
Log.info("Data Sync", 'Local: $localVersion Remote: $remoteVersion Skip upload ForceSync: $forceSync');
return const Res(true);
}
appdata.settings['dataVersion'] = forceSync ? remoteVersion + 1 : localVersion + 1;
await appdata.saveData(false); await appdata.saveData(false);
var data = await exportAppData(); var data = await exportAppData();
var time = (DateTime.now().millisecondsSinceEpoch ~/ 86400000).toString(); var time =
var filename = '$time-${appdata.settings['dataVersion']}.venera'; (DateTime.now().millisecondsSinceEpoch ~/ 86400000).toString();
var filename = time;
if (!forceSync) { filename += '-';
var old = files.firstWhereOrNull((e) => e.name!.startsWith("$time-")); filename += appdata.settings['dataVersion'].toString();
if (old != null) { filename += '.venera';
await client.remove(old.name!); var files = await client.readDir('/');
} files = files.where((e) => e.name!.endsWith('.venera')).toList();
var old = files.firstWhereOrNull((e) => e.name!.startsWith("$time-"));
if (old != null) {
await client.remove(old.name!);
} }
if (files.length >= 10) { if (files.length >= 10) {
files.sort((a, b) => a.name!.compareTo(b.name!)); files.sort((a, b) => a.name!.compareTo(b.name!));
@@ -135,7 +123,7 @@ class DataSync with ChangeNotifier {
} }
await client.write(filename, await data.readAsBytes()); await client.write(filename, await data.readAsBytes());
data.deleteIgnoreError(); data.deleteIgnoreError();
Log.info("Data Sync", "Local: ${appdata.settings['dataVersion']} Remote: $remoteVersion Data uploaded successfully ForceSync: $forceSync"); Log.info("Upload Data", "Data uploaded successfully");
return const Res(true); return const Res(true);
} catch (e, s) { } catch (e, s) {
Log.error("Upload Data", e, s); Log.error("Upload Data", e, s);
@@ -147,7 +135,7 @@ class DataSync with ChangeNotifier {
} }
} }
Future<Res<bool>> downloadData({bool forceSync = false}) async { Future<Res<bool>> downloadData() async {
if (haveWaitingTask) return const Res(true); if (haveWaitingTask) return const Res(true);
while (isDownloading || isUploading) { while (isDownloading || isUploading) {
haveWaitingTask = true; haveWaitingTask = true;
@@ -196,16 +184,16 @@ class DataSync with ChangeNotifier {
if (file == null) { if (file == null) {
throw 'No data file found'; throw 'No data file found';
} }
var version = file.name!.split('-').elementAtOrNull(1)?.split('.').first; var version =
var remoteVersion = int.tryParse(version ?? '') ?? 0; file.name!.split('-').elementAtOrNull(1)?.split('.').first;
var localVersion = appdata.settings['dataVersion'] ?? 0; if (version != null && int.tryParse(version) != null) {
var currentVersion = appdata.settings['dataVersion'];
if (!forceSync && remoteVersion <= localVersion) { if (currentVersion != null && int.parse(version) <= currentVersion) {
Log.info("Data Sync", 'Local: $localVersion Remote: $remoteVersion Skip download ForceSync: $forceSync'); Log.info("Data Sync", 'No new data to download');
return const Res(true); return const Res(true);
}
} }
Log.info("Data Sync", "Downloading data from WebDAV server");
Log.info("Data Sync", "Local: $localVersion Remote: $remoteVersion Downloading data ForceSync: $forceSync");
var localFile = File(FilePath.join(App.cachePath, file.name!)); var localFile = File(FilePath.join(App.cachePath, file.name!));
await client.read2File(file.name!, localFile.path); await client.read2File(file.name!, localFile.path);
await importAppData(localFile, true); await importAppData(localFile, true);