Exemplo n.º 1
0
        public void MeasureTimeOfFinishedLoadingFromDB()
        {
            var dbCecheService = new DBCacheService();
            var filePaths      = Directory.GetFiles(@"D:\Pictures\VRChat", "*.png", SearchOption.AllDirectories);

            var stopwatch1 = new Stopwatch();

            stopwatch1.Start();
            var photos = dbCecheService.Photos
                         .Select(p =>
                                 new
            {
                p.FilePath,
                p.World,
                p.Photographer,
                p.Date,
                p.PhotoUsers
            }).ToList();

            stopwatch1.Stop();
            Debug.Print($"{photos.Count}, Time:{stopwatch1.ElapsedMilliseconds} ms");

            return;

            var stopwatch2 = new Stopwatch();

            stopwatch2.Start();
            int count = 0;

            foreach (var filePath in filePaths)
            {
                var meta = dbCecheService.GetVrcMetaDataIfExists(filePath);
                if (meta is null)
                {
                    //Debug.Print($"{filePath} is null");
                    count++;
                }
            }
            stopwatch2.Stop();
            Debug.Print($"PhotoCount:{filePaths.Length-count}/{filePaths.Length}, Time:{stopwatch2.ElapsedMilliseconds} ms");
        }
Exemplo n.º 2
0
        public async Task TestAsync()
        {
            /*if (File.Exists(_dbFilePath))
             * {
             *  File.Delete(_dbFilePath);
             * }*/

            var dbCecheService = new DBCacheService();

            Assert.IsTrue(File.Exists(_dbFilePath));

            var filePaths = Directory.GetFiles(@"D:\Pictures\VRChat", "*.png", SearchOption.AllDirectories);

            await dbCecheService.CreateDBCacheIfNeededAsync(filePaths);

            var photos = await dbCecheService.GetAllPhotosAsync();

            foreach (var photo in photos)
            {
                Console.WriteLine(photo.FilePath);
            }

            //Assert.IsTrue(photos.Count == 66);
        }
Exemplo n.º 3
0
        public MainViewModel(MainWindow mainWindow)
        {
            _mainWindow = mainWindow;

            _db = new DBCacheService($"{AppCache.Instance.CacheFolderPath}{Path.DirectorySeparatorChar}cache.db");

            _vrcPhotographs = new VrcPhotographs(_db).AddTo(Disposable);
            _searchResult   = new SearchResult(_vrcPhotographs.Collection).AddTo(Disposable);
            _users          = new Users(_vrcPhotographs.Collection).AddTo(Disposable);

            SearchText = _searchResult.SearchText.ToReactivePropertyAsSynchronized(x => x.Value).AddTo(Disposable);

            ShowedPhotoList = _searchResult.ShowedPhotoList.ObserveAddChanged()
                              .ToReadOnlyReactiveCollection(
                onReset: Observable.Merge(
                    _searchResult.SearchText,
                    _searchResult.ResearchCommand,
                    _searchResult.ResetCommand)
                .Select(_ => Unit.Default))
                              .AddTo(Disposable);
            HaveNoShowedPhoto = ShowedPhotoList.ObserveAddChanged().Select(_ => !ShowedPhotoList.Any()).ToReactiveProperty().AddTo(Disposable);
            PhotoCount        = Observable.Merge(
                ShowedPhotoList.ObserveAddChanged().Select(_ => Unit.Default),
                ShowedPhotoList.ObserveRemoveChanged().Select(_ => Unit.Default),
                ShowedPhotoList.ObserveResetChanged().Select(_ => Unit.Default)
                ).Select(_ => $"{ShowedPhotoList.Count} 枚").ToReactiveProperty().AddTo(Disposable);

            SearchDate = _searchResult.SearchedDate.ToReactivePropertyAsSynchronized(x => x.Value).AddTo(Disposable);
            SearchWithUserNameCommand = new ReactiveCommand <string>().AddTo(Disposable);
            SearchWithUserNameCommand.Subscribe(_searchResult.SearchWithUserName).AddTo(Disposable);
            SearchWithWorldNameCommand = new ReactiveCommand <string>().AddTo(Disposable);
            SearchWithWorldNameCommand.Subscribe(_searchResult.SearchWithWorldName).AddTo(Disposable);
            SearchWithDateCommand = new ReactiveCommand <string>().AddTo(Disposable);
            SearchWithDateCommand.Subscribe(dateString => _searchResult.SearchWithDate(DateTime.Parse(dateString, new CultureInfo("en-US")))).AddTo(Disposable);
            SearchWithDateTypeCommand = new ReactiveCommand <DateSearchType>().AddTo(Disposable);
            SearchWithDateTypeCommand.Subscribe(type =>
            {
                var now = DateTime.Now;

                if (type == DateSearchType.TODAY)
                {
                    SearchDate.Value = now;
                }
                else if (type == DateSearchType.WEEK)
                {
                    _searchResult.SearchWithDatePeriodString(now.AddDays(-7).ToString("yyyy/MM/dd HH:mm:ss", new CultureInfo("en-US")), now.ToString("yyyy/MM/dd HH:mm:ss", new CultureInfo("en-US")));
                }
                else if (type == DateSearchType.MONTH)
                {
                    _searchResult.SearchWithDatePeriodString(now.AddMonths(-1).ToString("yyyy/MM/dd HH:mm:ss", new CultureInfo("en-US")), now.ToString("yyyy/MM/dd HH:mm:ss", new CultureInfo("en-US")));
                }
            });
            ClearSearchText = new ReactiveCommand().AddTo(Disposable);
            ClearSearchText.Subscribe(() => SearchText.Value = string.Empty).AddTo(Disposable);

            CurrentUserSortType = new ReactiveProperty <UserSortType>(UserSortType.None).AddTo(Disposable);
            CurrentUserSortType.Subscribe(type => _users.SortType.Value = CurrentUserSortType.Value).AddTo(Disposable);
            UserList = _users.SortedUserList.ObserveAddChanged()
                       .Select(u => u.Name)
                       .ToReadOnlyReactiveCollection(
                onReset: Observable.Merge(_users.SortCommand, _users.ResetCommand).Select(_ => Unit.Default))
                       .AddTo(Disposable);

            SortUserWithAlphabetCommand = new ReactiveCommand().AddTo(Disposable);
            SortUserWithCountCommand    = new ReactiveCommand().AddTo(Disposable);
            SortUserWithAlphabetCommand.Subscribe(() => CurrentUserSortType.Value = UserSortType.Alphabet).AddTo(Disposable);
            SortUserWithCountCommand.Subscribe(() => CurrentUserSortType.Value    = UserSortType.Count).AddTo(Disposable);
            CanUseToSorting = _users.SortedUserList.CollectionChangedAsObservable()
                              .Select(_ => _users.SortedUserList.Any()).ToReactiveProperty(false).AddTo(Disposable);

            OpenPhotoPreviewCommand = new ReactiveCommand <Photo>().AddTo(Disposable);
            OpenPhotoPreviewCommand.Subscribe(photo => { if (!(photo is null))
                                                         {
                                                             WindowHelper.OpenPhotoPreviewWindow(photo, ShowedPhotoList.ToList(), _searchResult, _mainWindow);
                                                         }
                                              }).AddTo(Disposable);
            OpenSettingCommand = new ReactiveCommand().AddTo(Disposable);
            OpenSettingCommand.Subscribe(() => WindowHelper.OpenSettingDialog(_mainWindow)).AddTo(Disposable);

            LoadResourcesCommand = new ReactiveCommand().AddTo(Disposable);
            LoadResourcesCommand.Subscribe(() =>
            {
                _loadingCancel  = new CancellationTokenSource().AddTo(Disposable);
                var folderPaths = GetPhotoFolders(Setting.Instance.Data.PhotoFolders);
                _loadingTask    = _vrcPhotographs.LoadVRCPhotoListAsync(folderPaths, _loadingCancel.Token);
            }).AddTo(Disposable);

            CancelLoadingCommand = new ReactiveCommand().AddTo(Disposable);
            CancelLoadingCommand.Subscribe(() =>
            {
                if (!(_loadingCancel is null))
                {
                    try
                    {
                        _loadingCancel.Cancel();
                    }
                    catch (TaskCanceledException e) { }
                }
            });

            RebootCommand = new ReactiveCommand().AddTo(Disposable);
            RebootCommand.Subscribe(async() =>
            {
                CancelLoadingCommand.Execute();
                // キャンセルにラグがあるので少し待つ
                await Task.Delay(2000).ConfigureAwait(true);
                _searchResult.ResetCommand.Execute();
                _users.ResetCommand.Execute();
                LoadResourcesCommand.Execute();
            }).AddTo(Disposable);

            DeleteCacheCommand = new ReactiveCommand().AddTo(Disposable);
            DeleteCacheCommand.Subscribe(async() =>
            {
                CancelLoadingCommand.Execute();
                await _db.DeleteAll().ConfigureAwait(true);
                AppCache.Instance.DeleteCacheFileAll();
            });

            ActiveProgressRing = new ReactiveProperty <bool>(true).AddTo(Disposable);
            _vrcPhotographs.Collection.ObserveAddChangedItems().Subscribe(_ => ActiveProgressRing.Value = false).AddTo(Disposable);
            _vrcPhotographs.Collection.ObserveResetChanged().Subscribe(_ => ActiveProgressRing.Value    = true).AddTo(Disposable);
        }