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); }
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); }
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); }); }
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); } }
//원드라이브로 부터 썸네일로 이미지를 다운로드 받아, //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); } } }
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); }
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"); }
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); } }
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; } } } }
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); }
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"); }
private string GetAbsolutePath(NetworkItemInfo networkItem) { return(GetAbsolutePath(networkItem.ParentFolderPath, networkItem.Name)); }
private bool IsDirectory(NetworkItemInfo item) { return(!item.IsFile); }
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); } }