Ejemplo n.º 1
0
        public bool Delete(TModel item)
        {
            // Importantly, begin the realm write *before* re-fetching, else the update realm may not be in a consistent state
            // (ie. if an async import finished very recently).
            return(Realm.Write(realm =>
            {
                if (!item.IsManaged)
                {
                    item = realm.Find <TModel>(item.ID);
                }

                if (item?.DeletePending != false)
                {
                    return false;
                }

                item.DeletePending = true;
                return true;
            }));
        }
Ejemplo n.º 2
0
        public void Cleanup()
        {
            Logger.Log(@"Beginning realm file store cleanup");

            int totalFiles   = 0;
            int removedFiles = 0;

            // can potentially be run asynchronously, although we will need to consider operation order for disk deletion vs realm removal.
            realm.Write(r =>
            {
                // TODO: consider using a realm native query to avoid iterating all files (https://github.com/realm/realm-dotnet/issues/2659#issuecomment-927823707)
                var files = r.All <RealmFile>().ToList();

                foreach (var file in files)
                {
                    totalFiles++;

                    if (file.BacklinksCount > 0)
                    {
                        continue;
                    }

                    try
                    {
                        removedFiles++;
                        Storage.Delete(file.GetStoragePath());
                        r.Remove(file);
                    }
                    catch (Exception e)
                    {
                        Logger.Error(e, $@"Could not delete databased file {file.Hash}");
                    }
                }
            });

            Logger.Log($@"Finished realm file store cleanup ({removedFiles} of {totalFiles} deleted)");
        }