Example #1
0
        /// <summary>
        /// 화면에 데이터를 로딩한다.
        /// </summary>
        async void LoadFiles()
        {
            Stopwatch st = null;

            if (Debugger.IsAttached)
            {
                st = new Stopwatch();
                st.Start();
            }

            await ThreadPool.RunAsync(async handler =>
            {
                //완료 기표
                loadingModel = LoadingMode.None;
                //재생목록 DB쿼리 (1 ~ 100개, 자막도 로드)
                var miList = new List <MediaInfo>();
                fileDAO.LoadPlayList(miList, 100, 0, true);
                //화면에 반영
                foreach (var mi in miList)
                {
                    await DispatcherHelper.RunAsync(() => { PlaylistSource.Add(mi); });
                }

                await DispatcherHelper.RunAsync(() =>
                {
                    CheckListButtonEnable = miList.Count > 0;
                    ReorderButtonEnable   = miList.Count > 1;
                });
            });

            if (Debugger.IsAttached)
            {
                System.Diagnostics.Debug.WriteLine("재생목록 로드 : " + st.Elapsed);
            }
        }
Example #2
0
        async void ReloadAllVideo()
        {
            Stopwatch st     = null;
            var       loader = ResourceLoader.GetForCurrentView();

            //앱바에 시작 상태 통지
            EnableButtons(false);

            if (Debugger.IsAttached)
            {
                st = new Stopwatch();
                st.Start();
            }

            await ThreadPool.RunAsync(async handler =>
            {
                var mfiList = new List <MediaInfo>();
                //재생목록 로드 (이미 추가된 파일인지 표시를 위해)
                playlist = new List <MediaInfo>();
                fileDAO.LoadPlayList(playlist, 100, 0, false);

                //캐시 로딩의 경우 DB로 부터 캐시를 먼저 로드
                if (loadingMode == LoadingMode.Caching)
                {
                    fileDAO.LoadAllVideoList(mfiList, playlist);
                }

                await DispatcherHelper.RunAsync(() =>
                {
                    //목록 초기화
                    AllVideoSource.Clear();
                    //캐시 로드인 경우 로딩 경로를 "캐시에서 로딩" 으로 변경
                    if (loadingMode == LoadingMode.Caching && mfiList.Count > 0)
                    {
                        SearchFolderPath = loader.GetString("Cache");
                    }
                });

                bool isLoaded = false;
                if (loadingMode == LoadingMode.Caching && mfiList.Count > 0)
                {
                    //로딩 표시
                    loadingMode = LoadingMode.None;
                    //캐시 로딩 처리...
                    var jumpGroupList = mfiList.ToAlphaGroups(x => x.Name);
                    foreach (var jumpGroup in jumpGroupList)
                    {
                        await DispatcherHelper.RunAsync(() =>
                        {
                            AllVideoSource.Add(jumpGroup);
                        });
                    }
                    //캐시 로딩 완료 처리
                    isLoaded = true;
                }
                else
                {
                    //로딩 표시
                    loadingMode = LoadingMode.None;

                    List <FolderInfo> folderList = null;
                    InitializeAllVideos(out folderList);

                    //폴더 목록이 비어 있으면 로딩완료 처리
                    isLoaded = folderList.Count == 0;

                    //캐시 로딩이 아닌경우 (디렉토리 풀스캔)
                    //폴더내 파일 로딩 처리
                    if (!isLoaded)
                    {
                        foreach (var fi in folderList)
                        {
                            LoadFilesRecursively(await fi.GetStorageFolder(true), AddAllVideoJumpList);
                        }

                        isLoaded = true;
                    }
                }

                if (isLoaded)
                {
                    //화면 로딩 상태 제거 (캐시로딩 또는 캐시로딩은 아니지만, 로딩할 폴더 목록이 없는 경우)
                    await DispatcherHelper.RunAsync(() =>
                    {
                        //진행바 및 현재 탐색 폴더 표시 삭제
                        SearchFolderPath = string.Empty;
                        //우측 상단 버튼 그룹 제어
                        EnableButtons(true);
                        //시크 데이터 정리
                        //fileDAO.DeleteSeekingData();
                        //재생 목록 정리
                        fileDAO.CleanPlayList();
                    });
                }

                if (Debugger.IsAttached)
                {
                    Debug.WriteLine("전체 비디오 로딩 완료 : " + st.Elapsed);
                }

                //전체 로딩 후 생성 요청...
                MessengerInstance.Send <Message>(new Message("CheckSearchElement", null), MainViewModel.NAME);
            });
        }
Example #3
0
        private async Task AddExplorerList(IEnumerable <StorageFile> storageFile,
                                           List <StorageFile> subtitleList, FolderInfo parentFolder, CancellationToken token)
        {
            var prevFolderName = string.Empty;
            //재생목록 로드
            List <MediaInfo> playlist = null;

            foreach (var item in storageFile)
            {
                var mi = new MediaInfo(item);

                if (subtitleList != null)
                {
                    //비동기 모드로 파일의 기본 정보(사이즈, 생성일자) 로드
                    var asyncAction = ThreadPool.RunAsync((handler) =>
                    {
                        if (playlist == null)
                        {
                            playlist = new List <MediaInfo>();
                            fileDAO.LoadPlayList(playlist, 100, 0, false);
                        }

                        //재생목록 존재여부 체크
                        mi.IsAddedPlaylist = playlist.Any(x => x.Path == mi.Path);

                        var pathName = mi.Path.Remove(mi.Path.Length - Path.GetExtension(mi.Path).Length);
                        //자막 검색
                        foreach (var ext in CCPlayerConstant.SUBTITLE_FILE_SUFFIX)
                        {
                            StorageFile subtitleFile = null;
                            try
                            {
                                subtitleFile = new List <StorageFile>(subtitleList).FirstOrDefault(x => Path.GetExtension(x.Path).ToUpper() == ext.ToUpper() &&
                                                                                                   x.Path.Length > ext.Length && x.Path.Remove(x.Path.Length - ext.Length).ToUpper().Contains(pathName.ToUpper()));
                            }
                            catch (Exception) { }

                            if (subtitleFile != null)
                            {
                                subtitleList.Remove(subtitleFile);

                                //자막을 미디어 파일에 연결
                                mi.AddSubtitle(new SubtitleInfo(subtitleFile));
                            }
                        }
                    }, WorkItemPriority.Low);
                }
                else
                {
                    if (prevFolderName == item.Name)
                    {
                        mi.Name = string.Format("{0} ({1})", mi.Name, Path.GetPathRoot(mi.Path));
                    }
                    prevFolderName = item.Name;
                }

                token.ThrowIfCancellationRequested();

                await DispatcherHelper.RunAsync(() =>
                {
                    //if (token == cancelTokenSource.Token)
                    if (currentFolderInfo.Path == mi.ParentFolderPath)
                    {
                        ExplorerFileSource.Add(mi);
                    }
                });
            }
        }