Start adding server support

This commit is contained in:
2025-09-24 21:08:59 -04:00
parent 9e2e7aabe8
commit 4e721efa55
47 changed files with 1652 additions and 266 deletions

View File

@@ -1,8 +1,8 @@
using System;
using System.Linq;
using FeedCenter.Data;
using FeedCenter.Data;
using FeedCenter.Options;
using Realms;
using System;
using System.Linq;
namespace FeedCenter;
@@ -12,16 +12,52 @@ public class FeedCenterEntities
{
var realmConfiguration = new RealmConfiguration($"{Database.DatabaseFile}")
{
SchemaVersion = 1,
SchemaVersion = 2,
MigrationCallback = (migration, oldSchemaVersion) =>
{
if (oldSchemaVersion == 1)
migration.NewRealm.Add(Account.CreateDefault());
var localAccount = migration.NewRealm.All<Account>().First(a => a.Type == AccountType.Local);
var newVersionCategories = migration.NewRealm.All<Category>();
foreach (var newVersionCategory in newVersionCategories)
{
switch (oldSchemaVersion)
{
case 1:
newVersionCategory.Account = localAccount;
newVersionCategory.RemoteId = null;
break;
}
}
var newVersionFeeds = migration.NewRealm.All<Feed>();
foreach (var newVersionFeed in newVersionFeeds)
{
if (oldSchemaVersion == 0)
switch (oldSchemaVersion)
{
newVersionFeed.UserAgent = null;
case 0:
newVersionFeed.UserAgent = null;
break;
case 1:
newVersionFeed.Account = localAccount;
newVersionFeed.RemoteId = null;
break;
}
}
var newVersionFeedItems = migration.NewRealm.All<FeedItem>();
foreach (var newVersionFeedItem in newVersionFeedItems)
{
switch (oldSchemaVersion)
{
case 1:
newVersionFeedItem.RemoteId = null;
break;
}
}
}
@@ -29,13 +65,20 @@ public class FeedCenterEntities
RealmInstance = Realm.GetInstance(realmConfiguration);
Accounts = new RealmObservableCollection<Account>(RealmInstance);
Settings = new RealmObservableCollection<Setting>(RealmInstance);
Feeds = new RealmObservableCollection<Feed>(RealmInstance);
Categories = new RealmObservableCollection<Category>(RealmInstance);
if (!Accounts.Any())
{
RealmInstance.Write(() => Accounts.Add(Account.CreateDefault()));
}
if (!Categories.Any())
{
RealmInstance.Write(() => Categories.Add(Category.CreateDefault()));
var localAccount = Accounts.First(a => a.Type == AccountType.Local);
RealmInstance.Write(() => Categories.Add(Category.CreateDefault(localAccount)));
}
}
@@ -46,15 +89,16 @@ public class FeedCenterEntities
get { return Categories.First(c => c.IsDefault); }
}
public RealmObservableCollection<Feed> Feeds { get; private set; }
private Realm RealmInstance { get; }
public RealmObservableCollection<Setting> Settings { get; private set; }
public void Refresh()
public Account LocalAccount
{
RealmInstance.Refresh();
get { return Accounts.First(a => a.Type == AccountType.Local); }
}
public RealmObservableCollection<Feed> Feeds { get; }
public RealmObservableCollection<Account> Accounts { get; }
private Realm RealmInstance { get; }
public RealmObservableCollection<Setting> Settings { get; }
public void SaveChanges(Action action)
{
RealmInstance.Write(action);