Beispiel #1
0
        public ApplicationDataUpdateWhenPathReferenceCountChanged(
            IEventAggregator eventAggregator,
            RecentlyAccessManager recentlyAccessManager,
            BookmarkManager bookmarkManager,
            StorageItemSearchManager storageItemSearchManager,
            FolderContainerTypeManager folderContainerTypeManager,
            ThumbnailManager thumbnailManager,
            SecondaryTileManager secondaryTileManager,
            FolderLastIntractItemManager folderLastIntractItemManager
            )
        {
            _eventAggregator              = eventAggregator;
            _recentlyAccessManager        = recentlyAccessManager;
            _bookmarkManager              = bookmarkManager;
            _storageItemSearchManager     = storageItemSearchManager;
            _folderContainerTypeManager   = folderContainerTypeManager;
            _thumbnailManager             = thumbnailManager;
            _folderLastIntractItemManager = folderLastIntractItemManager;
            _eventAggregator.GetEvent <PathReferenceCountManager.PathReferenceAddedEvent>()
            .Subscribe(args =>
            {
            }
                       , keepSubscriberReferenceAlive: true
                       )
            .AddTo(_disposables);

            _eventAggregator.GetEvent <PathReferenceCountManager.PathReferenceRemovedEvent>()
            .Subscribe(async args =>
            {
                _recentlyAccessManager.Delete(args.Path);
                _bookmarkManager.RemoveBookmark(args.Path);
                _storageItemSearchManager.Remove(args.Path);
                _folderContainerTypeManager.Delete(args.Path);
                _folderLastIntractItemManager.Remove(args.Path);
                await _thumbnailManager.DeleteFromPath(args.Path);
                await secondaryTileManager.RemoveSecondaryTile(args.Path);
            }
                       , keepSubscriberReferenceAlive: true
                       )
            .AddTo(_disposables);
        }
Beispiel #2
0
        public SourceStorageItemsPageViewModel(
            IEventAggregator eventAggregator,
            FolderListingSettings folderListingSettings,
            BookmarkManager bookmarkManager,
            ThumbnailManager thumbnailManager,
            PathReferenceCountManager PathReferenceCountManager,
            SourceStorageItemsRepository sourceStorageItemsRepository,
            RecentlyAccessManager recentlyAccessManager,
            SecondaryTileManager secondaryTileManager,
            SourceChoiceCommand sourceChoiceCommand,
            OpenFolderItemCommand openFolderItemCommand,
            OpenImageViewerCommand openImageViewerCommand,
            OpenFolderListupCommand openFolderListupCommand,
            OpenWithExplorerCommand openWithExplorerCommand,
            SecondaryTileAddCommand secondaryTileAddCommand,
            SecondaryTileRemoveCommand secondaryTileRemoveCommand
            )
        {
            Folders                       = new ObservableCollection <StorageItemViewModel>();
            RecentlyItems                 = new ObservableCollection <StorageItemViewModel>();
            OpenFolderItemCommand         = openFolderItemCommand;
            SourceChoiceCommand           = sourceChoiceCommand;
            _sourceStorageItemsRepository = sourceStorageItemsRepository;
            _recentlyAccessManager        = recentlyAccessManager;
            SecondaryTileManager          = secondaryTileManager;
            _eventAggregator              = eventAggregator;
            OpenImageViewerCommand        = openImageViewerCommand;
            OpenFolderListupCommand       = openFolderListupCommand;
            OpenWithExplorerCommand       = openWithExplorerCommand;
            SecondaryTileAddCommand       = secondaryTileAddCommand;
            SecondaryTileRemoveCommand    = secondaryTileRemoveCommand;
            _bookmarkManager              = bookmarkManager;
            _thumbnailManager             = thumbnailManager;
            _PathReferenceCountManager    = PathReferenceCountManager;
            _folderListingSettings        = folderListingSettings;

            Groups = new[]
            {
                new SourceItemsGroup
                {
                    GroupId = "Folders",
                    Items   = Folders,
                },
                new SourceItemsGroup
                {
                    GroupId = "RecentlyUsedFiles",
                    Items   = RecentlyItems,
                },
            };

            _eventAggregator.GetEvent <SourceStorageItemsRepository.AddedEvent>()
            .Subscribe(args =>
            {
                var existInFolders = Folders.FirstOrDefault(x => x.Token == args.Token);
                if (existInFolders != null)
                {
                    Folders.Remove(existInFolders);
                }

                var existInFiles = RecentlyItems.FirstOrDefault(x => x.Token == args.Token);
                if (existInFiles != null)
                {
                    RecentlyItems.Remove(existInFiles);
                }

                var storageItemImageSource = new StorageItemImageSource(args.StorageItem, _thumbnailManager);
                if (storageItemImageSource.ItemTypes == Models.Domain.StorageItemTypes.Folder)
                {
                    // 追加用ボタンの次に配置するための 1
                    Folders.Insert(1, new StorageItemViewModel(storageItemImageSource, args.Token, _sourceStorageItemsRepository, _folderListingSettings, _bookmarkManager));
                }
                else if (storageItemImageSource.ItemTypes == Models.Domain.StorageItemTypes.Image ||
                         storageItemImageSource.ItemTypes == Models.Domain.StorageItemTypes.Archive ||
                         storageItemImageSource.ItemTypes == Models.Domain.StorageItemTypes.EBook
                         )
                {
                    RecentlyItems.Insert(0, new StorageItemViewModel(storageItemImageSource, args.Token, _sourceStorageItemsRepository, _folderListingSettings, _bookmarkManager));
                }
            })
            .AddTo(_disposables);

            _eventAggregator.GetEvent <SourceStorageItemsRepository.RemovedEvent>()
            .Subscribe(args =>
            {
                var existInFolders = Folders.FirstOrDefault(x => x.Token == args.Token);
                if (existInFolders != null)
                {
                    Folders.Remove(existInFolders);
                }

                var existInFiles = RecentlyItems.Where(x => x.Token == args.Token).ToList();
                foreach (var item in existInFiles)
                {
                    RecentlyItems.Remove(item);
                }
            })
            .AddTo(_disposables);
        }