diff --git a/FreeTubeSyncer/App.axaml.cs b/FreeTubeSyncer/App.axaml.cs index 68ad15a..72c7439 100644 --- a/FreeTubeSyncer/App.axaml.cs +++ b/FreeTubeSyncer/App.axaml.cs @@ -125,6 +125,7 @@ public partial class App : Application _settings.SyncSearchHistory = @new.SyncSearchHistory; _settings.SyncSettings = @new.SyncSettings; _settings.SettingsDirty = false; + _settings.UpdateInterval(); } public void SaveSettings() @@ -146,11 +147,13 @@ public partial class App : Application if (!File.Exists(path)) { _settings = new AppSettings(); + _settings.UpdateInterval(); return; } var data = File.ReadAllText(path); _settings = JsonSerializer.Deserialize(data); + _settings!.UpdateInterval(); } private string GetAppFolder() => Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FreeTubeSyncer"); diff --git a/FreeTubeSyncer/MainWindow.axaml b/FreeTubeSyncer/MainWindow.axaml index 8ee3fa1..7efbfa5 100644 --- a/FreeTubeSyncer/MainWindow.axaml +++ b/FreeTubeSyncer/MainWindow.axaml @@ -24,7 +24,13 @@ - + + + + + + + _checkIntervalOptions = [ + new CheckIntervalOption("1/2 Minute", 30), + new CheckIntervalOption("1 Minute", 60), + new CheckIntervalOption("30 Minutes", 1800), + new CheckIntervalOption("1 Hour", 3600), + new CheckIntervalOption("6 Hours", 21600), + new CheckIntervalOption("12 Hours", 43200), + new CheckIntervalOption("24 Hours", 86400), + ]; public AppSettings() { @@ -21,7 +33,19 @@ public partial class AppSettings : ObservableObject if (args.PropertyName == nameof(SettingsDirty)) return; + if (args.PropertyName == nameof(SelectedOption)) + _checkInterval = SelectedOption?.Interval ?? 30; + SettingsDirty = true; }; } -} \ No newline at end of file + + public void UpdateInterval() + { + int[] intervals = [30, 60, 1800, 3600, 21600, 43200, 86400]; + var i = intervals.IndexOf(CheckInterval); + SelectedOption = CheckIntervalOptions[i]; + } +} + +public record CheckIntervalOption(string Label, int Interval); \ No newline at end of file diff --git a/FreeTubeSyncer/REST/Syncer.cs b/FreeTubeSyncer/REST/Syncer.cs index 0dfddf1..767be9c 100644 --- a/FreeTubeSyncer/REST/Syncer.cs +++ b/FreeTubeSyncer/REST/Syncer.cs @@ -82,7 +82,7 @@ public class Syncer : ISyncer where T : class, IDataModel, new() return false; } - if (res.AppVersion == "0.1.4") + if (res.AppVersion == "0.1.5") { Log.Information("Server Online! {AppVersion}", res.AppVersion); return true; @@ -197,18 +197,34 @@ public class Syncer : ISyncer where T : class, IDataModel, new() if (entry == null) continue; entry.MarshalData(entry.Id(), entryObject); - if (_entries.Any(x => x.EqualId(entry.Id()))) + if (_entries.Any(x => x.Id() == entry.Id())) { - var data = _entries.First(x => x.EqualId(entry.Id())); + var data = _entries.First(x => x.Id() == entry.Id()); if (data.Equals(entry)) continue; Log.Information("Updated File Entry {EntryId} updated for {DbName}", entry.Id(), _dbName); - _entries.RemoveAll(x => x.EqualId(entry.Id())); + _entries.RemoveAll(x => x.Id() == entry.Id()); } else Log.Information("New File Entry {EntryId} for {DbName}", entry.Id(), _dbName); _entries.Add(entry); - await _client.PostJsonAsync(_restEndpoint, entry); + try + { + await _client.PostJsonAsync(_restEndpoint, entry); + } + catch (Exception ex) + { + await Task.Delay(500); + try + { + await _client.PostJsonAsync(_restEndpoint, entry); + } + catch (Exception iex) + { + Log.Error("Failed to sync entry {id} to REST Database.", entry.Id()); + } + } + _lastLineCount = i; } }