mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-14 12:23:43 +00:00
refactor: remove proxy API (#1596)
This commit is contained in:
98 files changed
+5958
-1225
No files matched your search
@@ -20,29 +20,55 @@ class SettingsState {
|
||||
}
|
||||
|
||||
class SettingsController extends AsyncNotifier<SettingsState> {
|
||||
Future<void> _saveTail = Future<void>.value();
|
||||
int _saveRevision = 0;
|
||||
|
||||
@override
|
||||
Future<SettingsState> build() async {
|
||||
await ref.read(appRuntimeControllerProvider.future);
|
||||
return SettingsState(config: await ref.read(gopeedServiceProvider).getConfig());
|
||||
final config = await ref.read(gopeedServiceProvider).getConfig();
|
||||
return SettingsState(config: config);
|
||||
}
|
||||
|
||||
Future<void> reload({bool showLoading = true}) async {
|
||||
if (showLoading) state = const AsyncValue.loading();
|
||||
state = AsyncValue.data(SettingsState(config: await ref.read(gopeedServiceProvider).getConfig()));
|
||||
final config = await ref.read(gopeedServiceProvider).getConfig();
|
||||
state = AsyncValue.data(SettingsState(config: config));
|
||||
}
|
||||
|
||||
Future<void> save(DownloaderConfig config) async {
|
||||
Future<void> save(DownloaderConfig config) {
|
||||
final snapshot = DownloaderConfig.fromJson(config.toJson());
|
||||
final revision = ++_saveRevision;
|
||||
state = AsyncValue.data(SettingsState(config: config, saving: true));
|
||||
final latest = await ref.read(gopeedServiceProvider).getConfig();
|
||||
config.extra
|
||||
..windowState = latest.extra.windowState
|
||||
..bookmarks = latest.extra.bookmarks
|
||||
..createHistory = latest.extra.createHistory
|
||||
..runAsMenubarApp = latest.extra.runAsMenubarApp
|
||||
..analyticsClientId = latest.extra.analyticsClientId;
|
||||
await ref.read(gopeedServiceProvider).putConfig(config);
|
||||
ref.read(appRuntimeControllerProvider.notifier).replaceDownloaderConfig(config);
|
||||
state = AsyncValue.data(SettingsState(config: config));
|
||||
final keepAlive = ref.keepAlive();
|
||||
final result = _saveTail.then((_) => _save(snapshot, revision)).whenComplete(keepAlive.close);
|
||||
// A failed save must not prevent subsequent edits or retries from running.
|
||||
_saveTail = result.then((_) {}, onError: (Object _, StackTrace _) {});
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<void> _save(DownloaderConfig config, int revision) async {
|
||||
try {
|
||||
final service = ref.read(gopeedServiceProvider);
|
||||
final latest = await service.getConfig();
|
||||
config.extra
|
||||
..windowState = latest.extra.windowState
|
||||
..bookmarks = latest.extra.bookmarks
|
||||
..createHistory = latest.extra.createHistory
|
||||
..runAsMenubarApp = latest.extra.runAsMenubarApp
|
||||
..analyticsClientId = latest.extra.analyticsClientId;
|
||||
// The backend preserves protocol-owned results and validates the whole PUT.
|
||||
await service.putConfig(config);
|
||||
final saved = await service.getConfig();
|
||||
if (ref.mounted) {
|
||||
ref.read(appRuntimeControllerProvider.notifier).replaceDownloaderConfig(saved);
|
||||
if (revision == _saveRevision) state = AsyncValue.data(SettingsState(config: saved));
|
||||
}
|
||||
} finally {
|
||||
if (ref.mounted && revision == _saveRevision && state.value?.saving == true) {
|
||||
state = AsyncValue.data(state.requireValue.copyWith(saving: false));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> testWebhook(String url) async {
|
||||
|
||||
Reference in new issue
Block a user