Пример #1
0
        private static async Task <List <LegacyLocalMylist> > LoadLegacyLocalMylistGroups()
        {
            try
            {
                var folder = await GetPlaylistsSaveFolder();

                if (folder == null)
                {
                    return(new List <LegacyLocalMylist>());
                }

                var files = await folder.GetFilesAsync();

                // 読み込み
                List <LegacyLocalMylist> loadedItem = new List <LegacyLocalMylist>();
                foreach (var file in files)
                {
                    var playlistFileAccessor = new FolderBasedFileAccessor <LegacyLocalMylist>(folder, file.Name);
                    var playlist             = await playlistFileAccessor.Load();

                    if (playlist != null)
                    {
                        loadedItem.Add(playlist);
                    }
                }

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

                return(loadedItem);
            }
            catch
            {
                return(new List <LegacyLocalMylist>());
            }
        }
Пример #2
0
        protected override Task OnInitializeAsync(CancellationToken token)
        {
            Debug.Write($"キャッシュ情報のリストアを開始");

            return(HohoemaApp.UIDispatcher.RunIdleAsync(async(_) =>
            {
                using (var releaser = await _CacheRequestProcessingLock.LockAsync())
                {
                    // ダウンロード中のアイテムをリストア
                    await RestoreBackgroundDownloadTask();

                    // キャッシュ完了したアイテムをキャッシュフォルダから検索
                    await RetrieveCacheCompletedVideos();

                    // キャッシュリクエストファイルのアクセサーを初期化
                    var videoSaveFolder = await _HohoemaApp.GetApplicationLocalDataFolder();
                    _CacheRequestedItemsFileAccessor = new FolderBasedFileAccessor <IList <NicoVideoCacheRequest> >(videoSaveFolder, CACHE_REQUESTED_FILENAME);
                }

                // ダウンロード待機中のアイテムを復元
                await RestoreCacheRequestedItems();

                State = CacheManagerState.Running;
            })
                   .AsTask());
        }
Пример #3
0
        /// <summary>
        /// 0.11.x以前のフィード情報をLiteDbへと移行します
        /// </summary>
        /// <param name="files"></param>
        /// <returns></returns>
        public async Task MigrateBefore_0_11()
        {
            var feedGroupFolder = await GetFeedGroupFolder();

            if (feedGroupFolder == null)
            {
                return;
            }

            var files = await feedGroupFolder.GetFilesAsync();

            foreach (var file in files)
            {
                if (file.FileType == ".json")
                {
                    var fileName = file.Name;

                    try
                    {
                        var fileAccessor = new FolderBasedFileAccessor <FeedGroup2>(feedGroupFolder, fileName);
                        var item         = await fileAccessor.Load(FeedGroupSerializerSettings);

                        if (item != null)
                        {
                            var newDbFeedGroup = new Database.Feed(item.Label);

                            if (item.FeedSourceList != null)
                            {
                                foreach (var source in item.FeedSourceList)
                                {
                                    newDbFeedGroup.AddSource(new Database.Bookmark()
                                    {
                                        Label        = source.Name,
                                        Content      = source.Id,
                                        BookmarkType = FollowItemTypeConvertToFeedSourceType(source.FollowItemType)
                                    });
                                }
                            }

                            Database.FeedDb.AddOrUpdate(newDbFeedGroup);

                            Debug.WriteLine($"FeedManager: [Sucesss] load {item.Label}");

                            continue;
                        }
                        else
                        {
                            Debug.WriteLine($"FeedManager: [?] .json but not FeedGroup file < {fileName}");
                        }
                    }
                    catch
                    {
                        Debug.WriteLine($"FeedManager: [Failed] load {file.Path}");
                    }
                }
            }

            await feedGroupFolder.DeleteAsync(StorageDeleteOption.PermanentDelete);
        }
Пример #4
0
        public LocalMylist CreatePlaylist(string id, string name)
        {
            var sortIndex = _Playlists.Count > 0 ? _Playlists.Max(x => x.SortIndex) + 1 : 0;

            var playlist = new LocalMylist(id, name)
            {
                HohoemaPlaylist = this,
                SortIndex       = sortIndex
            };

            var playlistFileAccessor = new FolderBasedFileAccessor <LocalMylist>(PlaylistsSaveFolder, playlist.Label + ".json");

            _PlaylistFileAccessorMap.Add(playlist.Id, playlistFileAccessor);
            _Playlists.Add(playlist);

            Save(playlist).ConfigureAwait(false);

            return(playlist);
        }
Пример #5
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);
            }
        }