public void AddNew(StorageItemInfo item) { if (this[item.Hash] == null) { this.Items.Add(item.Hash, item); } }
/// <summary> /// 탐색기 루트에 추가된 폴더 리스트를 조회한다. /// </summary> /// <param name="addedFolderList">조회된 결과를 담을 리스트</param> /// <param name="command">리스트의 버튼을 위한 커맨드</param> /// <returns>조회된 결과 리스트</returns> //public void LoadAddedFolderList(ICollection<FolderInfo> addedFolderList, ICommand command1, ICommand command2, bool includeProtectedFolder) public void LoadAddedFolderList(ICollection <StorageItemInfo> addedFolderList, bool nameAscending, Action <StorageItemInfo> action) { string sql = DML_SELECT.Replace("${COLUMN}", string.Empty); sql += " ORDER BY NAME " + (nameAscending ? "ASC" : "DESC"); using (var stmt = conn.Prepare(sql)) { stmt.Bind("@FOLDER_TYPE", (int)SubType.RootFolder); while (stmt.Step() == SQLitePCL.SQLiteResult.ROW) { StorageItemInfo fi = GetRowData(stmt); //이름이 중복되는 경우 경로를 표시 if (addedFolderList.Any(x => x.Name == fi.Name)) { fi.Name = string.Format("{0} ({1})", fi.Name, Path.GetPathRoot(fi.Path)); } addedFolderList.Add(fi); if (action != null) { action.Invoke(fi); } } } }
protected async void LoadThumbnailAsync(StorageItemInfo file, ICollection <Thumbnail> thumbnailList, bool useUnsupportedThumbnail) { var child = await file.GetStorageFileAsync(); var thumbnail = thumbnailList?.FirstOrDefault(x => x.Name == file.Name.ToLower() && x.ParentPath == file.ParentFolderPath.ToLower() && x.Size == file.Size && x.CreatedDateTime == child.DateCreated.DateTime); if (thumbnail == null) { //썸네일 로드 StorageItemThumbnail thumb = null; if (!string.IsNullOrEmpty(child.ContentType)) { thumb = await child.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.SingleItem); } if (thumb?.Type == ThumbnailType.Image) { //비디오 런닝타임 설정 var videoProperty = await child.Properties.GetVideoPropertiesAsync(); file.Duration = videoProperty.Duration; //썸네일 설정 DispatcherHelper.CheckBeginInvokeOnUI(() => { var bi = new BitmapImage(); bi.SetSourceAsync(thumb).Completed = new AsyncActionCompletedHandler((setSourceAction, setSourceStaus) => { if (setSourceStaus == Windows.Foundation.AsyncStatus.Completed) { file.ImageItemsSource = bi; } }); }); } else if (useUnsupportedThumbnail) { child.OpenReadAsync().Completed = (asyncStream, status) => { if (status == Windows.Foundation.AsyncStatus.Completed) { //썸네일을 로드하지 못한 경우 FFmpeg으로 처리 var stream = asyncStream.GetResults(); if (stream != null) { var ffInfo = CCPlayer.UWP.Factory.MediaInformationFactory.CreateMediaInformationFromStream(stream); LoadThumbnailFromMediaInformaion(file, ffInfo); } } }; } } else if (useUnsupportedThumbnail) { //캐싱 이미지 로드 LoadCachedThumbnail(file, thumbnail); } }
public void FileTapped(object sender, TappedRoutedEventArgs args) { StorageItemInfo sii = null; var elem = args.OriginalSource as FrameworkElement; if (elem != null && (sii = elem.DataContext as StorageItemInfo) != null) { RequestPlayback(Settings.Playback.DefaultDecoderType, sii, false); } }
private void FolderTapped(object sender, TappedRoutedEventArgs args) { StorageItemInfo sii = null; var elem = args.OriginalSource as FrameworkElement; if (elem != null && (sii = elem.DataContext as StorageItemInfo) != null) { LoadFoldersAsync(sii); } }
private void FileRightTapped(object sender, RightTappedRoutedEventArgs args) { if (args.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse) { StorageItemInfo sii = null; var elem = args.OriginalSource as FrameworkElement; if (elem != null && (sii = elem.DataContext as StorageItemInfo) != null) { ShowMediaInfoFlyout(sii); } } }
protected async Task SaveThumbail(StorageItemInfo file, byte[] data) { await SaveThumbail((pngPixel) => new Thumbnail() { Name = file.Name, ParentPath = file.ParentFolderPath, Size = file.Size, RunningTime = file.Duration, CreatedDateTime = file.DateCreated.DateTime, ThumbnailData = pngPixel }, data); }
private void FileHolding(object sender, HoldingRoutedEventArgs args) { if (args.HoldingState == Windows.UI.Input.HoldingState.Started && args.PointerDeviceType != Windows.Devices.Input.PointerDeviceType.Mouse) { StorageItemInfo sii = null; var elem = args.OriginalSource as FrameworkElement; if (elem != null && (sii = elem.DataContext as StorageItemInfo) != null) { ShowMediaInfoFlyout(sii); } } }
private InlineQueryResultBase PhotoResult(StorageItemInfo file) { string url = string.Format(urlFormat, file.Hash); return(new InlineQueryResultPhoto(id: file.Hash, url, url) { Caption = file.Name + " Capt", ParseMode = ParseMode.Html, PhotoWidth = 100, PhotoHeight = 100, Description = file.Name + "Desc" }); }
private async void RequestPlayback(DecoderTypes decoderType, StorageItemInfo storageItemInfo, bool isPrevOrNext) { if (!VersionHelper.IsUnlockNetworkPlay) { MessengerInstance.Send(new Message(), "CheckInterstitialAd"); return; } if (!isPrevOrNext) { MessengerInstance.Send(new Message("IsOpen", true) .Add("LoadingTitle", ResourceLoader.GetForCurrentView().GetString("Loading/Playback/Text")), "ShowLoadingPanel"); } //현재 파일 이후의 파일들을 모두 지금 재생중에 추가 var files = StorageItemGroupSource.Where(x => x.Type == StorageItemTypes.File).SelectMany(x => x.Items).ToList(); PlayListFile currPlayListFile = null; PlayListFile prevPlayListFile = null; PlayListFile nextPlayListFile = null; for (int i = 0; i < files.Count; i++) { var file = await files[i].GetStorageFileAsync(); var orgFile = await storageItemInfo.GetStorageFileAsync(); if (file.FolderRelativeId == orgFile.FolderRelativeId) { currPlayListFile = new PlayListFile(file); if (i > 0) { prevPlayListFile = new PlayListFile(await files[i - 1].GetStorageFileAsync()); } if (i + 1 < files.Count) { nextPlayListFile = new PlayListFile(await files[i + 1].GetStorageFileAsync()); } break; } } MessengerInstance.Send( new Message() .Add("PrevPlayListFile", prevPlayListFile) .Add("CurrPlayListFile", currPlayListFile) .Add("NextPlayListFile", nextPlayListFile) .Add("DecoderType", decoderType), "RequestPlayback"); }
private void ShowMediaInfoFlyout(StorageItemInfo sii) { MessengerInstance.Send(new Message("IsOpen", true) .Add("LoadingTitle", ResourceLoader.GetForCurrentView().GetString("Loading/MediaInformation/Text")), "ShowLoadingPanel"); MessengerInstance.Send <Message <DecoderTypes> >( new Message <DecoderTypes>((decoderType) => { RequestPlayback(decoderType, sii, false); }) .Add("StorageItemInfo", sii) .Add("ButtonName", "CodecInformation"), "ShowMediaFileInformation"); }
private async void LoadLastestFolder() { StorageFolder folder = null; StorageItemInfo folderInfo = null; var entry = StorageApplicationPermissions.MostRecentlyUsedList.Entries.FirstOrDefault(x => x.Metadata.StartsWith(LastestMediaServerFolder)); if (!string.IsNullOrEmpty(entry.Token)) { var paths = entry.Metadata.Substring(LastestMediaServerFolder.Length); List <string> pathList = paths.Split(new char[] { '/' }).ToList(); if (pathList.Count > 0) { string path = pathList[0]; folder = (await KnownFolders.MediaServerDevices.GetFoldersAsync()).FirstOrDefault(x => x.Name == path); if (folder != null) { //루트 폴더 등록 _FolderStack.Push(folder); pathList.RemoveAt(0); foreach (var p in pathList) { var folders = await folder.GetFoldersAsync(); folder = folders.FirstOrDefault(x => x.Name == p); if (folder != null) { _FolderStack.Push(folder); } else { break; } } } } } if (folder != null) { folderInfo = new StorageItemInfo(folder); } LoadFoldersAsync(folderInfo); }
public StorageItemsProvider() { DirectoryInfo d = new DirectoryInfo(SolutionSettings.Default.RootOfMediaFolder); var Items = d.EnumerateFileSystemInfos("*", SearchOption.AllDirectories).AsEnumerable(); foreach (var itemi in Items) { if ("*.jpg|*.jpeg|*.bmp|*.gif|*.png|*.mov|*.mp4|*.3gp".IndexOf(itemi.Extension) == -1 && itemi is FileInfo) { continue; } StorageItemInfo item = new StorageItemInfo(itemi); items.Add(item.Hash, item); } }
public SQLiteResult Update(StorageItemInfo folderInfo) { SQLiteResult result = SQLiteResult.EMPTY; //폴더 등록 using (var stmt = conn.Prepare(DML_UPDATE)) { stmt.Bind("@FAL_TOKEN", folderInfo.FalToken); stmt.Bind("@PATH", folderInfo.Path); stmt.Bind("@FOLDER_TYPE", (int)folderInfo.SubType); result = stmt.Step(); } return(result); }
protected async Task <ImageSource> GetThumbnailAsync(StorageFile file, ICollection <Thumbnail> thumbnailList, bool useUnsupportedThumbnail) { ImageSource imageSource = null; var basicProperties = await file.GetBasicPropertiesAsync(); var fi = new StorageItemInfo(file) { Size = basicProperties.Size }; var thumbnail = thumbnailList?.FirstOrDefault(x => x.Name == fi.Name.ToLower() && x.ParentPath == fi.ParentFolderPath.ToLower() && x.Size == fi.Size && x.CreatedDateTime == file.DateCreated.DateTime); if (thumbnail == null) { //썸네일 로드 StorageItemThumbnail thumb = null; if (!string.IsNullOrEmpty(file.ContentType)) { thumb = await file.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.SingleItem); } if (thumb?.Type == ThumbnailType.Image) { //썸네일 설정 await DispatcherHelper.RunAsync(() => { var bi = new BitmapImage(); bi.SetSource(thumb); imageSource = bi; }); } else if (useUnsupportedThumbnail) { var stream = await file.OpenReadAsync(); //썸네일을 로드하지 못한 경우 FFmpeg으로 처리 var ffInfo = CCPlayer.UWP.Factory.MediaInformationFactory.CreateMediaInformationFromStream(stream); imageSource = await GetThumbnailAsync(fi, ffInfo); } } else if (useUnsupportedThumbnail) { //캐싱 이미지 로드 imageSource = await GetChachedThumbnail(thumbnail); } return(imageSource); }
/// <summary> /// 폴더 정보를 DB에 저장한다. /// </summary> /// <param name="folderInfo"></param> /// <returns></returns> public SQLiteResult Insert(StorageItemInfo folderInfo) { SQLiteResult result = SQLiteResult.EMPTY; //폴더 등록 using (var stmt = conn.Prepare(DML_INSERT)) { stmt.Bind("@PATH", folderInfo.Path); stmt.Bind("@FOLDER_TYPE", (int)folderInfo.SubType); stmt.Bind("@NAME", folderInfo.Name); stmt.Bind("@ROOT_PATH", folderInfo.RootPath); stmt.Bind("@FAL_TOKEN", folderInfo.FalToken); result = stmt.Step(); } return(result); }
/// <summary> /// 폴더를 삭제한다. /// </summary> /// <param name="folderInfo">삭제할 폴더 정보</param> /// <returns>DB 처리 결과</returns> public SQLiteResult Delete(StorageItemInfo folderInfo) { SQLiteResult result = SQLiteResult.EMPTY; //폴더 삭제 using (var stmt = conn.Prepare(DML_DELETE)) { stmt.Bind("@PATH", folderInfo.Path); stmt.Bind("@FOLDER_TYPE", (int)folderInfo.SubType); result = stmt.Step(); } //정상적으로 삭제되었으면 if (result == SQLiteResult.DONE && !string.IsNullOrEmpty(folderInfo.FalToken) && StorageApplicationPermissions.FutureAccessList.ContainsItem(folderInfo.FalToken)) { //FAL삭제 StorageApplicationPermissions.FutureAccessList.Remove(folderInfo.FalToken); } return(result); }
private async void LoadFilesAsync(StorageItemInfo fi) { if (fi != null) { string nonGroupName = ResourceLoader.GetForCurrentView().GetString("List/File/Text"); ///파일 로딩 표시기 실행 IsLoadingFiles = true; //폴더 로딩 표시기 정지 IsLoadingFolders = false; await ThreadPool.RunAsync(async (handler) => { StorageFolder currentFolder = await fi.GetStorageFolderAsync(); if (currentFolder != null) { var queryResult = currentFolder.CreateFileQueryWithOptions(_VideoFileQueryOptions); var list = await queryResult.GetFilesAsync(); if (list.Any()) { //썸네일 캐시 로드 ThumbnailDAO.LoadThumnailInFolder(fi.Path, _ThumbnailListInCurrentFolder); //아이템을 정렬하여 화면에 표시 await LoadItemsAsync(list.Select(x => new StorageItemInfo(x) { Tapped = FileTapped, RightTapped = FileRightTapped, Holding = FileHolding, IsOrderByName = (_Sort == SortType.Name || _Sort == SortType.NameDescending) }), list.Count, nonGroupName, true, 9); } } await DispatcherHelper.RunAsync(() => { IsLoadingFiles = false; }); }); } else { IsLoadingFolders = false; } }
private async void RequestPlaybackWithLoadingPanel(StorageItemInfo item) { if (item != null) { //추가되는 경우가 있으므로 만일을 대비해 가장 뒤의 아이템 선택 var newIndex = PlayListFileSource.IndexOf(PlayListFileSource.LastOrDefault(x => x.Path == item.Path)); if (newIndex > -1 && newIndex < PlayListFileSource.Count) { SelectedIndex = newIndex; //로딩 패널 표시 MessengerInstance.Send(new Message("IsOpen", true), "ShowLoadingPanel"); await ThreadPool.RunAsync(async handler => { await DispatcherHelper.RunAsync(() => { //재생요청 RequestPlayback(true); }); }, WorkItemPriority.Normal); } } }
public async void SendNotifyFileLoadSuccess(StorageItemInfo item) { TelegramContext.WithFileHash(item.Hash); if (!Subscribers.ContainsKey(item.Owner)) { return; } var ChatId = Subscribers[item.Owner]; try { try { using (MemoryStream imageStream = FFTools.CreateThumbnail(item.FullPath)) { Message result = await Bot.SendPhotoAsync( ChatId, imageStream, string.Format("{0} ({1}) done", item.Name, item.GetFormatSize()), replyMarkup : Keyboards.CommonFileActions()); MessagesHystory.Push(result); } } catch (Exception) { await Bot.SendTextMessageAsync(ChatId, string.Format("{0} ({1}) done", item.Name, item.GetFormatSize())); } } catch (Exception) { await Task.Delay(3000).ContinueWith(async(a) => { await Bot.SendTextMessageAsync(ChatId, string.Format("{0} ({1}) done", item.Name, item.GetFormatSize())); }); } }
private async void LoadFoldersAsync(StorageItemInfo fi) { var groupName = ResourceLoader.GetForCurrentView().GetString("List/Folder/Text"); var mru = StorageApplicationPermissions.MostRecentlyUsedList; //키에 해당되는 모든 데이터 삭제 var removeList = mru.Entries.Where(x => x.Metadata.StartsWith(LastestMediaServerFolder)).ToArray(); foreach (var entry in removeList) { mru.Remove(entry.Token); } if (fi != null) { var folder = await fi.GetStorageFolderAsync(); if (folder != null && !_FolderStack.Contains(folder)) { _FolderStack.Push(folder); } //탭된 폴더 저장 var fullPath = _FolderStack.Select(x => x.DisplayName).Aggregate((x, y) => y + "/" + x); mru.Add(folder, LastestMediaServerFolder + fullPath); } CurrentFolderInfo = fi; _CurrentSubtitleFileList = null; IsLoadingFolders = true; var isOrderByName = _Sort == SortType.Name || _Sort == SortType.NameDescending; //모든 자식 요소 삭제 StorageItemGroupSource.Clear(); _ThumbnailListInCurrentFolder.Clear(); //기간 지난 썸네일 캐시 삭제 ThumbnailDAO.DeletePastPeriodThumbnail(Settings.Thumbnail.RetentionPeriod); if (fi == null) { await ThreadPool.RunAsync(async handler => { var dlna = KnownFolders.MediaServerDevices; var dlnaFolders = await dlna.GetFoldersAsync(); //DLNA 루트 폴더 로딩 var rootFolderList = dlnaFolders.Select(s => new StorageItemInfo(s) { DateCreated = s.DateCreated, Tapped = FolderTapped, RightTapped = FolderRightTapped, Holding = FolderHolding, IsOrderByName = isOrderByName, SubType = SubType.RootFolder }).TakeWhile(s => { s.SetDisplayName(); return(true); });; await LoadItemsAsync(rootFolderList, rootFolderList.Count(), groupName, false, 2); await DispatcherHelper.RunAsync(() => { //폴더 로딩 표시기 정지 IsLoadingFolders = false; //정렬 옵션 표시 ShowOrderBy = rootFolderList.Count() > 0; }); }); //뒤로버튼 상태 변경 Frame rootFrame = Window.Current.Content as Frame; if (rootFrame != null && !rootFrame.CanGoBack) { SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed; } //위로 버튼 비활성화 VisibleToUpper = false; } else { //위로버튼 활성화 VisibleToUpper = true; await ThreadPool.RunAsync(async handler => { if (Settings.General.UseHardwareBackButtonWithinVideo) { await DispatcherHelper.RunAsync(() => SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible); } var lastStorageFolder = await fi.GetStorageFolderAsync(); if (lastStorageFolder != null) { IReadOnlyList <StorageFolder> folderList = null; try { //부모에 접근 권한이 있는 경우이므로 해당 부모의 자식 폴더 및 파일 로드 folderList = await lastStorageFolder.GetFoldersAsync(); if (folderList.Count > 0) { await LoadItemsAsync(folderList.Select(x => new StorageItemInfo(x) { Tapped = FolderTapped, RightTapped = FolderRightTapped, Holding = FolderHolding, RootPath = fi.RootPath, IsOrderByName = isOrderByName }), folderList.Count, groupName, false, 2); } DispatcherHelper.CheckBeginInvokeOnUI(() => { //파일 리스트업 LoadFilesAsync(fi); }); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("폴더 로드 실패 : " + e.Message); if (e is OperationCanceledException) { //폴더 로딩이 취소됨 System.Diagnostics.Debug.WriteLine(fi.Path + " 폴더내의 자식 폴더 로딩이 취소됨"); } } } else { DispatcherHelper.CheckBeginInvokeOnUI(() => { LoadFoldersAsync(null); }); } }); } }
public void NewItem(string fullPath, string ownerId = "family") { StorageItemInfo item = new StorageItemInfo(new FileInfo(fullPath)); Items.Add(item.Hash, item); }
public static string GetFormatSize(this StorageItemInfo storageItem) { return(storageItem.IsFile ? (storageItem.Size.AsMB().ToString("0.##")) + " MB" : "0"); }
/// <summary> /// 마지막 접근 폴더를 갱신한다. /// </summary> /// <param name="folderInfo"></param> /// <returns></returns> public SQLiteResult ReplaceLastFolder(StorageItemInfo folderInfo) { SQLiteResult result = SQLiteResult.EMPTY; string coumn = @",CASE WHEN (SELECT COUNT(*) FROM FOLDER T WHERE T.PATH = PATH AND T.FOLDER_TYPE = 1) > 0 THEN 'Y' ELSE 'N' END AS IS_ADDED_FOLDER"; //이전의 마지막 폴더 조회 using (var stmt = conn.Prepare(DML_SELECT.Replace("${COLUMN}", coumn))) { string prevItemName = string.Empty; stmt.Bind("@FOLDER_TYPE", (int)SubType.LastFolder); while (stmt.Step() == SQLitePCL.SQLiteResult.ROW) { StorageItemInfo fi = GetRowData(stmt); bool isAddedFolder = stmt.GetText("IS_ADDED_FOLDER") == "Y"; //먼저 마지막 폴더의 타입이 Last folder인 것을 삭제 using (var stmt2 = conn.Prepare(DML_DELETE)) { stmt2.Bind("@PATH", fi.Path); stmt2.Bind("@FOLDER_TYPE", (int)fi.SubType); result = stmt2.Step(); } //타입 삭제 여부 if (result != SQLiteResult.DONE) { return(result); } //삭제하려는 폴더가 추가된 폴더로 등록되어 있지 않는 폴더라면, FutrueAccessList를 검사하여 삭제 시킴 if (!isAddedFolder && !string.IsNullOrEmpty(fi.FalToken) && StorageApplicationPermissions.FutureAccessList.ContainsItem(fi.FalToken)) { //FAL삭제 StorageApplicationPermissions.FutureAccessList.Remove(fi.FalToken); } } } if (folderInfo != null) { //새롭게 폴더 등록 using (var stmt = conn.Prepare(DML_INSERT)) { stmt.Bind("@PATH", folderInfo.Path); stmt.Bind("@FOLDER_TYPE", (int)SubType.LastFolder); stmt.Bind("@NAME", folderInfo.Name); stmt.Bind("@ROOT_PATH", folderInfo.RootPath); stmt.Bind("@FAL_TOKEN", folderInfo.FalToken); result = stmt.Step(); } } return(result); }
public HttpResponseMessage GetById(string id) { try { StorageItemInfo item = Storage.GetById(id); if (item == null || !File.Exists(item.FullPath)) { return(Request.CreateErrorResponse(HttpStatusCode.OK, "File does not exist")); } if (item.IsFile) { HttpResponseMessage result = Request.CreateResponse(HttpStatusCode.OK, Storage.GetChildrenByParentId(id)); result.Content = new StreamContent(item.GetStream()); result.Content.Headers.ContentLength = item.Size; result.Content.Headers.ContentType = new MediaTypeHeaderValue(System.Web.MimeMapping.GetMimeMapping(item.Name)); return(result); } //else //{ // /*string tag = GetETag(Request); // if (tag == "\"" + item.FileSysInfo.Name.ToHash() + "\"") // { // var res = Request.CreateResponse(HttpStatusCode.NotModified); // res.Headers.Add("SuppressContent","1"); // Console.WriteLine(Environment.NewLine + tag +Environment.NewLine); // return res; // }*/ // var info = item.FileSysInfo.GetMediaInfo(); // double targetVideoBitRate = info.Streams[0].BitRate * .5D; // double targetAudioBitRate = info.Streams[1].BitRate * .5D; // targetAudioBitRate = 96000;//Math.Max(32000, Math.Min(targetAudioBitRate, 192000)); // targetVideoBitRate = 3000000;//Math.Max(32000, Math.Min(targetVideoBitRate, 512000)); // double totalDurationSeconds = info.Format.Duration; // long originalSize = info.Format.Size; // //var leftBits = (info.Format.BitRate * totalDurationSeconds) - ((info.Streams[0].BitRate + info.Streams[1].BitRate) * totalDurationSeconds); // long expectedSize = Convert.ToInt64(((targetVideoBitRate + targetAudioBitRate) * totalDurationSeconds) / 8D *0.99); // double targetBitRate = (targetVideoBitRate + targetAudioBitRate) / 8D; // Console.WriteLine(Environment.NewLine + expectedSize + "bytes " + expectedSize / 1024.0 + " KB" + Environment.NewLine); // RangeHeaderValue rangeHeader = Request.Headers.Range; // HttpResponseMessage response = new HttpResponseMessage(); // response.Headers.AcceptRanges.Add("bytes"); // response.Headers.ETag = new EntityTagHeaderValue("\"" + item.FileSysInfo.Name.ToHash() + "\""); // Console.WriteLine(Environment.NewLine + Request.Headers.Range + Environment.NewLine); // long end; // long start; // string arg = string.Format("-hide_banner -i \"{0}\" -vf scale=1280:-1 ! -metadata duration=\"{1}\" -b:a 96000 -vcodec libvpx -b:v 3000k -quality realtime -g 240 -threads 8 -speed 5 -qmin 4 -qmax 48 -ac 2 -c:a libopus -pass 2 -passlogfile \"D:\\Temp\\MaxOlgaClip-1280x720\" -f webm pipe:1", item.FileSysInfo.FullName, item.File.MediaInfo.Format.Duration); // if (rangeHeader.Ranges.First().From != null/* && rangeHeader.Ranges.First().From > 0*/) // { // } // // 1. If the unit is not 'bytes'. // // 2. If there are multiple ranges in header value. // // 3. If start or end position is greater than file length. // if (rangeHeader.Unit != "bytes" || rangeHeader.Ranges.Count > 1 || // !TryReadRangeItem(rangeHeader.Ranges.First(), expectedSize/*originalSize*/, out start, out end)) // { // response.StatusCode = HttpStatusCode.RequestedRangeNotSatisfiable; // response.Content = new StreamContent(Stream.Null); // No content for this status. // response.Content.Headers.ContentRange = new ContentRangeHeaderValue(expectedSize); // response.Content.Headers.ContentType = new MediaTypeHeaderValue("video/webm"); // return response; // } // var contentRange = new ContentRangeHeaderValue(start, end, expectedSize); // //var contentRange = new ContentRangeHeaderValue(start, end, originalSize); // // We are now ready to produce partial content. // response.StatusCode = HttpStatusCode.PartialContent; // response.Content = new PushStreamContent(async (outputStream, httpContent, transportContext) => // { // await OnStreamConnected(outputStream, httpContent as PushStreamContent, transportContext, item, start, end, arg, targetBitRate); // }, "video/webm"); // //response.Content.Headers.Expires = DateTime.UtcNow.Date.AddHours(1); // response.Content.Headers.ContentLength = end - start + 1; // response.Content.Headers.ContentRange = contentRange; // Console.WriteLine("Range - "+contentRange.ToString()); // return response; //} else { return(Request.CreateResponse(HttpStatusCode.NotFound)); } } catch (Exception e) { var message = string.Format("Item with id = {0} not found", id); return(Request.CreateResponse(HttpStatusCode.NoContent, message)); } }
private async void SetExtraPropertiesAsync(StorageItemInfo itemInfo) { if (itemInfo.IsFile) { //파일 용량 조회 var file = await itemInfo.GetStorageFileAsync(); if (file != null) { //System.Diagnostics.Debug.WriteLine(file.DisplayName); var bi = await file.GetBasicPropertiesAsync(); //파일 크기 설정 itemInfo.Size = bi.Size; //썸네일 로드 this.LoadThumbnailAsync(itemInfo, _ThumbnailListInCurrentFolder, Settings.Thumbnail.UseUnsupportedDLNAFile); //자막 목록 설정 if (_CurrentSubtitleFileList != null && _CurrentSubtitleFileList.Any()) { itemInfo.SubtitleList = _CurrentSubtitleFileList.Where(x => x.Contains(System.IO.Path.GetFileNameWithoutExtension(itemInfo.Name).ToUpper())).ToList(); } } } else { var folder = await itemInfo.GetStorageFolderAsync(); if (folder != null) { itemInfo.DateCreated = folder.DateCreated; //비디오 파일 갯수를 알아내기 위한 필터링 옵션 var queryResult = folder.CreateFileQueryWithOptions(_VideoFileQueryOptions); itemInfo.FileCount = (int)await queryResult.GetItemCountAsync(); var folderCount = await folder.CreateFolderQuery().GetItemCountAsync(); if (itemInfo.FileCount > 0) { itemInfo.FileCountDescription = itemInfo.FileCount.ToString() + (folderCount > 0 ? "+" : string.Empty); } else { itemInfo.FileCountDescription = "0" + (folderCount > 0 ? "*" : string.Empty); } if (itemInfo.FileCount > 0) { var fileList = await queryResult.GetFilesAsync(); List <ImageSource> imageSourceList = new List <ImageSource>(); List <Thumbnail> thumbnailList = new List <Thumbnail>(); ThumbnailDAO.LoadThumnailInFolder(itemInfo.Path, thumbnailList); for (int i = 0; i < fileList.Count; i++) { //썸네일 로드 var imgSrc = await GetThumbnailAsync(fileList[i], thumbnailList, Settings.Thumbnail.UseUnsupportedDLNAFolder); if (imgSrc != null) { imageSourceList.Add(imgSrc); } //4장의 이미지를 채우지 못할 것으로 확신되거나, 이미 4장을 채운경우 정지 if (((imageSourceList.Count > 0 && imageSourceList.Count >= 4) || (itemInfo.FileCount - (i + 1) + imageSourceList.Count < 4)) && imageSourceList.Count > 0) { break; } } itemInfo.ImageItemsSource = imageSourceList; } else if (!_FolderStack.Any()) { //NAS아이콘 추출 ImageSource imageSource = null; var thumb = await folder.GetThumbnailAsync(ThumbnailMode.SingleItem); if (thumb?.Type == ThumbnailType.Image) { //썸네일 설정 await DispatcherHelper.RunAsync(() => { var bi = new Windows.UI.Xaml.Media.Imaging.BitmapImage(); bi.SetSource(thumb); imageSource = bi; itemInfo.IsFullFitImage = false; itemInfo.ImageItemsSource = imageSource; }); } } } } }