public static TM_FileStorage                    queue_Save_GuidanceItemsCache(this TM_FileStorage tmFileStorage)
 {
     // do this on a separate thread so that we don't hang the current request
     if (thread_Save_GuidanceItemsCache.isNull())
     {
         thread_Save_GuidanceItemsCache = O2Thread.mtaThread(
             () => {
             1000.sleep();
             tmFileStorage.save_GuidanceItemsToCache();
             thread_Save_GuidanceItemsCache = null;
         });
     }
     return(tmFileStorage);
 }
        public static TM_FileStorage                    xmlDB_Load_GuidanceItems_and_Create_CacheFile(this TM_FileStorage tmFileStorage)
        {
            var tmXmlDatabase = tmFileStorage.tmXmlDatabase();

            if (tmFileStorage.isNull() || tmXmlDatabase.isNull())
            {
                return(tmFileStorage);
            }

            var pathXmlLibraries = tmFileStorage.Path_XmlLibraries;

            if (pathXmlLibraries.notNull() && pathXmlLibraries.notNull())
            {
                lock (pathXmlLibraries)
                {
                    "[TM_FileStorage] in xmlDB_Load_GuidanceItems, creating cache file".debug();
                    var o2Timer = new O2Timer("[TM_FileStorage] loaded GuidanceItems from disk").start();
                    //Load GuidanceItem from the disk
                    foreach (var item in tmFileStorage.GuidanceExplorers_Paths)
                    {
                        var guidanceExplorer           = item.Key;
                        var pathToLibraryGuidanceItems = item.Value.parentFolder();
                        var libraryId = guidanceExplorer.library.name.guid();
                        "libraryId: {0} : {1}".info(libraryId, pathToLibraryGuidanceItems);
                        var filesToLoad = pathToLibraryGuidanceItems.files(true, "*.xml");
                        tmXmlDatabase.xmlDB_Load_GuidanceItemsV3(libraryId, filesToLoad);
                    }

                    //save it to the local cache file (reduces load time from 8s to 0.5s)
                    tmFileStorage.save_GuidanceItemsToCache();

                    tmXmlDatabase.ensureFoldersAndViewsIdsAreUnique();
                    tmXmlDatabase.removeMissingGuidanceItemsIdsFromViews();
                    o2Timer.stop();
                }
            }
            return(tmFileStorage);
        }