private void refreshListingWithSearch()
 {
     search = new Search(allEnabledItems(), searchBox.Text, settings.SearchOptions, settings.SortOptions, settings.SortDescending);
     updateMainListing(search.Items, true);
 }
 private void togglePreferences()
 {
     showingPreferencesPanel = !showingPreferencesPanel;
     updatePreferencesPanel();
     runLongOperation((() => search = new Search(allEnabledItems(), searchBox.Text, settings.SearchOptions)),
                      (() => updateMainListing(search.Items, true)), "Finalising Directory Cache");
 }
        private void beginLoad(bool async = true)
        {
            Action action = (() => {
                TwoLight_Sortle.Load.FilesCache =
                    TwoLight_Sortle.Load.FilesCache.LoadFromDisk<Dictionary<UInt32, Item>>(
                        Path.Combine(Application.UserAppDataPath, "FilesCache"));
            });
            Action deleteAction = (() => {
                IEnumerable<Item> deletedItems = from kvPair in TwoLight_Sortle.Load.FilesCache
                                                 where !kvPair.Value.Exists
                                                 select kvPair.Value;
                foreach (Item item in deletedItems) {
                    item.Delete();
                }
                TwoLight_Sortle.Load.FilesCache =
                    TwoLight_Sortle.Load.FilesCache.Where(kvPair => kvPair.Value.Exists).
                        ToDictionary(
                            kvPair => kvPair.Key,
                            kvPair => kvPair.Value);
            });
            Action filesAction = (() => {
                Tags.TagList = Tags.TagList.LoadFromDisk<Dictionary<string, Tag>>(Path.Combine(
                    Application.UserAppDataPath, "Tags"));
                TwoLight_Sortle.Load.FilesCache.ToList().ForEach(item => item.Value.Tags.ToList().ForEach(tag => tag.AddedImage(item.Value)));
            });
            settings = new Settings();
            Action loadSettingsAction = (() => {
                settings =
                    settings.LoadFromDisk<Settings>(Path.Combine(Application.UserAppDataPath,
                                                                 "Settings"));
            });
            Action callback = (() => {
                updateMainListing(search.Items);
                updateSearchOptionsMenuCheckedStatus();
                updatePreferencesPanel();
                buildQuickFolderAccessList();
            });
            Action dirStateAction = (() => {
                search = new Search(allEnabledItems(), "", settings.SearchOptions);
                startupComplete = true;
            });
            if (async) {
                runLongOperation(action, null, "Verifying File Cache Integrity");
                runLongOperation(deleteAction, null, "Reticulating Splines");
                runLongOperation(filesAction, null, "Loading Tags Cache");
                runLongOperation(loadSettingsAction, null, "Loading Directory Data");
                runLongOperation(dirStateAction, callback, "Generating Directory State");
            }
            else {
                action();
                deleteAction();
                filesAction();
                loadSettingsAction();
                dirStateAction();
                callback();

            }
        }