示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        /// <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);
        }