コード例 #1
0
 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();
         }
     }
 }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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;
            }
        }
コード例 #5
0
        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;
                }
            }
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }