public static List <string> MatchHashes(Dictionary <string, string> hashDict, Dictionary <string, Fic> objDict) { /* * hashDict is in the format 'MD5 hash sum': 'file path' * objDict is in the format 'work ID': 'Fic object' */ List <string> lF = new List <string>(); Dictionary <string, string> lookup = new Dictionary <string, string>(); foreach (KeyValuePair <string, Fic> pair in objDict) { foreach (KeyValuePair <string, string> lfPair in pair.Value.LocalFiles) { string hash = WorkIdent.Hash(lfPair.Value); lookup[hash] = pair.Key; } } var matches = lookup.Keys.Intersect(hashDict.Keys); foreach (var m in matches) { lF.Add(lookup[m]); } return(lF); }
private void LibInit() { List <string> folders = new List <string>(); Dictionary <string, string> fileHashes = new Dictionary <string, string>(); var progressWindow = new ProgressWindow(); Task.Factory.StartNew(() => { folders = MiddleDude.GetLibFolders(); if (folders.Count < 1) { using (System.Windows.Forms.FolderBrowserDialog dialog = new System.Windows.Forms.FolderBrowserDialog()) { dialog.Description = "Select Folder..."; if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string initFolder = dialog.SelectedPath; MiddleDude.AddLibraryFolder(initFolder); } } } }).ContinueWith(x => { progressWindow.StopProgress(); progressWindow.ChangeText("Locating library contents..."); string[] allFiles = FileTools.Walker(folders); progressWindow.SetProgressBarMax(allFiles.Length); progressWindow.StartProgress(); progressWindow.ChangeText("Processing library files..."); foreach (string file in allFiles) { string ext = Path.GetExtension(file); if (Constants.AllowedExt.Contains(ext.Remove(0, 1))) { string workHash = WorkIdent.Hash(file); fileHashes[workHash] = file; } progressWindow.UpdateProgressBar(); } progressWindow.StopProgress(); }).ContinueWith(x => { MiddleDude.StoreLibHashes(fileHashes); }); progressWindow.Close(); Console.WriteLine("LibInit complete!"); //using (var writer = new FileStream(Constants.LibHashList, FileMode.Create)) //{ // XmlSerializer ser = new XmlSerializer(typeof(SerializableDictionary<string, string>), new XmlRootAttribute("root")); // ser.Serialize(writer, fileHashes); //} //XmlOperator.Serialize(fileHashes, Constants.LibHashList); }
public static Dictionary <string, string> GetKindleList() { /* If Kindle is not connected, it will use the list of IDs stored from the last time it was. * Returns a dictionary in the format: * Dictionary * { * MD5 hash: Filepath * } */ Dictionary <string, string> fileHashes = new Dictionary <string, string>(); var progressWindow = new ProgressWindow(); progressWindow.Show(); progressWindow.StopProgress(); Task.Factory.StartNew(() => { foreach (DriveInfo drive in DriveInfo.GetDrives()) { string driveName = drive.IsReady ? drive.VolumeLabel : null; // Makes sure we only try to query mounted drives if (driveName != null && driveName.Contains("Kindle")) // TODO more robust Kindle detection { // Kindle is connected, get current library progressWindow.ChangeText("Locating Kindle contents..."); string[] kindleFiles = FileTools.Walker(new List <string> { drive.Name }); progressWindow.SetProgressBarMax(kindleFiles.Length); progressWindow.StartProgress(); progressWindow.ChangeText("Processing Kindle files..."); foreach (string file in kindleFiles) { string ext = Path.GetExtension(file); if (ext.StartsWith(".")) { ext = ext.Substring(1); } if (Constants.AllowedExt.Contains(ext)) { string workHash = WorkIdent.Hash(file); fileHashes[workHash] = file; } progressWindow.UpdateProgressBar(); } MiddleDude.StoreKindle(fileHashes); } } }); progressWindow.Close(); Console.WriteLine("Kindle fetch complete!"); try { fileHashes = MiddleDude.LoadKindle(); return(fileHashes); } catch (InvalidOperationException) { return(fileHashes); } }