private void MigrateStatistics(EsentPersistentDictionary cacheStore, string key, Statistics statistics)
        {
            var entryKey = key.SubstringAfter("_");

            switch (entryKey)
            {
            case "TotalFilesTransferred":
                statistics.TotalFilesTransferred = cacheStore.Get <int>(key);
                break;

            case "TotalBytesTransferred":
                statistics.TotalBytesTransferred = cacheStore.Get <long>(key);
                break;

            case "TotalTimeSpentWithTransfer":
                statistics.TotalTimeSpentWithTransfer = cacheStore.Get <TimeSpan>(key);
                break;

            case "TotalUsageTime":
                statistics.TotalUsageTime = cacheStore.Get <TimeSpan>(key);
                break;

            case "ApplicationStarted":
                statistics.ApplicationStarted = cacheStore.Get <int>(key);
                break;

            case "ApplicationCrashed":
                statistics.ApplicationCrashed = cacheStore.Get <int>(key);
                break;
            }
        }
Пример #2
0
        public void PersistantDictionary_CanStoreAndRetriveComplexClass()
        {
            // Arrange & Act
            var dic = new EsentPersistentDictionary(".\\test");

            dic.Put("key", new ComplexClass
            {
                Email  = "*****@*****.**", Name = "Andy Long",
                Person = new SimpleClass {
                    Email = "*****@*****.**", Name = "x Andy Long"
                },
                ListOfPeople = new List <SimpleClass>()
                {
                    new SimpleClass {
                        Email = "*****@*****.**", Name = "1 Andy Long"
                    },
                    new SimpleClass {
                        Email = "*****@*****.**", Name = "2 Andy Long"
                    }
                }
            });

            var result = dic.Get <ComplexClass>("key");

            //Assert
            Assert.AreEqual(typeof(ComplexClass), result.GetType());
            Assert.AreEqual("*****@*****.**", result.Email);
            Assert.AreEqual("Andy Long", result.Name);

            Assert.AreEqual(result.Person.Name, "x Andy Long");
            Assert.AreEqual(result.ListOfPeople.Count, 2);

            dic.Dispose();
        }
Пример #3
0
        static void Main(string[] args)
        {
            const string baseDirectory = "c:\\tmp\\PersistantCache";

            //var diskCache = new BPlusTreeCache<Thing>(baseDirectory, 1);

            var diskCache = new EsentPersistentDictionary(baseDirectory);

            PersistentCache = new CacheStore <PersistentCache.CacheItem>(baseDirectory, "1", null, "00:00:10", diskCache);

            Console.WriteLine("Creating Data");
            const int itemsToUse = 1000000;

            var items = GenerateList(itemsToUse, 20);

            items.Shuffle();

            //var temp = new CacheItem[itemsToUse];
            //items.CopyTo(temp);
            //var reversedItems = temp.Reverse().ToList();

            var items2 = GenerateList(itemsToUse, 20);

            items2.Shuffle();

            RunPersistanceCacheTest(new List <List <CacheItem> >(2)
            {
                items, items2
            });

            Console.ReadKey();
        }
 private void MigrateEsentToDatabaseCallback(EsentPersistentDictionary cacheStore, Action <SanityCheckResult> callback, SanityCheckResult result)
 {
     if (cacheStore != null && _windowManager.Confirm(Resx.Delete, Resx.DeleteEsentConfirmationMessage))
     {
         DeleteEsent(cacheStore);
     }
     callback.Invoke(result);
 }
Пример #5
0
        public void PersistantDictionary_DisposesEsentDatabaseCorrectly()
        {
            // Arrange & Act
            var dic = new EsentPersistentDictionary(".\\test");

            dic.Put("key", "value");
            dic.Dispose();

            // Assert
            Assert.IsFalse(Directory.Exists(".\\test"));
        }
Пример #6
0
        public void PersistantDictionary_CanStoreAndRetriveStrings()
        {
            // Arrange & Act
            var dic = new EsentPersistentDictionary(".\\test");

            dic.Put("key", "value");

            //Assert
            Assert.AreEqual("value", dic.Get <string>("key"));
            dic.Dispose();
        }
Пример #7
0
        public void PersistantDictionary_DisposesEsentDatabaseCorrectly_WeCanCreateStoreDisposeWithMoreThan2048Instances()
        {
            for (var i = 0; i < 2048; i++)
            {
                var dic = new EsentPersistentDictionary(string.Format(".\\{0}", i));
                dic.Put("key", "value");

                Assert.AreEqual("value", dic.Get <string>("key"));

                dic.Dispose();
            }
        }
Пример #8
0
        public void PersistantDictionary_CanStoreAndRetriveSimpleclass()
        {
            // Arrange & Act
            var dic = new EsentPersistentDictionary(".\\test");

            dic.Put("key", new SimpleClass {
                Email = "*****@*****.**", Name = "Andy Long"
            });

            var result = dic.Get <SimpleClass>("key");

            //Assert
            Assert.AreEqual(typeof(SimpleClass), result.GetType());
            Assert.AreEqual("*****@*****.**", result.Email);
            Assert.AreEqual("Andy Long", result.Name);

            dic.Dispose();
        }
        private void MigrateCacheItem(EsentPersistentDictionary cacheStore, IDbConnection db, string key)
        {
            var v = cacheStore.Get <CacheEntry <FileSystemItem> >(key);
            var c = new CacheItem
            {
                Id               = key.SubstringAfter("_"),
                Date             = v.Date,
                Expiration       = v.Expiration,
                Size             = v.Size,
                Title            = v.Content.Title,
                Type             = (int)v.Content.Type,
                TitleType        = (int)v.Content.TitleType,
                ContentType      = (int)v.Content.ContentType,
                Thumbnail        = v.Content.Thumbnail,
                Content          = string.IsNullOrEmpty(v.TempFilePath) ? null : File.ReadAllBytes(v.TempFilePath),
                RecognitionState = (int)v.Content.RecognitionState
            };

            db.Insert(c);
        }
Пример #10
0
 private static void MigrateFtpConnection(EsentPersistentDictionary cacheStore, IDbConnection db, string key)
 {
     var v = cacheStore.Get<FtpConnection>(key);
     db.Insert(v);
 }
Пример #11
0
 private void MigrateCacheItem(EsentPersistentDictionary cacheStore, IDbConnection db, string key)
 {
     var v = cacheStore.Get<CacheEntry<FileSystemItem>>(key);
     var c = new CacheItem
     {
         Id = key.SubstringAfter("_"),
         Date = v.Date,
         Expiration = v.Expiration,
         Size = v.Size,
         Title = v.Content.Title,
         Type = (int)v.Content.Type,
         TitleType = (int)v.Content.TitleType,
         ContentType = (int)v.Content.ContentType,
         Thumbnail = v.Content.Thumbnail,
         Content = string.IsNullOrEmpty(v.TempFilePath) ? null : File.ReadAllBytes(v.TempFilePath),
         RecognitionState = (int)v.Content.RecognitionState
     };
     db.Insert(c);
 }
        private void UpgradeEsentToLatestVersion(EsentPersistentDictionary cacheStore)
        {
            const int requiredCacheVersion = 3;
            var       actualCacheVersion   = cacheStore.TryGet("CacheVersion", 1);

            if (actualCacheVersion == requiredCacheVersion)
            {
                return;
            }

            var cacheKeys = cacheStore.Keys.Where(k => k.StartsWith(Strings.UserMessageCacheItemPrefix)).ToList();

            if (cacheKeys.Any())
            {
                var resx = Resources.ResourceManager.GetResourceSet(CultureInfo.InvariantCulture, true, false).Cast <DictionaryEntry>().ToArray();
                SetItemsCount(resx.Length);
                foreach (var entry in resx)
                {
                    var resxKey = (string)entry.Key;
                    if (!resxKey.EndsWith("Message"))
                    {
                        continue;
                    }
                    var resxValue = (string)entry.Value;
                    var cacheKey  = cacheKeys.FirstOrDefault(k => k == Strings.UserMessageCacheItemPrefix + resxValue.Hash());
                    if (cacheKey == null)
                    {
                        continue;
                    }
                    cacheStore.Remove(cacheKey);
                    cacheStore.Set(Strings.UserMessageCacheItemPrefix + resxKey.Hash(), true);
                    IncrementItemsMigrated();
                }
            }

            if (actualCacheVersion != 1)
            {
                return;
            }

            var keys         = cacheStore.Keys;
            var cacheEntries = keys.Where(k => k.StartsWith("CacheEntry_")).ToArray();
            var payload      = _resourceManager.GetContentByteArray("/Resources/Items/32x32/xbox_logo.png");

            SetItemsCount(cacheEntries.Length);
            foreach (var hashKey in cacheEntries)
            {
                var entry = cacheStore.Get <CacheEntry <FileSystemItem> >(hashKey);
                if (entry.Content != null && !string.IsNullOrEmpty(entry.Content.Title))
                {
                    if (entry.Content.TitleType != TitleType.Game || entry.Content.RecognitionState != RecognitionState.NotRecognized)
                    {
                        continue;
                    }

                    entry.Content.RecognitionState = entry.Content.Thumbnail.EqualsWith(payload)
                                                         ? RecognitionState.PartiallyRecognized
                                                         : RecognitionState.Recognized;
                    cacheStore.Update(hashKey, entry);
                }
                else
                {
                    cacheStore.Remove(hashKey);
                }
                IncrementItemsMigrated();
            }
        }
Пример #13
0
 private void MigrateStatistics(EsentPersistentDictionary cacheStore, string key, Statistics statistics)
 {
     var entryKey = key.SubstringAfter("_");
     switch (entryKey)
     {
         case "TotalFilesTransferred":
             statistics.TotalFilesTransferred = cacheStore.Get<int>(key);
             break;
         case "TotalBytesTransferred":
             statistics.TotalBytesTransferred = cacheStore.Get<long>(key);
             break;
         case "TotalTimeSpentWithTransfer":
             statistics.TotalTimeSpentWithTransfer = cacheStore.Get<TimeSpan>(key);
             break;
         case "TotalUsageTime":
             statistics.TotalUsageTime = cacheStore.Get<TimeSpan>(key);
             break;
         case "ApplicationStarted":
             statistics.ApplicationStarted = cacheStore.Get<int>(key);
             break;
         case "ApplicationCrashed":
             statistics.ApplicationCrashed = cacheStore.Get<int>(key);
             break;
     }
 }
        private static void MigrateUserSettings(EsentPersistentDictionary cacheStore, string key, UserSettings userSettings)
        {
            switch (key)
            {
            case "DisableCustomChrome":
                userSettings.DisableCustomChrome = cacheStore.Get <bool>(key);
                break;

            case "UseVersionChecker":
                userSettings.UseVersionChecker = cacheStore.Get <bool>(key);
                break;

            case "UseRemoteCopy":
                userSettings.UseRemoteCopy = cacheStore.Get <bool>(key);
                break;

            case "UseJqe360":
                userSettings.UseUnity = cacheStore.Get <bool>(key);
                break;

            case "ProfileInvalidation":
                userSettings.ProfileInvalidation = cacheStore.Get <bool>(key);
                break;

            case "ProfileExpiration":
                userSettings.ProfileExpiration = cacheStore.Get <int>(key);
                break;

            case "RecognizedGameExpiration":
                userSettings.RecognizedGameExpiration = cacheStore.Get <int>(key);
                break;

            case "PartiallyRecognizedGameExpiration":
                userSettings.PartiallyRecognizedGameExpiration = cacheStore.Get <int>(key);
                break;

            case "UnrecognizedGameExpiration":
                userSettings.UnrecognizedGameExpiration = cacheStore.Get <int>(key);
                break;

            case "XboxLiveContentExpiration":
                userSettings.XboxLiveContentExpiration = cacheStore.Get <int>(key);
                break;

            case "XboxLiveContentInvalidation":
                userSettings.XboxLiveContentInvalidation = cacheStore.Get <bool>(key);
                break;

            case "UnknownContentExpiration":
                userSettings.UnknownContentExpiration = cacheStore.Get <int>(key);
                break;

            case "LeftPaneType":
                userSettings.LeftPaneType = cacheStore.Get <string>(key);
                break;

            case "RightPaneType":
                userSettings.RightPaneType = cacheStore.Get <string>(key);
                break;

            case "LeftPaneFileListPaneSettings":
                var l = cacheStore.Get <FileListPaneSettings>(key);
                userSettings.LeftPaneDirectory     = l.Directory;
                userSettings.LeftPaneSortByField   = l.SortByField;
                userSettings.LeftPaneSortDirection = (int)l.SortDirection;
                break;

            case "RightPaneFileListPaneSettings":
                var r = cacheStore.Get <FileListPaneSettings>(key);
                userSettings.RightPaneDirectory     = r.Directory;
                userSettings.RightPaneSortByField   = r.SortByField;
                userSettings.RightPaneSortDirection = (int)r.SortDirection;
                break;

            case "DisableUserStatisticsParticipation":
                userSettings.DisableUserStatisticsParticipation = cacheStore.Get <bool?>(key);
                break;
            }
        }
 private void DeleteEsent(EsentPersistentDictionary cacheStore)
 {
     cacheStore.Dispose();
     Directory.Delete(_esentDir, true);
 }
Пример #16
0
        private static void MigrateUserSettings(EsentPersistentDictionary cacheStore, string key, UserSettings userSettings)
        {
            switch (key)
            {
                case "DisableCustomChrome":
                    userSettings.DisableCustomChrome = cacheStore.Get<bool>(key);
                    break;
                case "UseVersionChecker":
                    userSettings.UseVersionChecker = cacheStore.Get<bool>(key);
                    break;
                case "UseRemoteCopy":
                    userSettings.UseRemoteCopy = cacheStore.Get<bool>(key);
                    break;
                case "UseJqe360":
                    userSettings.UseUnity = cacheStore.Get<bool>(key);
                    break;
                case "ProfileInvalidation":
                    userSettings.ProfileInvalidation = cacheStore.Get<bool>(key);
                    break;
                case "ProfileExpiration":
                    userSettings.ProfileExpiration = cacheStore.Get<int>(key);
                    break;
                case "RecognizedGameExpiration":
                    userSettings.RecognizedGameExpiration = cacheStore.Get<int>(key);
                    break;
                case "PartiallyRecognizedGameExpiration":
                    userSettings.PartiallyRecognizedGameExpiration = cacheStore.Get<int>(key);
                    break;
                case "UnrecognizedGameExpiration":
                    userSettings.UnrecognizedGameExpiration = cacheStore.Get<int>(key);
                    break;
                case "XboxLiveContentExpiration":
                    userSettings.XboxLiveContentExpiration = cacheStore.Get<int>(key);
                    break;
                case "XboxLiveContentInvalidation":
                    userSettings.XboxLiveContentInvalidation = cacheStore.Get<bool>(key);
                    break;
                case "UnknownContentExpiration":
                    userSettings.UnknownContentExpiration = cacheStore.Get<int>(key);
                    break;
                case "LeftPaneType":
                    userSettings.LeftPaneType = cacheStore.Get<string>(key);
                    break;
                case "RightPaneType":
                    userSettings.RightPaneType = cacheStore.Get<string>(key);
                    break;
                case "LeftPaneFileListPaneSettings":
                    var l = cacheStore.Get<FileListPaneSettings>(key);
                    userSettings.LeftPaneDirectory = l.Directory;
                    userSettings.LeftPaneSortByField = l.SortByField;
                    userSettings.LeftPaneSortDirection = (int)l.SortDirection;
                    break;
                case "RightPaneFileListPaneSettings":
                    var r = cacheStore.Get<FileListPaneSettings>(key);
                    userSettings.RightPaneDirectory = r.Directory;
                    userSettings.RightPaneSortByField = r.SortByField;
                    userSettings.RightPaneSortDirection = (int)r.SortDirection;
                    break;
                case "DisableUserStatisticsParticipation":
                    userSettings.DisableUserStatisticsParticipation = cacheStore.Get<bool?>(key);
                    break;
            }

        }
Пример #17
0
 private void MigrateEsentToDatabaseCallback(EsentPersistentDictionary cacheStore, Action<SanityCheckResult> callback, SanityCheckResult result)
 {
     if (cacheStore != null && _windowManager.Confirm(Resx.Delete, Resx.DeleteEsentConfirmationMessage)) DeleteEsent(cacheStore);
     callback.Invoke(result);
 }
Пример #18
0
 private void DeleteEsent(EsentPersistentDictionary cacheStore)
 {
     cacheStore.Dispose();
     Directory.Delete(_esentDir, true);
 }
Пример #19
0
        private void UpgradeEsentToLatestVersion(EsentPersistentDictionary cacheStore)
        {
            const int requiredCacheVersion = 3;
            var actualCacheVersion = cacheStore.TryGet("CacheVersion", 1);
            if (actualCacheVersion == requiredCacheVersion) return;

            var cacheKeys = cacheStore.Keys.Where(k => k.StartsWith(Strings.UserMessageCacheItemPrefix)).ToList();
            if (cacheKeys.Any())
            {
                var resx = Resources.ResourceManager.GetResourceSet(CultureInfo.InvariantCulture, true, false).Cast<DictionaryEntry>().ToArray();
                SetItemsCount(resx.Length);
                foreach (var entry in resx)
                {
                    var resxKey = (string)entry.Key;
                    if (!resxKey.EndsWith("Message")) continue;
                    var resxValue = (string)entry.Value;
                    var cacheKey = cacheKeys.FirstOrDefault(k => k == Strings.UserMessageCacheItemPrefix + resxValue.Hash());
                    if (cacheKey == null) continue;
                    cacheStore.Remove(cacheKey);
                    cacheStore.Set(Strings.UserMessageCacheItemPrefix + resxKey.Hash(), true);
                    IncrementItemsMigrated();
                }
            }

            if (actualCacheVersion != 1) return;

            var keys = cacheStore.Keys;
            var cacheEntries = keys.Where(k => k.StartsWith("CacheEntry_")).ToArray();
            var payload = _resourceManager.GetContentByteArray("/Resources/xbox_logo.png");
            SetItemsCount(cacheEntries.Length);
            foreach (var hashKey in cacheEntries)
            {
                var entry = cacheStore.Get<CacheEntry<FileSystemItem>>(hashKey);
                if (entry.Content != null && !string.IsNullOrEmpty(entry.Content.Title))
                {
                    if (entry.Content.TitleType != TitleType.Game || entry.Content.RecognitionState != RecognitionState.NotRecognized) continue;

                    entry.Content.RecognitionState = entry.Content.Thumbnail.EqualsWith(payload)
                                                         ? RecognitionState.PartiallyRecognized
                                                         : RecognitionState.Recognized;
                    cacheStore.Update(hashKey, entry);
                }
                else
                {
                    cacheStore.Remove(hashKey);
                }
                IncrementItemsMigrated();
            }
        }
        private EsentPersistentDictionary MigrateEsentToDatabase()
        {
            EsentPersistentDictionary cacheStore = null;
            var statistics   = new Statistics();
            var userSettings = new UserSettings();
            var sw           = new Stopwatch();

            sw.Start();
            using (var db = _dbContext.Open(true))
            {
                if (EsentExists())
                {
                    this.NotifyProgressStarted();
                    cacheStore = new EsentPersistentDictionary(_esentDir);
                    UpgradeEsentToLatestVersion(cacheStore);
                    var keys = cacheStore.Keys;
                    SetItemsCount(keys.Length);
                    foreach (var key in keys)
                    {
                        var prefix = key.SubstringBefore("_");
                        switch (prefix)
                        {
                        case "CacheEntry":
                            MigrateCacheItem(cacheStore, db, key);
                            break;

                        case "FtpConnection":
                            MigrateFtpConnection(cacheStore, db, key);
                            break;

                        case "Stat":
                            MigrateStatistics(cacheStore, key, statistics);
                            break;

                        case "WarningMessage":
                            MigrateIgnoredMessages(db, key);
                            break;

                        default:
                            MigrateUserSettings(cacheStore, key, userSettings);
                            break;
                        }
                        IncrementItemsMigrated();
                    }
                }
                db.Insert(statistics);
                db.Insert(userSettings);
            }
            sw.Stop();
            Debug.WriteLine("[MIGRATION] Database created in {0}", sw.Elapsed);

            if (Directory.Exists(_esentDir))
            {
                foreach (var postData in Directory.GetFiles(Path.Combine(_esentDir, "post")))
                {
                    File.Move(postData, Path.Combine(App.PostDirectory, Path.GetFileName(postData)));
                }
            }
            if (cacheStore != null)
            {
                this.NotifyProgressFinished();
            }
            return(cacheStore);
        }
        private static void MigrateFtpConnection(EsentPersistentDictionary cacheStore, IDbConnection db, string key)
        {
            var v = cacheStore.Get <FtpConnection>(key);

            db.Insert(v);
        }
Пример #22
0
        private EsentPersistentDictionary MigrateEsentToDatabase()
        {
            EsentPersistentDictionary cacheStore = null;
            var statistics = new Statistics();
            var userSettings = new UserSettings();
            var sw = new Stopwatch();
            sw.Start();
            using (var db = _dbContext.Open(true))
            {
                if (EsentExists())
                {
                    this.NotifyProgressStarted();
                    cacheStore = new EsentPersistentDictionary(_esentDir);
                    UpgradeEsentToLatestVersion(cacheStore);
                    var keys = cacheStore.Keys;
                    SetItemsCount(keys.Length);
                    foreach (var key in keys)
                    {
                        var prefix = key.SubstringBefore("_");
                        switch (prefix)
                        {
                            case "CacheEntry":
                                MigrateCacheItem(cacheStore, db, key);
                                break;
                            case "FtpConnection":
                                MigrateFtpConnection(cacheStore, db, key);
                                break;
                            case "Stat":
                                MigrateStatistics(cacheStore, key, statistics);
                                break;
                            case "WarningMessage":
                                MigrateIgnoredMessages(db, key);
                                break;
                            default:
                                MigrateUserSettings(cacheStore, key, userSettings);
                                break;
                        }
                        IncrementItemsMigrated();
                    }
                }
                db.Insert(statistics);
                db.Insert(userSettings);
            }
            sw.Stop();
            Debug.WriteLine("[MIGRATION] Database created in {0}", sw.Elapsed);

            if (Directory.Exists(_esentDir))
            {
                foreach (var postData in Directory.GetFiles(Path.Combine(_esentDir, "post")))
                {
                    File.Move(postData, Path.Combine(App.PostDirectory, Path.GetFileName(postData)));
                }
            }
            if (cacheStore != null) this.NotifyProgressFinished();
            return cacheStore;
        }