Exemplo n.º 1
0
 void InsertMediaInfo(IEnumerable <MediaInfo> mediaInfoList)
 {
     //미디어 등록 (있으면 수정)
     fileDAO.InsertMedia(mediaInfoList);
     //자막 등록 (있으면 수정)
     foreach (var mi in mediaInfoList)
     {
         //재생목록 추가 표시
         mi.IsAddedPlaylist = true;
         if (mi.SubtitleFileList != null)
         {
             fileDAO.InsertSubtitles(mi);
         }
     }
 }
Exemplo n.º 2
0
        public void AddAllVideoJumpList(IEnumerable <StorageFile> fileList)
        {
            var mediaFiles = fileList.Where(x => x.IsVideoFile());//.OrderBy(x => x.DateCreated);

            if (mediaFiles.Any())
            {
                var mediaInfoList = new List <MediaInfo>();
                var subtitleFiles = fileList.Where(x => x.IsSubtitleFile()).ToList();

                foreach (var file in mediaFiles)
                {
                    var mi = new MediaInfo(file);

                    //비동기 모드로 자막 정보 로드
                    var asyncAction = ThreadPool.RunAsync((handler) =>
                    {
                        //재생목록 추가여부 표시
                        mi.IsAddedPlaylist = playlist.Any(x => x.Path == mi.Path);

                        var fileName = file.Path.Remove(mi.Path.Length - Path.GetExtension(mi.Path).Length).ToUpper();
                        foreach (var ext in CCPlayerConstant.SUBTITLE_FILE_SUFFIX)
                        {
                            StorageFile subtitleFile = null;
                            try
                            {
                                //System.InvalidOperationException를 방지하기 위해서 새롭게 리스트를 생성
                                subtitleFile = new List <StorageFile>(subtitleFiles).FirstOrDefault(
                                    x => x.Path.Length > ext.Length &&
                                    Path.GetExtension(x.Path).ToUpper() == ext.ToUpper() &&
                                    x.Path.Remove(x.Path.Length - ext.Length).ToUpper().Contains(fileName));
                            }
                            catch (Exception) { }

                            if (subtitleFile != null)
                            {
                                subtitleFiles.Remove(subtitleFile);
                                //자막을 미디어 파일에 연결
                                mi.AddSubtitle(new SubtitleInfo(subtitleFile));
                            }
                        }

                        if (mi.SubtitleFileList != null)
                        {
                            //미디어에 연결된 자막목록을 DB에 등록한다.
                            fileDAO.InsertSubtitles(mi);
                        }
                    });

                    //미디어 파일을 그룹으로 생성할 리스트에 추가
                    mediaInfoList.Add(mi);
                }

                //DB 등록
                fileDAO.InsertMedia(mediaInfoList);

                //그룹 변환
                var ng = mediaInfoList.ToAlphaGroups(x => x.Name);
                //그룹 변환 포인터로 부터 데이터 복사
                var group = new ObservableCollection <JumpListGroup <MediaInfo> >(ng);

                foreach (var jg in group)
                {
                    DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        var curGrp = AllVideoSource.FirstOrDefault(x => (string)x.Key == (string)jg.Key);

                        if (curGrp == null)
                        {
                            AllVideoSource.Add(jg);
                        }
                        else
                        {
                            if (jg.Count > 0)
                            {
                                foreach (var fi in jg)
                                {
                                    //동일한 파일이 존재하면 추가하지 않음.
                                    if (curGrp.Any(x => x.Path.ToUpper() == fi.Path.ToUpper() &&
                                                   x.Name.ToUpper() == fi.Name.ToUpper()))
                                    {
                                        continue;
                                    }

                                    //삽입할 위치를 검색하여 해당 위치에 새로운 파일을 추가한다.
                                    int idx = curGrp.IndexOf(curGrp.FirstOrDefault(x => string.Compare(fi.Name, x.Name) < 0));
                                    if (idx == -1)
                                    {
                                        curGrp.Add(fi);
                                    }
                                    else
                                    {
                                        if (curGrp.Any(x => x.Name == fi.Name))
                                        {
                                            fi.Name = string.Format("{0} ({1})", fi.Name, Path.GetPathRoot(fi.Path));
                                        }

                                        curGrp.Insert(idx, fi);
                                    }
                                }
                            }
                        }
                    });
                }

                if (mediaInfoList.Count > 0)
                {
                    DispatcherHelper.CheckBeginInvokeOnUI(() => { EnableButtons(true); });
                }
            }
        }