public static void Initialize(IDatabaseConnectionDescriptor descriptor) { System.Diagnostics.Debug.WriteLine("Krile DB Initializing..."); if (_isInitialized) { throw new InvalidOperationException("Database core is already initialized."); } _isInitialized = true; _descriptor = descriptor; // register sqlite functions var asm = Assembly.GetExecutingAssembly(); asm.DefinedTypes.Where(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof(SQLiteFunction))) .Where(t => t.GetCustomAttribute <SQLiteFunctionAttribute>() != null) .ForEach(t => { try { SQLiteFunction.RegisterFunction(t); } catch { } }); // initialize tables var tasks = new Task[] { }; Task.WaitAll(Task.Factory.StartNew(() => { tasks = new[] { AccountInfoCrud.InitializeAsync(descriptor), StatusCrud.InitializeAsync(descriptor), StatusEntityCrud.InitializeAsync(descriptor), UserCrud.InitializeAsync(descriptor), UserDescriptionEntityCrud.InitializeAsync(descriptor), UserUrlEntityCrud.InitializeAsync(descriptor), ListCrud.InitializeAsync(descriptor), ListUserCrud.InitializeAsync(descriptor), FavoritesCrud.InitializeAsync(descriptor), RetweetsCrud.InitializeAsync(descriptor), RelationCrud.InitializeAsync(descriptor), ManagementCrud.InitializeAsync(descriptor) }; })); Task.WaitAll(tasks); }
public static async Task CleanupOldStatusesAsync(int threshold, Action <Tuple <int, int> > progressNotifier = null) { var n = progressNotifier ?? (_ => { }); n(Tuple.Create(1, 5)); await StatusCrud.DeleteOldStatusAsync(threshold); n(Tuple.Create(2, 5)); await StatusCrud.DeleteOrphanedRetweetAsync(); n(Tuple.Create(3, 5)); await StatusEntityCrud.DeleteNotExistsAsync(StatusCrud.TableName); n(Tuple.Create(4, 5)); await FavoritesCrud.DeleteNotExistsAsync(StatusCrud.TableName); n(Tuple.Create(5, 5)); await RetweetsCrud.DeleteNotExistsAsync(StatusCrud.TableName); }