示例#1
0
        private Models.Thumbnail FindThumbnail(NetworkItemInfo networkItem)
        {
            var thumbnail = _ThumbnailListInCurrentFolder?.FirstOrDefault(x =>
                                                                          x.Name == networkItem.Name.ToLower() &&
                                                                          x.ParentPath == networkItem.ParentFolderPath.ToLower() &&
                                                                          x.Size == (ulong)networkItem.Size &&
                                                                          x.CreatedDateTime == networkItem.Modified);

            return(thumbnail);
        }
示例#2
0
 protected async Task SaveThumbail(NetworkItemInfo item, byte[] data)
 {
     await SaveThumbail((pngPixel) =>
                        new Thumbnail()
     {
         Name            = item.Name,
         ParentPath      = item.ParentFolderPath,
         Size            = (ulong)item.Size,
         RunningTime     = item.Duration,
         CreatedDateTime = item.Modified,
         ThumbnailData   = pngPixel
     }, data);
 }
示例#3
0
        protected override void RegisterMessage()
        {
            MessengerInstance.Register <bool>(this, "CloudBackRequested", (val) =>
            {
                ToUpperTapped(null, null);
            });

            MessengerInstance.Register <Message>(this, "CloudNextPlayListFile", (val) =>
            {
                DecoderTypes decoderType     = val.GetValue <DecoderTypes>("DecoderType");
                NetworkItemInfo playListFile = val.GetValue <NetworkItemInfo>("NextPlayListFile");

                RequestPlayback(decoderType, playListFile, true);
            });
        }
示例#4
0
 private async Task LoadMediaInformationByFFmepg(NetworkItemInfo networkItem, IItemRequestBuilder requestBuilder)
 {
     try
     {
         using (Stream stream = await requestBuilder.Content.Request().GetAsync())
         {
             var ffInfo = CCPlayer.UWP.Factory.MediaInformationFactory.CreateMediaInformationFromStream(stream.AsRandomAccessStream());
             networkItem.ImageItemsSource = await this.GetThumbnailAsync(networkItem, ffInfo);
         }
     }
     catch (Exception ex)
     {
         System.Diagnostics.Debug.WriteLine(ex.Message);
     }
 }
示例#5
0
        //원드라이브로 부터 썸네일로 이미지를 다운로드 받아,
        //NetworItemInfo에 이미지를 로딩 시킨후 DB에 캐쉬로 저장한다.
        private async Task StoreImageFromWeb(NetworkItemInfo networkItem, Microsoft.OneDrive.Sdk.Thumbnail itemThumb)
        {
            if (itemThumb != null)
            {
                try
                {
                    var webReq = System.Net.WebRequest.Create(itemThumb.Url);
                    await GalaSoft.MvvmLight.Threading.DispatcherHelper.RunAsync(async() =>
                    {
                        using (var webRes = await webReq.GetResponseAsync())
                        {
                            using (var imageStream = webRes.GetResponseStream())
                            {
                                WriteableBitmap wb           = await BitmapFactory.FromStream(imageStream);
                                networkItem.ImageItemsSource = wb;

                                using (InMemoryRandomAccessStream newStream = new InMemoryRandomAccessStream())
                                {
                                    await wb.ToStream(newStream, BitmapEncoder.PngEncoderId);
                                    byte[] pngData = new byte[newStream.Size];
                                    await newStream.ReadAsync(pngData.AsBuffer(), (uint)pngData.Length, InputStreamOptions.None);

                                    //DB 등록
                                    ThumbnailDAO.InsertThumbnail(new Models.Thumbnail
                                    {
                                        Name            = networkItem.Name,
                                        ParentPath      = networkItem.ParentFolderPath,
                                        Size            = (ulong)networkItem.Size,
                                        RunningTime     = networkItem.Duration,
                                        CreatedDateTime = networkItem.Modified,
                                        ThumbnailData   = pngData
                                    });
                                }
                            }
                        }
                    });
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine(ex.Message);
                }
            }
        }
示例#6
0
        public static NetworkItemInfo ToNetworkItemInfo(this Microsoft.OneDrive.Sdk.Item item, TappedEventHandler tapped, RightTappedEventHandler rightTapped, HoldingEventHandler holding, bool isOrderByName)
        {
            var networkItemInfo = new NetworkItemInfo()
            {
                Id               = item.Id,
                Created          = (DateTime)item.CreatedDateTime?.DateTime,
                Modified         = (DateTime)item.LastModifiedDateTime?.DateTime,
                ServerType       = ServerTypes.OneDrive,
                IsFile           = item.File != null,
                Name             = item.Name,
                Size             = (long)item.Size,
                ParentFolderPath = item.ParentReference?.Path,
                Tapped           = tapped,
                RightTapped      = rightTapped,
                Holding          = holding,
                IsOrderByName    = isOrderByName,
            };

            return(networkItemInfo);
        }
示例#7
0
        private async void ShowMediaInfoFlyout(NetworkItemInfo item)
        {
            if (item == null || !item.IsFile)
            {
                return;
            }

            MessengerInstance.Send(new Message("IsOpen", true)
                                   .Add("LoadingTitle", ResourceLoader.GetForCurrentView().GetString("Loading/MediaInformation/Text")),
                                   "ShowLoadingPanel");

            item.Uri = await GetStreamingUrlAsync(GetAbsolutePath(item));

            MessengerInstance.Send <Message <DecoderTypes> >(
                new Message <DecoderTypes>((decoderType) =>
            {
                RequestPlayback(decoderType, item, false);
            })
                .Add("NetworkItemInfo", item)
                .Add("ButtonName", "CodecInformation"),
                "ShowMediaFileInformation");
        }
示例#8
0
        protected void LoadThumbnailAsync(NetworkItemInfo item, ICollection <Thumbnail> thumbnailList, bool useUnsupportedThumbnail, int codePage)
        {
            var thumbnail = thumbnailList?.FirstOrDefault(x => x.Name == item.Name.ToLower() && x.ParentPath == item.ParentFolderPath.ToLower() &&
                                                          x.Size == (ulong)item.Size && x.CreatedDateTime == item.Modified);

            if (thumbnail == null)
            {
                //썸네일 로드
                if (useUnsupportedThumbnail)
                {
                    var url = item.GetAuthenticateUrl(Settings.Server);
                    Windows.Foundation.Collections.PropertySet ps = new Windows.Foundation.Collections.PropertySet();
                    ps["codepage"] = codePage;
                    var ffInfo = CCPlayer.UWP.Factory.MediaInformationFactory.CreateMediaInformationFromUri(url, ps);
                    LoadThumbnailFromMediaInformaion(item, ffInfo);
                }
            }
            else if (useUnsupportedThumbnail)
            {
                //캐싱 이미지 로드
                LoadCachedThumbnail(item, thumbnail);
            }
        }
示例#9
0
        private void NetworkItemTapped(object sender, TappedRoutedEventArgs args)
        {
            NetworkItemInfo nii  = null;
            var             elem = args.OriginalSource as FrameworkElement;

            if (elem != null && (nii = elem.DataContext as NetworkItemInfo) != null)
            {
                if (nii.IsFile)
                {
                    RequestPlayback(Settings.Playback.DefaultDecoderType, nii, false);
                }
                else
                {
                    pathStack.Push(nii);

                    switch (nii.ServerType)
                    {
                    case ServerTypes.OneDrive:
                        LoadOneDriveFolders();
                        break;
                    }
                }
            }
        }
示例#10
0
        protected async Task <ImageSource> GetThumbnailAsync(NetworkItemInfo item, ICollection <Thumbnail> thumbnailList, bool useUnsupportedThumbnail, int codePage)
        {
            ImageSource imageSource = null;
            var         thumbnail   = thumbnailList?.FirstOrDefault(x => x.Name == item.Name.ToLower() && x.ParentPath == item.ParentFolderPath.ToLower() &&
                                                                    x.Size == (ulong)item.Size && x.CreatedDateTime == item.Modified);

            if (thumbnail == null)
            {
                //썸네일 로드
                if (useUnsupportedThumbnail)
                {
                    //썸네일을 로드하지 못한 경우  FFmpeg으로 처리
                    var url    = item.GetAuthenticateUrl(Settings.Server);
                    var ffInfo = CCPlayer.UWP.Factory.MediaInformationFactory.CreateMediaInformationFromUri(url);
                    imageSource = await GetThumbnailAsync(item, ffInfo);
                }
            }
            else if (useUnsupportedThumbnail)
            {
                //캐싱 이미지 로드
                imageSource = await GetChachedThumbnail(thumbnail);
            }
            return(imageSource);
        }
示例#11
0
        private async void RequestPlayback(DecoderTypes decoderType, NetworkItemInfo networkItemInfo, bool isPrevOrNext)
        {
            if (!VersionHelper.IsUnlockNetworkPlay)
            {
                MessengerInstance.Send(new Message(), "CheckInterstitialAd");
                return;
            }

            MessengerInstance.Send(new Message("IsOpen", true)
                                   .Add("LoadingTitle", ResourceLoader.GetForCurrentView().GetString("Loading/Playback/Text")), "ShowLoadingPanel");

            var items = NetworkItemGroupSource.Where(x => x.Type == StorageItemTypes.File).SelectMany(x => x.Items).ToList();
            var item  = networkItemInfo;
            var index = items.IndexOf(item);

            NetworkItemInfo prevItemInfo = null;
            NetworkItemInfo currItemInfo = item;
            NetworkItemInfo nextItemInfo = null;

            if ((bool)items?.Any())
            {
                if (index > 0)
                {
                    prevItemInfo = items[index - 1];
                }

                if (index < items.Count - 1)
                {
                    nextItemInfo = items[index + 1];
                }
            }

            var msg = new Message()
                      .Add("PrevPlayListFile", prevItemInfo)
                      .Add("CurrPlayListFile", currItemInfo)
                      .Add("NextPlayListFile", nextItemInfo)
                      .Add("DecoderType", decoderType);

            //Stream videoStream = null;
            //IItemContentRequest request = null;

            switch (ConnectedServerType)
            {
            case ServerTypes.OneDrive:
                /*
                 * request = OneDriveClient.Drive.Root.ItemWithPath(GetAbsolutePath(networkItemInfo)).Content.Request();
                 * // videoStream = await request.GetAsync();
                 *
                 * var provider = OneDriveClient.AuthenticationProvider as MsaAuthenticationProvider;
                 * var url = request.RequestUrl + "?access_token=" + provider.CurrentAccountSession.AccessToken;
                 *
                 * var webReq = System.Net.WebRequest.Create(url);
                 * var webRes = await webReq.GetResponseAsync();
                 * //Stream stream = webRes.GetResponseStream();
                 * url = url.Replace("https://", "http://");
                 *
                 * //        msg.Add("CurrPlayListFileStream", stream.AsRandomAccessStream());
                 * msg.Add("CurrPlayListFileUrl", url);
                 * msg.Add("CurrPlayListFileContentType", request.ContentType);
                 */

                for (int i = 0; i < currItemInfo.SubtitleList?.Count; i++)
                {
                    currItemInfo.SubtitleList[i] = (await GetStreamingUrlAsync(GetAbsolutePath(currItemInfo.ParentFolderPath, currItemInfo.SubtitleList[i]))).AbsoluteUri;
                }

                currItemInfo.Uri = await GetStreamingUrlAsync(GetAbsolutePath(currItemInfo));

                break;
            }

            MessengerInstance.Send(msg, "RequestPlayback");
        }
示例#12
0
 private string GetAbsolutePath(NetworkItemInfo networkItem)
 {
     return(GetAbsolutePath(networkItem.ParentFolderPath, networkItem.Name));
 }
示例#13
0
 private bool IsDirectory(NetworkItemInfo item)
 {
     return(!item.IsFile);
 }
示例#14
0
        static void Main(string[] args)
        {
            int counter = 0;

            try
            {
                SetupEnvironment(args);
                RegisterNotification();

                #region Register

                _gsm = new GameStatusManager(_gamePid, _parentPid);

                Log.Verbose("Waiting Game Process");

                _gsm.WaitForProcess();

                Log.Verbose($"Found Game Process {_gsm.GameProcess.Id}");

                _gnm = new GameNetworkMonitor(_gsm.GameProcess);
                _gmm = new GameMemoryMonitor(_gsm.GameProcess);
                _gdm = new GameDataManager();

                _gnm.Subscribe(NetworkCharacterName.GetMessageId(), _gdm.HandleNetworkCharacterName);
                _gnm.Subscribe(NetworkItemInfo.GetMessageId(), _gdm.HandleNetworkItemInfo);
                _gnm.Subscribe(NetworkItemPriceInfo.GetMessageId(), _gdm.HandleNetworkItemPriceInfo);
                _gnm.Subscribe(NetworkItemInfoEnd.GetMessageId(), _gdm.HandleNetworkItemInfoEnd);
                _gnm.Subscribe(NetworkLogout.GetMessageId(), _gdm.HandleNetworkLogout);
                _gnm.Subscribe(NetworkMarketHistory.GetMessageId(), _gdm.HandleNetworkMarketHistory);
                _gnm.Subscribe(NetworkMarketListingCount.GetMessageId(), _gdm.HandleNetworkMarketListingCount);
                _gnm.Subscribe(NetworkMarketListing.GetMessageId(), _gdm.HandleNetworkMarketListing);
                _gnm.Subscribe(NetworkMarketResult.GetMessageId(), _gdm.HandleNetworkMarketResult);
                _gnm.Subscribe(NetworkRetainerHistory.GetMessageId(), _gdm.HandleNetworkRetainerHistory);
                _gnm.Subscribe(NetworkRetainerSummary.GetMessageId(), _gdm.HandleNetworkRetainerSummary);
                _gnm.Subscribe(NetworkRetainerSumEnd.GetMessageId(), _gdm.HandleNetworkRetainerSumEnd);
                _gnm.Subscribe(NetworkLobbyService.GetMessageId(), _gdm.HandleLobbyService);
                _gnm.Subscribe(NetworkLobbyCharacter.GetMessageId(), _gdm.HandleLobbyCharacter);
                _gnm.Subscribe(NetworkClientTrigger.GetMessageId(), _gdm.HandleClientTrigger);
                _gnm.Subscribe(NetworkRequestRetainer.GetMessageId(), _gdm.HandleRequestRetainer);
                _gnm.Subscribe(NetworkInventoryModify.GetMessageId(), _gdm.HandleInventoryModify);
                _gnm.Subscribe(NetworkPlayerSpawn.GetMessageId(), _gdm.HandleNetworkPlayerSpawn);

                _gsm.OnLobbyUpdate    += LobbyUpdate;
                _gsm.OnWorldStart     += WorldStart;
                _gsm.OnWorldStop      += WorldStop;
                _gsm.OnGlobalStart    += GlobalStart;
                _gsm.OnGlobalStop     += GlobalStop;
                _gmm.OnChatlogUpdated += PackLogData;
                _gdm.OnGameLoggingOut += _gsm.SuspectNetworkStop;
                _gdm.OnDataReady      += IpcClient.SendData;
                _gdm.OnRequestScan    += _gmm.GetInventory;
                _gsm.GetPacketAmount  += () => _gnm.PacketsAnalyzed;

                #endregion

                _gsm.StartMonitoringService();

                Log.Warning("Main thread started");

                while (!_gsm.Stopping)
                {
                    counter++;
                    if (counter > 60)
                    {
                        counter = 0;
                        Log.Debug(
                            $"SysLoad: {_gnm?.PacketsObserved:x}" +
                            $"/{_gnm?.PacketsCaptured}" +
                            $"/{_gnm?.PacketsAnalyzed}" +
                            $"/{_gnm?.MessagesProcessed}" +
                            $"/{_gnm?.MessagesDispatched}" +
                            $"/{_gmm?.ScanCycles}" +
                            $"/{_gmm?.LinesRead}" +
                            $"/{IpcClient.PacketSent}");
                    }

                    _gdm.ScheduledTasks();

                    Thread.Sleep(1000);
                }

                Log.Warning("Main thread expected exiting");
            }
            catch (OperationCanceledException)
            {
                // Well, this IS expected literally.
                Log.Warning("Main thread expected exiting");
            }
            catch (Exception e)
            {
                Log.Error(e, $"Main thread unexpected exiting");
            }
            finally
            {
                try { _gsm.Dispose(); } catch { /* ignored */ }
                try { _gmm.Dispose(); } catch { /* ignored */ }
                try { _gnm.Dispose(); } catch { /* ignored */ }
                try { _gdm.Dispose(); } catch { /* ignored */ }

                IpcClient.SendSignal(Signal.MilvanethSubprocessExit, new[] { "Graceful Exit", "Milvaneth.Cmd", "Main Thread" });
                try { IpcClient.Dispose(); } catch { /* ignored */ }

                Log.Fatal("Main thread exited in Program.Main");
                Environment.Exit(0);
            }
        }