コード例 #1
0
 public static async Task GetVideosFromCameraRoll(VideoRepository videoRepo)
 {
     try
     {
         if (await KnownFolders.PicturesLibrary.ContainsFolderAsync("Camera Roll"))
         {
             var cameraRoll = await KnownFolders.PicturesLibrary.GetFolderAsync("Camera Roll");
             var videos = await GetMediaFromFolder(cameraRoll);
             await AddVideo(videoRepo, videos, true);
         }
     }
     catch (FileNotFoundException fileNotFoundException)
     {
         LogHelper.Log("Failed to get videos from Camera Roll. Aborting. " + fileNotFoundException.ToString());
     }
 }
コード例 #2
0
        private static async Task AddVideo(VideoRepository videoRepo, IReadOnlyList<StorageFile> files, bool isCameraRoll)
        {
            try
            {
                foreach (StorageFile storageFile in files)
                {
                    MediaProperties videoProperties = null;
                    if (!isCameraRoll)
                    {
                        var media = Locator.VLCService.GetMediaFromPath(storageFile.Path);
                        videoProperties = Locator.VLCService.GetVideoProperties(media);
                        if(videoProperties == null)
                        {
                            TitleDecrapifier.tvShowEpisodeInfoFromString(storageFile.DisplayName);
                        }
                    }
                    
                    bool isTvShow = !string.IsNullOrEmpty(videoProperties?.ShowTitle) && videoProperties?.Season >= 0 && videoProperties?.Episode >= 0;

                    // Check if we know the file:
                    //FIXME: We need to check if the files in DB still exist on disk
                    var mediaVM = await videoRepo.GetFromPath(storageFile.Path).ConfigureAwait(false);
                    if (mediaVM != null)
                    {
                        Debug.Assert(isTvShow == mediaVM.IsTvShow);
                        mediaVM.File = storageFile;
                        if (isTvShow)
                            await AddTvShow(videoProperties.ShowTitle, mediaVM);
                    }
                    else
                    {
                        // Analyse to see if it's a tv show
                        // if the file is from a tv show, we push it to this tvshow item

                        mediaVM = !isTvShow
                            ? new VideoItem()
                            : new VideoItem(videoProperties.Season, videoProperties.Episode);
                        await mediaVM.Initialize(storageFile);
                        mediaVM.IsCameraRoll = isCameraRoll;
                        if (string.IsNullOrEmpty(mediaVM.Name))
                            continue;
                        VideoItem searchVideo =
                            Locator.VideoLibraryVM.ViewedVideos.FirstOrDefault(x => x.Name == mediaVM.Name);
                        if (searchVideo != null)
                        {
                            mediaVM.TimeWatched = searchVideo.TimeWatched;
                        }

                        if (isTvShow)
                            await AddTvShow(videoProperties.ShowTitle, mediaVM);
                        await videoRepo.Insert(mediaVM);
                    }
                    // Get back to UI thread
                    await DispatchHelper.InvokeAsync(() =>
                    {
                        if (mediaVM.IsCameraRoll)
                        {
                            // TODO: Find a more efficient way to know if it's already in the list or not
                            if (Locator.VideoLibraryVM.CameraRoll.FirstOrDefault(x => x.Id == mediaVM.Id) == null)
                                Locator.VideoLibraryVM.CameraRoll.Add(mediaVM);
                        }
                        else if (!mediaVM.IsTvShow)
                        {
                            if (Locator.VideoLibraryVM.Videos.FirstOrDefault(x => x.Id == mediaVM.Id) == null)
                                Locator.VideoLibraryVM.Videos.Add(mediaVM);
                        }
                        if (Locator.VideoLibraryVM.ViewedVideos.Count < 6 &&
                            Locator.VideoLibraryVM.ViewedVideos.FirstOrDefault(
                                x => x.Path == mediaVM.Path && x.TimeWatched == TimeSpan.Zero) == null)
                        {
                            if (Locator.VideoLibraryVM.ViewedVideos.FirstOrDefault(x => x.Id == mediaVM.Id) == null)
                                Locator.VideoLibraryVM.ViewedVideos.Add(mediaVM);
                        }
                    });
                }
            }
            catch (Exception e)
            {
                ExceptionHelper.CreateMemorizedException("VideoLibraryManagement.AddVideo", e);
            }
        }
コード例 #3
0
        public static async Task GetVideos(VideoRepository videoRepo)
        {
#if WINDOWS_APP
            StorageLibrary videoLibrary = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Videos);
            foreach (StorageFolder storageFolder in videoLibrary.Folders)
#else
            StorageFolder storageFolder = KnownFolders.VideosLibrary;
#endif
            {
                try
                {
                    IReadOnlyList<StorageFile> files = await GetMediaFromFolder(storageFolder);
                    await AddVideo(videoRepo, files, false);
                }
                catch
                {
                    LogHelper.Log("An error occured while indexing a video folder");
                }
            }
            if (Locator.VideoLibraryVM.Videos.Count > 0)
            {
                await DispatchHelper.InvokeAsync(() => Locator.VideoLibraryVM.HasNoMedia = false);
            }
            else
            {
                await DispatchHelper.InvokeAsync(() => Locator.VideoLibraryVM.HasNoMedia = true);
            }
            await App.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
            {
                Locator.VideoLibraryVM.LoadingState = LoadingState.Loaded;
            });
        }