private async void BtnImportFromDocLibTapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
        {
            CloseAppBar();

            var fromFolder = await FileSystemUtils.PromptForFolder("Select folder to import from");

            if (fromFolder == null)
            {
                return;
            }

            var repository = new SnippetRepository();

            repository.LengthyOpStarting += (x, args) => { ProgressRingSnippets.IsActive = true; };
            repository.LengthyOpHasEnded += (x, args) => { ProgressRingSnippets.IsActive = false; };

            var nFilesImported = await repository.ImportAllSnippetsFromDocumentsLibrary(fromFolder);

            var msg = nFilesImported == -1 ?
                      "An error occurred during snippet import. The process did not complete successfully" :
                      nFilesImported.ToString() + " snippets imported into the local snippet data store";
            var dlg = new MessageDialog(msg);
            await dlg.ShowAsync();

            // Goto the root of the library and refresh
            FileSystemUserControl.GotoRootFolder();
        }
        private async void BtnDelFolderTapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
        {
            CloseAppBar();

            var tmpCurrentSnippetPath = CurrentSnippetPath;

            if (tmpCurrentSnippetPath.EndsWith("\\"))
            {
                tmpCurrentSnippetPath = tmpCurrentSnippetPath.TrimEnd('\\');
            }

            if (String.Compare(tmpCurrentSnippetPath, App.RootSnippetPath, StringComparison.Ordinal) == 0)
            {
                var notAllowedDlg = new MessageDialog("You cannot delete the root of the snippet library");
                await notAllowedDlg.ShowAsync();

                return;
            }

            var msg = "Delete the folder \"" +
                      FileSystemUtils.GetLocalDataStoreRelativeSnippetRootPath(CurrentSnippetPath) +
                      "\" (and all files and folders contained in it) - are you sure?";

            var dlg = new MessageDialog(msg);

            dlg.Commands.Add(new UICommand("Yes"));
            dlg.Commands.Add(new UICommand("No"));
            var answer = await dlg.ShowAsync();

            if (String.Compare(answer.Label, "No", StringComparison.Ordinal) == 0)
            {
                return;
            }

            bool folderRemoved;

            try
            {
                var folderToDelete = await StorageFolder.GetFolderFromPathAsync(CurrentSnippetPath);

                await folderToDelete.DeleteAsync(StorageDeleteOption.Default); // Delete to the recycle bin

                FileSystemUserControl.GotoParentFolder();                      // Go up one level
                folderRemoved = true;
            }
            catch
            {
                folderRemoved = false;
            }

            if (folderRemoved)
            {
                return;
            }

            dlg = new MessageDialog("Unable to remove folder");
            await dlg.ShowAsync();
        }
        protected async override void LoadState(Object navigationParameter, Dictionary <String, Object> pageState)
        {
            try
            {
                // Setup the required root and current folders
                SetFolderDefaults();

                // Hook into visual state changes so we can reflect changes to our user control
                ApplicationViewStates.CurrentStateChanged += ApplicationViewStatesOnCurrentStateChanged;

                // Do we need to install some samples (is the library empty)?
                var folders = await FileSystemUtils.GetAllFoldersAsync(RootSnippetPath);

                if (folders == null || folders.Count == 0)
                {
                    await InstallSampleSnippets();
                }

                if (navigationParameter != null)
                {
                    // Page was opened to do a search
                    BtnClearSearch.Visibility = Visibility.Visible;

                    var searchItem = navigationParameter.ToString();

                    bool searchFromCurrentFolder = true;
                    if (ApplicationData.Current.RoamingSettings.Values.ContainsKey("SearchFromCurrentFolder"))
                    {
                        searchFromCurrentFolder = (bool)ApplicationData.Current.RoamingSettings.Values["SearchFromCurrentFolder"];
                    }

                    FileSystemUserControl.DoSnippetQuery(searchFromCurrentFolder ? CurrentSnippetPath : RootSnippetPath, searchItem);
                }
                else
                {
                    BtnClearSearch.Visibility = Visibility.Collapsed;

                    if (!string.IsNullOrEmpty(CurrentSnippetPath))
                    {
                        FileSystemUserControl.CurrentSnippetFolder = CurrentSnippetPath;
                    }
                    FileSystemUserControl.QueryResults = string.Empty;
                }
            }
            catch
            {
            }

            // Hook into our user control's SnippetSelected event so we can navigate to a new page to display info on the snippet
            FileSystemUserControl.SnippetSelected += (sender, args) =>
            {
                try
                {
                    if (!(args is SnippetSelectedEventArgs))
                    {
                        return;
                    }

                    var selectedSnippetArgs = args as SnippetSelectedEventArgs;
                    if (selectedSnippetArgs == null)
                    {
                        return;
                    }

                    var selectedSnippet = selectedSnippetArgs.Snippet;
                    Frame.Navigate(typeof(SnippetPage), selectedSnippet.Path);
                }
                catch
                {
                }
            };

            // Hook into the user control's FolderChanged event
            FileSystemUserControl.FolderChanged += (sender, args) =>
            {
                if (args == null)
                {
                    return;
                }

                var folderChangedArgs = args as FolderChangedEventArgs;
                if (folderChangedArgs == null || string.IsNullOrEmpty(folderChangedArgs.SelectedPath))
                {
                    return;
                }

                CurrentSnippetPath = folderChangedArgs.SelectedPath;
            };
        }
 private void ApplicationViewStatesOnCurrentStateChanged(object sender, VisualStateChangedEventArgs visualStateChangedEventArgs)
 {
     // Tell the custom control to change appearance for the new visual state
     FileSystemUserControl.SetVisualState(visualStateChangedEventArgs.NewState.Name);
 }