예제 #1
0
 public void OnVideoClick(VideoListItem video)
 {
     if (video != null && video.Id != string.Empty)
     {
         Firebase.Analytics.FirebaseAnalytics.LogEvent("navigation", listController.curCategoryPanel.categoryId, SessionData.VidCount);
         SessionData.CategoryLogs.Add(new CategoryLog {
             Category = listController.curCategoryPanel.categoryId, LogTime = System.DateTime.UtcNow.ToLongTimeString()
         });
         isActuallyPlaying   = false;
         disableVideoOptions = true;
         Player.Pause();
         Player.LoadYoutubeVideo(youtubeUrl + video.Id);
         if (curCoroutine != null)
         {
             StopCoroutine(curCoroutine);
         }
         curCoroutine = StartCoroutine(VideoLoading());
     }
     if (ShouldIntermission() && SessionData.IntermissionVideoIds.Count > 0)
     {
         NotificationController.ShowNotification("A hygiene tip from your dentist...");
         IntermissionPlayer.gameObject.SetActive(true);
         IntermissionPlayer.LoadYoutubeVideo(IntermissionPlayer.youtubeUrl);
         MatchIntermissionToPlayerAudio();
         Player.gameObject.SetActive(false);
     }
 }
예제 #2
0
        public async void CommandBinding_PlayFire(object sender, ExecutedRoutedEventArgs e)
        {
            if (!menuPlayFire.IsEnabled)
            {
                return;
            }

            SearchSettings settings = new SearchSettings();

            settings.MediaType      = MediaType.Video;
            settings.RatingRatio    = SessionCore.Instance.NgMain.RatioSlider.Value;
            settings.RatingCategory = "Fire";
            settings.RatingOperator = OperatorConditionEnum.GreaterOrEqual;
            settings.RatingValue    = 7.5f;
            settings.RatingFilters.Add(new SearchRatingSetting()
            {
                Category = "Length",
                Operator = OperatorConditionEnum.Smaller,
                Value    = 12
            });

            VideoListItem Result = SearchVideoWindow.Instance(settings);

            if (Result != null)
            {
                await SessionCore.Instance.Business.SetNextVideoFileAsync(PlayerMode.Fire, Result.FileName);
            }
        }
예제 #3
0
        private void FixContainer(VideoListItem item)
        {
            SetStatus(item, VideoListItemStatusEnum.Converting);
            string SrcFile = Settings.NaturalGroundingFolder + item.FileName;

            if (item.FileName != null && File.Exists(SrcFile))
            {
                FFmpegProcess FileInfo = MediaInfo.GetFileInfo(SrcFile);
                string        Ext1     = Path.GetExtension(item.FileName).ToLower();
                string        Ext2     = DownloadBusiness.GetFinalExtension(FileInfo.VideoStream?.Format, FileInfo.AudioStream?.Format);
                if ((Ext2 == ".mp4" || Ext2 == ".webm") && Ext1 != Ext2)
                {
                    string DstFile = item.FileName.Substring(0, item.FileName.Length - Ext1.Length) + Ext2;
                    if (MediaMuxer.Muxe(SrcFile, SrcFile, Settings.NaturalGroundingFolder + DstFile) == CompletionStatus.Success)
                    {
                        FileOperationAPIWrapper.MoveToRecycleBin(SrcFile);
                        // Change database binding.
                        EditVideoBusiness Business     = new EditVideoBusiness();
                        Media             ExistingData = Business.GetVideoById(item.MediaId.Value);
                        if (ExistingData != null)
                        {
                            // Edit video info.
                            ExistingData.FileName = DstFile;
                            Business.Save();
                            SetStatus(item, VideoListItemStatusEnum.Done);
                            return;
                        }
                    }
                }
            }
            SetStatus(item, VideoListItemStatusEnum.Failed);
        }
예제 #4
0
        public bool UpdateFileName(VideoListItem item, string fileName)
        {
            EditVideoBusiness Business = new EditVideoBusiness();

            if (Business.GetVideoByFileName(fileName) == null)
            {
                // Update database.
                Media DbItem = Business.GetVideoById(item.MediaId.Value);
                DbItem.FileName = fileName;
                Business.Save();
                // Update in-memory list.
                if (!item.FileExists)
                {
                    item.FileExists = true;
                    item.FileName   = fileName;
                    playlist.RemoveAll(v => v.FileName == fileName && v.IsInDatabase == false);
                }
                else if (!item.IsInDatabase)
                {
                    item.IsInDatabase = true;
                    item.FileName     = fileName;
                    playlist.RemoveAll(v => v.FileName == fileName && v.FileExists == false);
                }
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #5
0
        private async void PlayButton_Click(object sender, RoutedEventArgs e)
        {
            VideoListItem VideoInfo = MediaList.SelectedItem;

            if (MediaList.IsDetailView && VideoInfo != null)
            {
                if (VideoInfo.FileName != null)
                {
                    // File exists, play.
                    if (SessionCore.Instance.Business.IsStarted)
                    {
                        if (SessionCore.Instance.Business.IsPaused)
                        {
                            SessionCore.Instance.Menu.ResumeSession();
                        }
                        await SessionCore.Instance.Business.SetNextVideoFileAsync(PlayerMode.Manual, VideoInfo.FileName).ConfigureAwait(false);

                        if (PlayButton.Content != MenuPlayNext.Header)
                        {
                            await SessionCore.Instance.Business.SkipVideoAsync().ConfigureAwait(false);
                        }
                    }
                    else
                    {
                        await SessionCore.Instance.Menu.CommandBinding_StartSessionAsync(VideoInfo.FileName).ConfigureAwait(false);
                    }
                }
                else if (VideoInfo.HasDownloadUrl)
                {
                    // File doesn't exist, download.
                    await SessionCore.Instance.Business.DownloadManager.DownloadVideoAsync(PlayerAccess.GetVideoById(VideoInfo.MediaId.Value), -1, DownloadBusiness_DownloadCompleted).ConfigureAwait(false);
                }
            }
        }
예제 #6
0
 private void EditButton_Click(object sender, RoutedEventArgs e)
 {
     if (VideosView.SelectedItem != null)
     {
         VideoListItem Item = (VideoListItem)VideosView.SelectedItem;
         ShowEditForm(Item);
     }
 }
예제 #7
0
 private void VideosView_ItemRightButtonUp(object sender, MouseButtonEventArgs e)
 {
     if (VideosView.SelectedItem != null)
     {
         VideoListItem Item = (VideoListItem)VideosView.SelectedItem;
         ShowEditFormPopup(Item, sender as UIElement);
     }
 }
예제 #8
0
        private VideoListItem GetVideoListItem(Models.BaseUnit x, bool isResumeWatching = false)
        {
            var result = new VideoListItem(x, this, isResumeWatching);

            result.RemoveButtonClicked += Result_RemoveButtonClicked;

            return(result);
        }
 public void EditSelection()
 {
     if (VideosView.SelectedItem != null)
     {
         VideoListItem Item = (VideoListItem)VideosView.SelectedItem;
         ShowEditForm(Item);
     }
 }
 public async void EditForm_Closed(Media result)
 {
     if (result != null)
     {
         VideoListItem OldItem = (VideoListItem)VideosView.SelectedItem;
         business.RefreshPlaylist(result, OldItem != null ? OldItem.FileName : null);
         await LoadDataAsync();
     }
 }
예제 #11
0
        private void refreshThePlaylist()
        {
            var temp = windowPlaylist.SelectedItem;

            windowPlaylist.ItemsSource  = null;
            windowPlaylist.ItemsSource  = playlist;
            windowPlaylist.SelectedItem = temp;

            totalTimePlaylist.Text = "Playlist duration time: " + VideoListItem.TotalDuration(playlist);
        }
예제 #12
0
        public void SetStatus(VideoListItem item, VideoListItemStatusEnum status, string statusText)
        {
            item.Status = status;
            if (statusText != null)
            {
                item.StatusText = statusText;
            }

            // Store results in cache.
            scanResults[item.MediaId.Value] = new ScanResultItem(item.Status, item.StatusText);
        }
 private async void SelectButton_Click(object sender, RoutedEventArgs e)
 {
     selection = MediaList.SelectedItem;
     if (selection != null)
     {
         this.Close();
     }
     else
     {
         await MediaList.ShowDetailsAsync();
     }
 }
예제 #14
0
        /// <summary>
        /// デザイナ用
        /// </summary>
        /// <param name="inTitle"></param>
        /// <param name="inResourceURL"></param>
        /// <returns></returns>
        private VideoListItem AddVideoItems(string inTitle, string inResourceURL)
        {
            var source = new BitmapImage();

            source.BeginInit();
            source.UriSource = new Uri(inResourceURL);
            source.EndInit();

            VideoListItem item = new VideoListItem(inTitle, source);

            return(item);
        }
예제 #15
0
        public bool UpdateFileName(Guid videoId, string fileName)
        {
            VideoListItem Item = playlist.Find(v => v.MediaId == videoId);

            if (Item == null)
            {
                Item = new VideoListItem()
                {
                    MediaId = videoId
                }
            }
            ;
            return(UpdateFileName(Item, fileName));
        }
예제 #16
0
    public void InitWith(List <VideoData> videoList)
    {
        videoRender               = new RenderTexture(1280, 720, 24);
        videoPlayer.renderMode    = VideoRenderMode.RenderTexture;
        videoPlayer.targetTexture = videoRender;

        for (int i = 0; i < videoList.Count; i++)
        {
            GameObject    go        = Instantiate(videoListItem.gameObject, videoListItem.transform.parent);
            VideoListItem videoItem = go.GetComponent <VideoListItem>();
            videoItem.InitWith(videoList[i], OnClickVideoItem);
        }
        videoListItem.gameObject.SetActive(false);
        SetVideoPlayData(videoList[0]);
    }
        public void CreateImaPlayer(VideoListItem video)
        {
            imaPlayer?.Release();

            videoPlayerContainer.RemoveAllViews();
            string adTagUrl   = video.adUrl;
            string videoTitle = video.title;

            imaPlayer = new ImaPlayer.Builder(this, videoPlayerContainer, video.video)
                        .SetVideoTitle(videoTitle)
                        .SetAdTagUrl(adTagUrl)
                        .Build();

            imaPlayer.Play();
        }
예제 #18
0
 private async Task DownloadFile(VideoListItem item, DownloadAction action)
 {
     if (Manager != null && item != null && item.MediaId != null)
     {
         Media ItemData = PlayerAccess.GetVideoById(item.MediaId.Value);
         if (ItemData != null)
         {
             SetStatus(item, VideoListItemStatusEnum.Downloading, null);
             await Manager.DownloadVideoAsync(ItemData, -1,
                                              (sender, e) => {
                 SetStatus(item, e.DownloadInfo.IsCompleted ? VideoListItemStatusEnum.Done : VideoListItemStatusEnum.Failed);
             }, action, null);
         }
     }
 }
예제 #19
0
    IEnumerator GetImage(VideoListItem listItem, string categoryId)
    {
        UnityWebRequest www = UnityWebRequestTexture.GetTexture(listItem.ThumbnailUrl);

        yield return(www.Send());

        if (www.isNetworkError)
        {
            Debug.Log(www.error);
        }
        else
        {
            listItem.Thumbnail.texture = ((DownloadHandlerTexture)www.downloadHandler).texture;
            CategoryIdToThumbnails[categoryId].Add(listItem.Id, listItem.Thumbnail.texture);
        }
    }
예제 #20
0
 public void OnVideoClick(VideoListItem video)
 {
     if (video != null && video.Id != string.Empty)
     {
         isActuallyPlaying   = false;
         disableVideoOptions = true;
         SimplePlayback.Play_Pause();
         SimplePlayback.videoId = video.Id;
         SimplePlayback.PlayYoutubeVideo(video.Id);
         if (curCoroutine != null)
         {
             StopCoroutine(curCoroutine);
         }
         curCoroutine = StartCoroutine(VideoLoading());
     }
 }
        private async void PlayButton_Click(object sender, RoutedEventArgs e)
        {
            VideoListItem VideoInfo = MediaList.SelectedItem;

            if (VideoInfo != null)
            {
                if (VideoInfo.FileName != null && VideoInfo.FileExists)
                {
                    // File exists, play.
                    await owner.Player.PlayVideoAsync(PlayerAccess.GetVideoByFileName(VideoInfo.FileName), false);
                }
                else if (VideoInfo.HasDownloadUrl)
                {
                    // File doesn't exist, download.
                    await SessionCore.Instance.Business.DownloadManager.DownloadVideoAsync(PlayerAccess.GetVideoById(VideoInfo.MediaId.Value), -1, DownloadBusiness_DownloadCompleted);
                }
            }
        }
예제 #22
0
 public void HideListUI(VideoListItem vid)
 {
     disableButtons          = true;
     NavController.prevPanel = null;
     NavController.curPanel  = ListController?.curCategoryPanel?.gameObject?.GetComponent <NavObject>();
     NavController.indicator.transform.localScale = new Vector3(1.5f, 1.5f);
     StartCoroutine(HideVideos());
     if (vid != null)
     {
         StartCoroutine(ShowFadedCategoriesThenCenterVideo());
     }
     else
     {
         StartCoroutine(ShowCategories());
         SleepTimer?.Reset();
         SleepTimer?.Start();
     }
 }
예제 #23
0
        private async void CommandBinding_SpecialRequest(object sender, ExecutedRoutedEventArgs e)
        {
            if (!menuSpecialRequest.IsEnabled)
            {
                return;
            }

            SearchSettings SearchSettings = new SearchSettings()
            {
                MediaType   = MediaType.Video,
                RatingRatio = SessionCore.Instance.NgMain.RatioSlider.Value
            };
            VideoListItem Result = SearchVideoWindow.Instance(SearchSettings);

            if (Result != null)
            {
                await SessionCore.Instance.Business.SetNextVideoFileAsync(PlayerMode.SpecialRequest, Result.FileName).ConfigureAwait(false);
            }
        }
예제 #24
0
        public void CommandBinding_AddLucidVideo(object sender, ExecutedRoutedEventArgs e)
        {
            if (!menuAddLucidVideo.IsEnabled)
            {
                return;
            }

            VideoListItem Result = SearchVideoWindow.Instance(new SearchSettings()
            {
                MediaType = MediaType.Video
            });

            if (Result != null)
            {
                LayerLucidVideoControl Layer = new LayerLucidVideoControl();
                Layer.OpenMedia(SessionCore.Instance.Business.GetMediaObject(Result.FileName));
                SessionCore.Instance.Layers.Add(Layer);
            }
        }
예제 #25
0
    IEnumerator GetImage(VideoListItem listItem, string categoryId)
    {
        if (listItem?.ThumbnailUrl != null)
        {
            UnityWebRequest www = UnityWebRequestTexture.GetTexture(listItem?.ThumbnailUrl);
            yield return(www.Send());

            if (www.isNetworkError)
            {
                Debug.Log(www.error);
            }
            else
            {
                if (!CategoryIdToThumbnails[categoryId].ContainsKey(listItem.Id))
                {
                    CategoryIdToThumbnails[categoryId].Add(listItem.Id, ((DownloadHandlerTexture)www.downloadHandler)?.texture);
                }
            }
        }
        yield return(null);
    }
        public void CreateImaPlayer(VideoListItem video)
        {
            imaPlayer?.Release();

            videoPlayerContainer.RemoveAllViews();

            string adTagUrl   = video.adUrl;
            string videoTitle = video.title;

            var settings = new ImaSdkSettings();

            settings.AutoPlayAdBreaks = true;
            imaPlayer = new ImaPlayer(this, videoPlayerContainer, video.video, videoTitle, adTagUrl);
            imaPlayer.SetFullscreenCallback(this);


            Drawable logo = Resources.GetDrawable(Resource.Drawable.gmf_icon);

            imaPlayer.SetLogoImage(logo);

            imaPlayer.Play();
        }
 private void ShowEditFormPopup(VideoListItem item, UIElement target)
 {
     EditVideoWindow.InstancePopup(target, PlacementMode.Mouse, item.MediaId, item.FileName, EditForm_Closed);
 }
        private async void menuSelectFile_Click(object sender, RoutedEventArgs e)
        {
            if (!isNew)
            {
                // Bind to another file.
                Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
                dlg.InitialDirectory = Settings.NaturalGroundingFolder;
                if (video.MediaType == MediaType.Video)
                {
                    dlg.Filter = string.Format("Video Files|*{0})", string.Join(";*", AppPaths.VideoExtensions));
                }
                else if (video.MediaType == MediaType.Audio)
                {
                    dlg.Filter = string.Format("Audio Files|*{0})", string.Join(";*", AppPaths.AudioExtensions));
                }
                else if (video.MediaType == MediaType.Image)
                {
                    dlg.Filter = string.Format("Image Files|*{0})", string.Join(";*", AppPaths.ImageExtensions));
                }
                if (dlg.ShowDialog(IsLoaded ? this : Owner).Value == true)
                {
                    if (!dlg.FileName.StartsWith(Settings.NaturalGroundingFolder))
                    {
                        MessageBox.Show("You must select a file within your Natural Grounding folder.", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
                    }
                    else
                    {
                        string BindFile = dlg.FileName.Substring(Settings.NaturalGroundingFolder.Length);
                        if (business.GetVideoByFileName(BindFile) == null)
                        {
                            video.FileName = BindFile;
                            video.Length   = null;
                            video.Height   = null;
                            await LoadMediaInfoAsync();

                            if (isPopup)
                            {
                                SaveChanges();
                            }
                        }
                        else
                        {
                            MessageBox.Show("This file is already in the database.", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
                        }
                    }
                    fileNotFound = false;
                }
            }
            else
            {
                // Bind file to an existing entry.
                SearchSettings settings = new SearchSettings()
                {
                    MediaType        = (MediaType)video.MediaTypeId,
                    ConditionField   = FieldConditionEnum.FileExists,
                    ConditionValue   = BoolConditionEnum.No,
                    ListIsInDatabase = true
                };
                VideoListItem Result = SearchVideoWindow.Instance(settings);
                if (Result != null)
                {
                    // Close and re-open selected entry.
                    Close();
                    EditVideoWindow NewForm = Instance(Result.MediaId, null, callback);
                    NewForm.video.FileName = video.FileName;
                    NewForm.video.Length   = null;
                    NewForm.video.Height   = null;
                    await NewForm.LoadMediaInfoAsync();
                }
            }
        }
예제 #29
0
    IEnumerator GetText()
    {
        foreach (string key in CategoryVideos.Keys)
        {
            Debug.Log(key);
            UnityWebRequest www = null;
            if (ChannelIds[key][0] == 'P')
            {
                www = UnityWebRequest.Get("https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=" + ChannelIds[key] + "&maxResults=" + maxResults + "&videoDefinition=standard&key=AIzaSyCOu6VAoXIymLoI-5U5CWh3LFOAoVGXvIQ");
            }
            else
            {
                www = UnityWebRequest.Get("https://www.googleapis.com/youtube/v3/search?type=video&maxResults=" + maxResults + "&part=snippet&channelId=" + ChannelIds[key] + "&videoDefinition=standard&key=AIzaSyCOu6VAoXIymLoI-5U5CWh3LFOAoVGXvIQ");
            }
            yield return(www.SendWebRequest());

            if (www.isNetworkError || www.isHttpError)
            {
                Debug.Log(www.error);
            }
            else
            {
                string jsonData = "";
                jsonData = System.Text.Encoding.UTF8.GetString(www.downloadHandler.data, 3, www.downloadHandler.data.Length - 3);  // Skip thr first 3 bytes (i.e. the UTF8 BOM)
                JSONObject json = new JSONObject(jsonData);
                // Or retrieve results as binary data
                //Debug.Log(www.downloadHandler.text);
                if (ChannelIds[key][0] != 'P')
                {
                    YoutubeResponseData responseData = JsonUtility.FromJson <YoutubeResponseData>(www.downloadHandler.text);
                    foreach (var videoItem in responseData.items)
                    {
                        if (videoItem.id.kind != "youtube#video")
                        {
                            continue;
                        }
                        VideoListItem video = new VideoListItem
                        {
                            Title        = videoItem.snippet.title,
                            Id           = videoItem.id.videoId,
                            ThumbnailUrl = videoItem.snippet.thumbnails.medium.url
                        };
                        Debug.Log(video.Title + " " + video.Id + " " + video.ThumbnailUrl);
                        CategoryVideos[key].Add(video);
                    }
                }
                else
                {
                    YoutubePlaylistResponseData responseData = JsonUtility.FromJson <YoutubePlaylistResponseData>(www.downloadHandler.text);
                    foreach (var videoItem in responseData.items)
                    {
                        if (videoItem.snippet.resourceId.kind != "youtube#video" || videoItem.snippet.title == "Private video")
                        {
                            continue;
                        }
                        VideoListItem video = new VideoListItem
                        {
                            Title        = videoItem.snippet.title,
                            Id           = videoItem.snippet.resourceId.videoId,
                            ThumbnailUrl = videoItem.snippet.thumbnails?.medium?.url ?? videoItem.snippet.thumbnails?.standard?.url
                        };
                        // Debug.Log(video.Title + " " + video.Id + " " + video.ThumbnailUrl);
                        CategoryVideos[key].Add(video);
                    }
                }
            }
        }
        RefreshList();
    }
예제 #30
0
 public void SetStatus(VideoListItem item, VideoListItemStatusEnum status)
 {
     SetStatus(item, status, null);
 }