private void FilterItems() { if (string.IsNullOrEmpty(filterVideoKey)) { IsAllItems = false; if (backupItems.Count > 0) { ChannelItems.Clear(); backupItems.ForEach(x => ChannelItems.Add(x)); ChannelItemsCount = ChannelItemsCollectionView.Cast <IVideoItem>().Count(); } else { ChannelItemsCollectionView.Filter = FilterVideoByTitle; ChannelItemsCount = ChannelItemsCollectionView.Cast <IVideoItem>().Count(); } } else { if (IsAllItems) { if (filterVideoKey.Length < 2) { return; } if (backupItems.Count == 0) { backupItems.Clear(); ChannelItems.ForEach(x => backupItems.Add(x)); } string cleared = Regex.Replace(filterVideoKey, @"\s+", " "); List <string> searchFields = cleared.Split(' ').Where(x => !string.IsNullOrWhiteSpace(x.RemoveSpecialCharacters())).ToList(); if (searchFields.Count <= 0) { return; } List <VideoItemPOCO> res = db.GetAllItemsAsync(searchFields).Result; ChannelItems.Clear(); res.ForEach(x => ChannelItems.Add(VideoItemFactory.CreateVideoItem(x, SiteType.YouTube, true))); ChannelItemsCollectionView.Filter = null; ChannelItemsCount = ChannelItemsCollectionView.Cast <IVideoItem>().Count(); } else { if (backupItems.Count > 0) { ChannelItems.Clear(); backupItems.ForEach(x => ChannelItems.Add(x)); } ChannelItemsCollectionView.Filter = FilterVideoByTitle; ChannelItemsCount = ChannelItemsCollectionView.Cast <IVideoItem>().Count(); } } }
public async Task FillSubtitles() { if (Subtitles.Any()) { return; } IEnumerable <ISubtitle> res = await VideoItemFactory.GetVideoItemSubtitlesAsync(ID).ConfigureAwait(true); Subtitles.Clear(); res.ForEach(x => Subtitles.Add(x)); }
private async void DownloadLink(object obj) { var window = obj as Window; if (window == null) { return; } window.Close(); if (string.IsNullOrEmpty(Link)) { return; } if (!Link.IsValidUrl()) { MessageBox.Show("Can't parse URL"); return; } if (IsYouTube) { IVideoItem vi = await VideoItemFactory.GetVideoItemNetAsync(youId, SiteType.YouTube).ConfigureAwait(true); foreach (ISubtitle subtitle in Subtitles.Where(subtitle => subtitle.IsChecked)) { vi.Subtitles.Add(subtitle); } vi.ParentID = null; vi.SyncState = SyncState.Added; onDownloadYouItem?.Invoke(vi); await vi.DownloadItem(youpath, downloaddir, SelectedOption).ConfigureAwait(false); } else { string param = $"-o {downloaddir}\\%(title)s.%(ext)s {Link} --no-check-certificate -i --console-title"; await Task.Run(() => { Process process = Process.Start(youpath, param); process?.Close(); }).ConfigureAwait(false); } }
public async Task Search(Dictionary <string, string> dic) { if (string.IsNullOrEmpty(SearchKey)) { return; } switch (SelectedSite.Cred.Site) { case SiteType.YouTube: if (SelectedCountry.Key == dlindex) { SelectedCountry = Countries.First(); } SelectedCountry.Value.Clear(); List <VideoItemPOCO> lst = await YouTubeSite.SearchItemsAsync(SearchKey, SelectedCountry.Key, 50).ConfigureAwait(true); if (lst.Any()) { foreach (IVideoItem item in lst.Select(poco => VideoItemFactory.CreateVideoItem(poco, SiteType.YouTube))) { item.IsHasLocalFileFound(DirPath); string title; if (dic.TryGetValue(item.ParentID, out title)) { // подсветим видео, если канал уже есть в подписке item.SyncState = SyncState.Added; item.ParentTitle = title; item.WatchState = await db.GetItemWatchStateAsync(item.ID).ConfigureAwait(false); } SelectedCountry.Value.Add(item); } RefreshItems(); } break; } }
private async void ReloadFilteredLists(object state) { ChannelItems.Clear(); if (state is WatchState) { var st = (WatchState)state; List <IVideoItem> readyel; List <string> readyAddedIds; List <string> notreadyList; List <VideoItemPOCO> items; switch (st) { case WatchState.Watched: readyel = allchannels.SelectMany(x => x.ChannelItems).Where(y => y.WatchState == WatchState.Watched).ToList(); foreach (IVideoItem item in readyel.Where(item => !watchedList.Contains(item))) { watchedList.Add(item); } readyAddedIds = readyel.Select(x => x.ID).ToList(); foreach (string id in watchedList.Select(x => x.ID).Where(id => !readyAddedIds.Contains(id))) { readyAddedIds.Add(id); } notreadyList = watchedListIds.Except(readyAddedIds).ToList(); if (notreadyList.Any()) { items = await db.GetItemsByIdsAndState(WatchState.Watched, notreadyList).ConfigureAwait(false); foreach (VideoItemPOCO poco in items) { IChannel parent = allchannels.First(x => x.ID == poco.ParentID); IVideoItem item = VideoItemFactory.CreateVideoItem(poco, parent.Site); parent.AddNewItem(item, false); parent.IsHasNewFromSync = true; watchedList.Add(item); } } watchedList.OrderBy(x => x.Timestamp).ForEach(x => AddNewItem(x)); break; case WatchState.Planned: readyel = allchannels.SelectMany(x => x.ChannelItems).Where(y => y.WatchState == WatchState.Planned).ToList(); foreach (IVideoItem item in readyel.Where(item => !plannedList.Contains(item))) { plannedList.Add(item); } readyAddedIds = readyel.Select(x => x.ID).ToList(); foreach (string id in plannedList.Select(x => x.ID).Where(id => !readyAddedIds.Contains(id))) { readyAddedIds.Add(id); } notreadyList = plannedListIds.Except(readyAddedIds).ToList(); if (notreadyList.Any()) { items = await db.GetItemsByIdsAndState(WatchState.Planned, notreadyList).ConfigureAwait(false); foreach (VideoItemPOCO poco in items) { IChannel parent = allchannels.First(x => x.ID == poco.ParentID); IVideoItem item = VideoItemFactory.CreateVideoItem(poco, parent.Site); parent.AddNewItem(item, false); parent.IsHasNewFromSync = true; plannedList.Add(item); } } plannedList.OrderBy(x => x.Timestamp).ForEach(x => AddNewItem(x)); break; } } else if (state is SyncState) { var st = (SyncState)state; switch (st) { case SyncState.Added: List <IVideoItem> readyel = allchannels.SelectMany(x => x.ChannelItems).Where(y => y.SyncState == SyncState.Added).ToList(); foreach (IVideoItem item in readyel.Where(item => !addedList.Contains(item))) { addedList.Add(item); } List <string> readyAddedIds = readyel.Select(x => x.ID).ToList(); foreach (string id in addedList.Select(x => x.ID).Where(id => !readyAddedIds.Contains(id))) { readyAddedIds.Add(id); } List <string> notreadyList = addedListIds.Except(readyAddedIds).ToList(); if (notreadyList.Any()) { List <VideoItemPOCO> items = await db.GetItemsByIdsAndState(SyncState.Added, notreadyList).ConfigureAwait(false); foreach (VideoItemPOCO poco in items) { IChannel parent = allchannels.First(x => x.ID == poco.ParentID); IVideoItem item = VideoItemFactory.CreateVideoItem(poco, parent.Site); parent.AddNewItem(item, false); parent.IsHasNewFromSync = true; addedList.Add(item); } } addedList.OrderBy(x => x.ParentID).ThenBy(y => y.Timestamp).ForEach(x => AddNewItem(x)); break; } } }
public void TestCrudTags() { ITag tag = TagFactory.CreateTag(); FillTestTag(tag); // DeleteTagAsync Task t = db.DeleteTagAsync(tag.Title); Assert.IsTrue(!t.IsFaulted); // InsertTagAsync t = db.InsertTagAsync(tag); Assert.IsTrue(!t.IsFaulted); IVideoItem vi = VideoItemFactory.CreateVideoItem(SiteType.YouTube); FillTestVideoItem(vi, SyncState.Notset); IVideoItem vi2 = VideoItemFactory.CreateVideoItem(SiteType.YouTube); FillTestVideoItem(vi2, SyncState.Deleted); vi2.ID = "vi2"; ICred cred = CredFactory.CreateCred(); FillTestCred(cred); IChannel ch = ChannelFactory.CreateChannel(SiteType.YouTube); FillTestChannel(ch, vi, vi2); // DeleteCredAsync t = db.DeleteCredAsync(cred.SiteAdress); Assert.IsTrue(!t.IsFaulted); // InsertCredAsync t = db.InsertCredAsync(cred); Assert.IsTrue(!t.IsFaulted); // DeleteChannelAsync t = db.DeleteChannelAsync(ch.ID); Assert.IsTrue(!t.IsFaulted); // InsertChannelAsync t = db.InsertChannelAsync(ch); Assert.IsTrue(!t.IsFaulted); // InsertChannelTagsAsync t = db.InsertChannelTagsAsync(ch.ID, tag.Title); Assert.IsTrue(!t.IsFaulted); // GetChannelTagsAsync t = db.GetChannelTagsAsync(ch.ID); Assert.IsTrue(!t.IsFaulted); // GetChannelsByTagAsync //t = db.GetChannelsByTagAsync(tag.Title); //Assert.IsTrue(!t.IsFaulted); // DeleteChannelTagsAsync t = db.DeleteChannelTagsAsync(ch.ID, tag.Title); Assert.IsTrue(!t.IsFaulted); // DeleteChannelAsync t = db.DeleteChannelAsync(ch.ID); Assert.IsTrue(!t.IsFaulted); // DeleteTagAsync t = db.DeleteTagAsync(tag.Title); Assert.IsTrue(!t.IsFaulted); // DeleteCredAsync t = db.DeleteCredAsync(cred.SiteAdress); Assert.IsTrue(!t.IsFaulted); }
public void TestCrudPlaylists() { IVideoItem vi = VideoItemFactory.CreateVideoItem(SiteType.YouTube); FillTestVideoItem(vi, SyncState.Added); IVideoItem vi2 = VideoItemFactory.CreateVideoItem(SiteType.YouTube); FillTestVideoItem(vi2, SyncState.Deleted); vi2.ID = "vi2"; ICred cred = CredFactory.CreateCred(); FillTestCred(cred); IChannel ch = ChannelFactory.CreateChannel(SiteType.YouTube); FillTestChannel(ch, vi, vi2); IPlaylist pl = PlaylistFactory.CreatePlaylist(SiteType.YouTube); FillTestPl(pl, ch); // DeleteCredAsync Task t = db.DeleteCredAsync(cred.SiteAdress); Assert.IsTrue(!t.IsFaulted); // InsertCredAsync t = db.InsertCredAsync(cred); Assert.IsTrue(!t.IsFaulted); // DeleteChannelAsync t = db.DeleteChannelAsync(ch.ID); Assert.IsTrue(!t.IsFaulted); // InsertChannelItemsAsync t = db.InsertChannelItemsAsync(ch); Assert.IsTrue(!t.IsFaulted); // DeletePlaylistAsync t = db.DeletePlaylistAsync(pl.ID); Assert.IsTrue(!t.IsFaulted); // InsertPlaylistAsync t = db.InsertPlaylistAsync(pl); Assert.IsTrue(!t.IsFaulted); // GetPlaylistAsync t = db.GetPlaylistAsync(pl.ID); Assert.IsTrue(!t.IsFaulted); // GetChannelPlaylistAsync t = db.GetChannelPlaylistAsync(ch.ID); Assert.IsTrue(!t.IsFaulted); // UpdatePlaylistAsync t = db.UpdatePlaylistAsync(pl.ID, vi.ID, ch.ID); Assert.IsTrue(!t.IsFaulted); // GetPlaylistItemsAsync t = db.GetPlaylistItemsAsync(pl.ID, ch.ID); Assert.IsTrue(!t.IsFaulted); // DeletePlaylistAsync t = db.DeletePlaylistAsync(pl.ID); Assert.IsTrue(!t.IsFaulted); // DeleteChannelAsync t = db.DeleteChannelAsync(ch.ID); Assert.IsTrue(!t.IsFaulted); // DeleteCredAsync t = db.DeleteCredAsync(cred.SiteAdress); Assert.IsTrue(!t.IsFaulted); }
public void TestCrudItems() { IVideoItem vi = VideoItemFactory.CreateVideoItem(SiteType.YouTube); FillTestVideoItem(vi, SyncState.Added); IVideoItem vi2 = VideoItemFactory.CreateVideoItem(SiteType.YouTube); FillTestVideoItem(vi2, SyncState.Notset); vi2.ID = "vi2"; var lst = new List <IVideoItem> { vi, vi2 }; ICred cred = CredFactory.CreateCred(); FillTestCred(cred); IChannel ch = ChannelFactory.CreateChannel(SiteType.YouTube); FillTestChannel(ch, vi, vi2); // DeleteCredAsync Task t = db.DeleteCredAsync(cred.SiteAdress); Assert.IsTrue(!t.IsFaulted); // InsertCredAsync t = db.InsertCredAsync(cred); Assert.IsTrue(!t.IsFaulted); // DeleteChannelAsync t = db.DeleteChannelAsync(ch.ID); Assert.IsTrue(!t.IsFaulted); // InsertChannelAsync t = db.InsertChannelAsync(ch); Assert.IsTrue(!t.IsFaulted); // RenameChannelAsync t = db.RenameChannelAsync(ch.ID, "newname"); Assert.IsTrue(!t.IsFaulted); // UpdateChannelNewCountAsync t = db.UpdateChannelNewCountAsync(ch.ID, 5); Assert.IsTrue(!t.IsFaulted); // UpdateChannelFastSync t = db.UpdateChannelFastSync(ch.ID, true); Assert.IsTrue(!t.IsFaulted); // GetChannelAsync t = db.GetChannelAsync(ch.ID); Assert.IsTrue(!t.IsFaulted); // GetChannelsListAsync t = db.GetChannelsListAsync(); Assert.IsTrue(!t.IsFaulted); // GetChannelItemsAsync t = db.GetChannelItemsBaseAsync(ch.ID, 25); Assert.IsTrue(!t.IsFaulted); // GetChannelItemsCountDbAsync t = db.GetChannelItemsCountDbAsync(ch.ID); Assert.IsTrue(!t.IsFaulted); // DeleteChannelAsync t = db.DeleteChannelAsync(ch.ID); Assert.IsTrue(!t.IsFaulted); // InsertChannelItemsAsync t = db.InsertChannelItemsAsync(ch); Assert.IsTrue(!t.IsFaulted); // DeleteChannelAsync t = db.DeleteChannelAsync(ch.ID); Assert.IsTrue(!t.IsFaulted); // ITEMS // InsertChannelAsync t = db.InsertChannelAsync(ch); Assert.IsTrue(!t.IsFaulted); // InsertItemAsync t = db.InsertItemAsync(vi); Assert.IsTrue(!t.IsFaulted); // UpdateItemWatchState t = db.UpdateItemWatchState(vi.ID, WatchState.Watched); Assert.IsTrue(!t.IsFaulted); // UpdateItemSyncState t = db.UpdateItemSyncState(vi.ID, SyncState.Deleted); Assert.IsTrue(!t.IsFaulted); // UpdateItemSyncState t = db.UpdateItemSyncState(lst, SyncState.Deleted); Assert.IsTrue(!t.IsFaulted); // GetVideoItemAsync t = db.GetVideoItemAsync(vi.ID); Assert.IsTrue(!t.IsFaulted); // DeleteItemAsync t = db.DeleteItemAsync(vi.ID); Assert.IsTrue(!t.IsFaulted); // DeleteChannelAsync t = db.DeleteChannelAsync(ch.ID); Assert.IsTrue(!t.IsFaulted); // DeleteCredAsync t = db.DeleteCredAsync(cred.SiteAdress); Assert.IsTrue(!t.IsFaulted); }