Пример #1
0
        public async Task <bool> RemoveFeedGroup(IFeedGroup group)
        {
            var removeTarget = FeedGroups.SingleOrDefault(x => x.Id == group.Id);

            if (removeTarget != null)
            {
                _FeedGroupUpdaters.Remove(group);

                var fileAccessor = FeedGroupDict[removeTarget];

                // フィードソース一覧ファイルを同期から削除
                var file = await fileAccessor.TryGetFile();

                await HohoemaApp.RoamingDataRemoved(file);

                // ローカルのフィードソース・ファイルを削除
                await fileAccessor.Delete(StorageDeleteOption.PermanentDelete);

                // フィードの動画一覧ファイルを削除
                var feedStreamFileAccesssor = FeedStreamFileAccessors[group.Id];
                await feedStreamFileAccesssor.Delete(StorageDeleteOption.PermanentDelete);

                return(FeedGroupDict.Remove(removeTarget));
            }
            else
            {
                return(false);
            }
        }
Пример #2
0
        internal async void RenamePlaylist(LocalMylist playlist, string newName)
        {
            var fileAccessor = _PlaylistFileAccessorMap[playlist.Id];

            // 古いファイルを同期から削除
            var oldFile = await fileAccessor.TryGetFile();

            await HohoemaApp.RoamingDataRemoved(oldFile);

            // ファイル名を変更して保存
            var newFileName = Util.FilePathHelper.ToSafeFilePath(Path.ChangeExtension(newName, ".json"));
            await fileAccessor.Rename(newFileName, forceReplace : true);

            playlist.Name = newName;

            await Save(playlist);
        }
Пример #3
0
        public async Task RemovePlaylist(LocalMylist playlist)
        {
            if (_Playlists.Contains(playlist))
            {
                _Playlists.Remove(playlist);
                var fileAccessor = _PlaylistFileAccessorMap[playlist.Id];

                var file = await fileAccessor.TryGetFile();

                await HohoemaApp.RoamingDataRemoved(file);

                await fileAccessor.Delete().ConfigureAwait(false);

                _PlaylistFileAccessorMap.Remove(playlist.Id);

                playlist.Dispose();
            }
        }
Пример #4
0
        internal async Task <bool> RenameFeedGroup(IFeedGroup group, string newLabel)
        {
            var target = FeedGroups.SingleOrDefault(x => x.Id == group.Id);

            if (target != null)
            {
                var fileAccessor = FeedGroupDict[target];

                var file = await fileAccessor.TryGetFile();

                await HohoemaApp.RoamingDataRemoved(file);

                await fileAccessor.Rename(newLabel + ".json");

                await HohoemaApp.PushToRoamingData(file);

                return(true);
            }
            else
            {
                return(false);
            }
        }
Пример #5
0
        public async Task Load()
        {
            var files = await HohoemaApp.GetSyncRoamingData(PlaylistsSaveFolder);

            // ファイルがない場合
            if (files.Count == 0)
            {
                // デフォルトプレイリストを作成
                MakeDefaultPlaylist();
                CurrentPlaylist = DefaultPlaylist;

                return;
            }


            // 古いデータを解放
            foreach (var playlist in _Playlists)
            {
                playlist.Dispose();
            }

            _PlaylistFileAccessorMap.Clear();
            _Playlists.Clear();
            DefaultPlaylist = null;


            // 読み込み
            List <LocalMylist> loadedItem = new List <LocalMylist>();

            foreach (var file in files)
            {
                var playlistFileAccessor = new FileAccessor <LocalMylist>(PlaylistsSaveFolder, file.Name);
                var playlist             = await playlistFileAccessor.Load();

                if (playlist != null)
                {
                    playlist.HohoemaPlaylist = this;

                    // 重複登録されている場合、ファイルの日付が古いほうを削除
                    // (本来はリネームのミスがないようにするべき)
                    if (_PlaylistFileAccessorMap.ContainsKey(playlist.Id))
                    {
                        var prevFileAccessor = _PlaylistFileAccessorMap[playlist.Id];

                        var prevFile = await prevFileAccessor.TryGetFile();

                        var prevFileProp = await prevFile.GetBasicPropertiesAsync();

                        var fileProp = await file.GetBasicPropertiesAsync();

                        if (prevFileProp.DateModified < fileProp.DateModified)
                        {
                            await prevFileAccessor.Delete(StorageDeleteOption.PermanentDelete);

                            _PlaylistFileAccessorMap.Remove(playlist.Id);

                            _PlaylistFileAccessorMap.Add(playlist.Id, playlistFileAccessor);
                            loadedItem.Add(playlist);
                        }
                        else
                        {
                            await HohoemaApp.RoamingDataRemoved(file);

                            await file.DeleteAsync();
                        }
                    }
                    else
                    {
                        _PlaylistFileAccessorMap.Add(playlist.Id, playlistFileAccessor);
                        loadedItem.Add(playlist);
                    }
                }

                if (playlist.Id == WatchAfterPlaylistId)
                {
                    DefaultPlaylist = playlist;
                }
            }

            loadedItem.Sort((x, y) => x.SortIndex - y.SortIndex);

            foreach (var sortedPlaylist in loadedItem)
            {
                _Playlists.Add(sortedPlaylist);
            }


            // デフォルトプレイリストが削除されていた場合に対応
            if (DefaultPlaylist == null)
            {
                MakeDefaultPlaylist();
            }

            // Live Item は削除
            foreach (var i in DefaultPlaylist.PlaylistItems.Where(x => x.ContentId.StartsWith("lv")).ToArray())
            {
                DefaultPlaylist.Remove(i);
            }
        }
Пример #6
0
        public async Task Load()
        {
            var files = await HohoemaApp.GetSyncRoamingData(PlaylistsSaveFolder);

            // 古いデータを解放
            foreach (var playlist in _Playlists)
            {
                playlist.Dispose();
            }

            _PlaylistFileAccessorMap.Clear();
            _Playlists.Clear();

            // 読み込み
            List <LocalMylist> loadedItem = new List <LocalMylist>();

            foreach (var file in files)
            {
                var playlistFileAccessor = new FolderBasedFileAccessor <LocalMylist>(PlaylistsSaveFolder, file.Name);
                var playlist             = await playlistFileAccessor.Load();


                if (playlist == null || playlist.Id == WatchAfterPlaylistId)
                {
                    await playlistFileAccessor.Delete();

                    continue;
                }

                if (playlist != null)
                {
                    playlist.HohoemaPlaylist = this;

                    // 重複登録されている場合、ファイルの日付が古いほうを削除
                    // (本来はリネームのミスがないようにするべき)
                    if (_PlaylistFileAccessorMap.ContainsKey(playlist.Id))
                    {
                        var prevFileAccessor = _PlaylistFileAccessorMap[playlist.Id];

                        var prevFile = await prevFileAccessor.TryGetFile();

                        var prevFileProp = await prevFile.GetBasicPropertiesAsync();

                        var fileProp = await file.GetBasicPropertiesAsync();

                        if (prevFileProp.DateModified < fileProp.DateModified)
                        {
                            await prevFileAccessor.Delete(StorageDeleteOption.PermanentDelete);

                            _PlaylistFileAccessorMap.Remove(playlist.Id);

                            _PlaylistFileAccessorMap.Add(playlist.Id, playlistFileAccessor);
                            loadedItem.Add(playlist);
                        }
                        else
                        {
                            await HohoemaApp.RoamingDataRemoved(file);

                            await file.DeleteAsync();
                        }
                    }
                    else
                    {
                        _PlaylistFileAccessorMap.Add(playlist.Id, playlistFileAccessor);
                        loadedItem.Add(playlist);
                    }
                }
            }

            loadedItem.Sort((x, y) => x.SortIndex - y.SortIndex);

            foreach (var sortedPlaylist in loadedItem)
            {
                _Playlists.Add(sortedPlaylist);
            }
        }