Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }