internal static void ShowConsoleMainMenu(ICodeSearcherManager manager, ITextBasedUserInterface tui, IMenuNavigator nav) { do { tui.Clear(); tui.WriteLine("[1] Create New Index"); tui.WriteLine("[2] Show all Indexes"); tui.WriteLine("[3] Exit"); tui.WriteLine("Please choose: "); var answer = tui.ReadLine(); if (int.TryParse(answer, out int selection)) { if (1.Equals(selection)) //Create New Index { nav.GoToCreateNewIndexMenu(manager, tui); } else if (2.Equals(selection)) //Show All Indexes { nav.GoToShowAllIndexesMenu(manager, tui); } else if (3.Equals(selection)) //Exit { nav.ExitMenu(); } } } while (nav.MenuLoopActive()); }
internal static void ShowSelectedIndexMenu(ICodeSearcherManager manager, ICodeSearcherIndex selectedIndex, ITextBasedUserInterface tui, IMenuNavigator nav) { string answer; do { tui.WriteLine($"ID:\t\t{selectedIndex.ID}"); tui.WriteLine($"Source:\t\t{selectedIndex.SourcePath}"); tui.Write($"File Extensions:\t\t"); foreach (var extension in selectedIndex.FileExtensions) { tui.Write($"{extension}, "); } tui.WriteLine(); tui.WriteLine($"Created on: {selectedIndex.CreatedTime.ToString("yyyy-MM-dd H:mm:ss")}"); tui.WriteLine("[1] Search in Index"); tui.WriteLine("[2] Delete Index"); tui.WriteLine("[3] Return to main menu"); tui.WriteLine("Please choose: "); answer = tui.ReadLine(); if (int.TryParse(answer, out int selection)) { if (1.Equals(selection)) { var logic = GetCodeSearcherLogicByIndex(selectedIndex); logic.SearchWithinExistingIndex( startCallback: () => { }, getSearchWord: () => { bool exit = ReadWordToSearch(out string word); word?.Trim(); return(word, exit); }, getMaximumNumberOfHits: () => { return(200); }, getHitsPerPage: () => { return(50); }, getExporter: () => { return(false, null); }, getSingleResultPrinter: () => { return(new WildcardResultPrinter()); }, finishedCallback: (timeSpan) => { Console.WriteLine("Press any key to continue"); Console.ReadKey(); }, endOfSearchCallback: () => { }, wildcardSearch: true ); } else if (2.Equals(selection)) { manager.DeleteIndex(selectedIndex.ID); tui.WriteLine($"Index with ID {selectedIndex.ID} deleted!"); } else if (3.Equals(selection)) { nav.GoToMainMenu(tui); } } } while (tui.ShouldLoop()); }
/// <summary> /// Default constructor to create code-searcher Web API controller /// </summary> /// <param name="logger">Instance where all messages should be logged into</param> /// <param name="memoryCache">Instance to cache data</param> public CodeSearcherController(ILogger <CodeSearcherController> logger, IMemoryCache memoryCache) { m_Logger = new WebLogAdapter(logger); m_Manager = Factory.Get().GetCodeSearcherManager(m_Logger); m_MemoryCache = memoryCache; string cachedManagementInformation; if (m_MemoryCache.TryGetValue <string>(CacheKeys.ManagementInformationKey, out cachedManagementInformation)) { if (string.Compare(cachedManagementInformation, m_Manager.ManagementInformationPath, StringComparison.OrdinalIgnoreCase) != 0) { m_Manager.ManagementInformationPath = cachedManagementInformation; } } }
internal static void ShowAllIndexesMenu(ICodeSearcherManager manager, ITextBasedUserInterface tui, IMenuNavigator nav) { string answer; do { tui.Clear(); var indexes = manager.GetAllIndexes().ToList(); int count = 0; foreach (var index in indexes) { tui.WriteLine($"[{++count}] - ID {index.ID} - SourcePath {index.SourcePath}"); } if (indexes.Count == 0) { tui.WriteLine("There are currently no folders indexed!"); } tui.WriteLine($"[{++count}] Return to main menu"); tui.WriteLine("Please choose: "); answer = tui.ReadLine(); if (int.TryParse(answer, out int selection)) { if (indexes.Count > 0 && selection < count) { var selectedIndex = indexes[selection - 1]; nav.GoToSelectedIndexMenu(manager, selectedIndex, tui); } else { nav.GoToMainMenu(tui); } } } while (tui.ShouldLoop()); }
/// <inheritdoc /> public void GoToShowAllIndexesMenu(ICodeSearcherManager manager, ITextBasedUserInterface tui) { Program.ShowAllIndexesMenu(manager, tui, this); }
/// <inheritdoc /> public void GoToCreateNewIndexMenu(ICodeSearcherManager manager, ITextBasedUserInterface tui) { Program.ShowCreateNewIndexMenu(manager, tui, this); }
/// <inheritdoc /> public void GoToSelectedIndexMenu(ICodeSearcherManager manager, ICodeSearcherIndex selectedIndex, ITextBasedUserInterface tui) { Program.ShowSelectedIndexMenu(manager, selectedIndex, tui, this); tui.SetShouldLoop(false); }
internal static void ShowCreateNewIndexMenu(ICodeSearcherManager manager, ITextBasedUserInterface tui, IMenuNavigator nav) { string answer; // Source path string sourcePath = null; do { tui.WriteLine("Please enter Path with Sources to Index:"); answer = tui.ReadLine(); if (Directory.Exists(answer)) { sourcePath = answer; tui.WriteLine($"Path with files to Index: {sourcePath}"); break; } tui.WriteLine("Path do not exist!"); } while (tui.ShouldLoop()); // file extensions var extensions = new List <String>(); tui.WriteLine("Please select file extension to index (form .ext1,.ext2)"); tui.WriteLine("Leave empty to use (.cs,.xml,.csproj) "); answer = tui.ReadLine(); if (string.IsNullOrWhiteSpace(answer)) { extensions.Add(".cs"); extensions.Add(".xml"); extensions.Add(".csproj"); } else { foreach (var extension in answer.Split(new[] { ',' })) { extensions.Add(extension); } } tui.WriteLine("Looking for files with extensions: "); extensions.ForEach((ext) => tui.WriteLine($"File Extension: {ext}")); if (!string.IsNullOrWhiteSpace(sourcePath) && extensions.Count > 0) { var id = manager.CreateIndex(sourcePath, extensions); tui.WriteLine($"New Index created with ID: {id}"); do { tui.WriteLine("[1] Search in new created index"); tui.WriteLine("[2] Back to main menu"); tui.WriteLine("Please choose: "); answer = tui.ReadLine(); if (int.TryParse(answer, out int selection)) { if (1.Equals(selection)) { var selectedIndex = manager.GetIndexById(id); nav.GoToSelectedIndexMenu(manager, selectedIndex, tui); } else if (2.Equals(selection)) { nav.GoToMainMenu(tui); } } } while (tui.ShouldLoop()); } }