void addIfNewOrUpdate(DdjEf4DBContext db, FileInfo fi) { var dbf = db.MediaUnits.FirstOrDefault(r => string.Compare(r.PathFileExtOrg, fi.FullName, true) == 0); //var sw = Stopwatch.StartNew(); //var hs = BitConverter.ToInt64(_md5.ComputeHash(fi.OpenRead()), 0); //Debug.WriteLine("{0,11:N0} / {1,6:N1} = {2,9:N0} ==> {3} {4} {5}", fi.Length, sw.Elapsed.TotalMilliseconds, fi.Length / sw.Elapsed.TotalMilliseconds, hs, dbf.FileHashQck, fi); if (dbf != null) // if in DB by filename: { if (dbf.DeletedAt != null) { dbf.DeletedAt = null; } if (dbf.FileHashMD5 == 0) { dbf.FileHashMD5 = BitConverter.ToInt64(_md5.ComputeHash(fi.OpenRead()), 0); } return; } var fileHashMD5 = BitConverter.ToInt64(_md5.ComputeHash(fi.OpenRead()), 0); dbf = db.MediaUnits.FirstOrDefault(r => r.FileHashMD5 == fileHashMD5); if (dbf != null) // if in DB by hash: { if (dbf.DeletedAt != null) { dbf.DeletedAt = null; } dbf.FileName = fi.Name; dbf.PathName = fi.DirectoryName; dbf.FileLength = fi.Length; dbf.PathFileExtOrg = fi.FullName; return; } //else // not in DB: db.MediaUnits.Add(new MediaUnit { AddedAt = _now, FileName = fi.Name, PathName = fi.DirectoryName, FileLength = fi.Length, PathFileExtOrg = fi.FullName, CurPositionSec = 0, DurationSec = 0, FileHashMD5 = BitConverter.ToInt64(_md5.ComputeHash(fi.OpenRead()), 0), FileHashQck = 0, GenreID = 1, Notes = "" }); }
public static void SetNewName(int ID, string fullNewName, DdjEf4DBContext db) { //DdjEf4DBContext db = new DdjEf4DBContext(); var query = from ap in db.MediaUnits where ap.ID == ID select ap; foreach (MediaUnit ap in query) { ap.PathFileExtOrg = fullNewName; } int rows = DbSaveMsgBox.CheckAskSave(db); }
public async Task <int> FsToDb(DdjEf4DBContext db, string dir0, IProgress <string> progress) { _now = DateTime.Now; await Task.Delay(500); Task <int> tsk = Task.Run(async() => { try { var dir = Directory.Exists(dir0) ? dir0 : Directory.Exists(@"M:\") ? @"M:\" : Directory.Exists(@"C:\1\M\") ? @"C:\1\M\" : Directory.Exists(@"D:\1\M\") ? @"D:\1\M\" : ""; progress.Report("Loading files from FS"); await Task.Delay(500); var fis = new List <FileInfo>(); foreach (var ext in new string[] { "*.ape", "*.flac", "*.m4a", "*.mp3", "*.mp4", "*.ogg", "*.wav", "*.wma", "*.wmv" }) { foreach (var fi in new DirectoryInfo(dir).GetFiles(ext, SearchOption.AllDirectories).OrderBy(r => r.Length)) // Directory.GetFiles(dir, ext, SearchOption.AllDirectories)) { fis.Add(fi); } } progress.Report("For each found in FS update DB"); await Task.Delay(500); fis.ForEach(fi => addIfNewOrUpdate(db, fi)); progress.Report("For each in DB check exisance in FS"); await Task.Delay(500); db.MediaUnits.Where(r => r.PathName.StartsWith(dir0) && r.DeletedAt == null).ToList().ForEach(mu => markDeletedIf(fis, mu)); return((await db.TrySaveReportAsync()).rowsSavedCnt); } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.Message, System.Reflection.MethodInfo.GetCurrentMethod().Name); if (System.Diagnostics.Debugger.IsAttached) { System.Diagnostics.Debugger.Break(); } } return(-1765); }); return(await tsk); }