public void StartScanAndUpdateDB(IList <LibraryItemEntity> list, Action callback) { Func <IDictionary <LibraryItemEntity, IList <DirectoryInfo> > > function = () => { var removeList = LibraryItems.Where(item => list.FirstOrDefault(i => 0 == string.Compare(i.Path, item.Path, true)).IsNull()); var addList = list.Where(item => !LibraryItems.Any(i => 0 == string.Compare(i.Path, item.Path, true))); DeleteLibraryItems(removeList.ToList()); AddLibraryItems(addList.ToList()); HistoryScanner scanner = new HistoryScanner(addList.ToList()); scanner.StartScan(); WriteToDBByScannedResult(scanner.Results); Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => { RefreshDBData(); if (!callback.IsNull()) { callback(); } })); return(scanner.Results); }; function.BeginInvoke(ar => { IEnumerable <DirectoryInfo> results = ThreadHelper.EndInvokeFunc <IEnumerable <DirectoryInfo> >(ar); }, function); }
public void SyncHistories(IList <LibraryItemEntity> list, Action callback) { Action action = () => { HistoryScanner scanner = new HistoryScanner(list.ToList()); scanner.StartScan(); WriteToDBByScannedResult(scanner.Results); }; action.BeginInvoke(ar => { RefreshDBData(); if (!callback.IsNull()) { callback(); } ThreadHelper.EndInvokeAction(ar); }, action); }
/// <summary> /// Not used right now /// </summary> /// <param name="addList"></param> /// <param name="updateList"></param> public void StartScanAndUpdateDB(IList <LibraryItemEntity> addList, IList <LibraryItemEntity> updateList) { //Action action = () => { // HistoryScanner scanner = new HistoryScanner(CacheLibraryList); // scanner.StartScan(); //}; //action.BeginInvoke(ar => { // ThreadHelper.EndInvokeAction(ar); //}, action); if (0 == addList.Count() && 0 == updateList.Count()) { return; } Func <IDictionary <LibraryItemEntity, IList <DirectoryInfo> > > function = () => { AddLibraryItems(addList.ToList()); UpdateLibraryItems(updateList.ToList()); List <LibraryItemEntity> allList = new List <LibraryItemEntity>(); allList.AddRange(addList); allList.AddRange(updateList); HistoryScanner scanner = new HistoryScanner(allList); scanner.StartScan(); IList <HistoryEntity> historyList = new List <HistoryEntity>(); foreach (KeyValuePair <LibraryItemEntity, IList <DirectoryInfo> > pair in scanner.Results) { string defaultCategoryName = Path.GetFileName(pair.Key.Path); CategoryEntity category = Categories.FirstOrDefault(item => 0 == string.Compare(defaultCategoryName, item.Name, true)); if (category.IsNull()) { category = new CategoryEntity() { ID = -1, Name = defaultCategoryName }; if (1 == DBHelper.AddCategories(new List <CategoryEntity>() { category })) { Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() => { categories.Add(category); })); } foreach (DirectoryInfo scannedItem in pair.Value) { HistoryEntity history = new HistoryEntity() { IsDeleted = false, Name = scannedItem.Name, Path = scannedItem.FullName, Comment = string.Empty }; if (!category.IsNull()) { history.CategoryIDs.Add(category.ID); } historyList.Add(history); } } } DBHelper.AddHistoryItems(historyList); Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => { RefreshDBData(); })); return(scanner.Results); }; function.BeginInvoke(ar => { IEnumerable <DirectoryInfo> results = ThreadHelper.EndInvokeFunc <IEnumerable <DirectoryInfo> >(ar); }, function); }