private void workFeed(FeedEventArg e) { KS.Util.DebugMSG(e.ToString()); EventHandler <FeedEventArg> temp = Volatile.Read <EventHandler <FeedEventArg> >(ref handler_feed); if (temp != null) { temp(this, e); } }
public static Nullable <Boolean> PopUp(FeedEventArg e) { var close = default(Nullable <Boolean>); Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)(() => { var pop = new Window(); pop.SizeToContent = SizeToContent.WidthAndHeight; var panel = new StackPanel(); pop.Content = panel; var feed = new Feedback(); panel.Children.Add(feed); feed.label.Content = e.Msg; if (String.IsNullOrWhiteSpace(e.Feed)) { feed.textBox.Visibility = Visibility.Hidden; } else { feed.textBox.Text = e.Feed; } feed.button_true.Click += (m, n) => { e.Feed = feed.textBox.Text; e.Bool = true; pop.Close(); }; feed.button_false.Click += (m, n) => { e.Feed = feed.textBox.Text; e.Bool = false; pop.Close(); }; close = pop.ShowDialog(); })); while (!close.HasValue) { Thread.Sleep(100); } return(close); }
/// <summary> /// /// </summary> /// <param name="archive"></param> /// <returns></returns> internal string HCG(string archive) { workwork(new ProgressEventArg(0, 0, "HCG Convert Start")); // 대상이 폴더이거나 파일이거나 var target = Path.HasExtension(archive) ? new FileInfo(archive) as FileSystemInfo : new DirectoryInfo(archive) as FileSystemInfo; // 대상의 부모 디렉터리 var parent = target is FileInfo ? (target as FileInfo).Directory : (target as DirectoryInfo).Parent; var feed = new FeedEventArg("Progress Start "); workFeed(feed); // 압축해제 준비 if (target is DirectoryInfo) { // ev압축파일의 경우 var ev = (target as DirectoryInfo).GetFiles("*.*", SearchOption.AllDirectories); ArkWork.Instance.Load(ev.Length == 1 ? ev[0].FullName : ev.First(x => x.Name.Contains("ev")).FullName); } else { ArkWork.Instance.Load(archive); } for (int i = 0; i < ArkWork.Instance.Count; i++) { var file = ArkWork.Instance[i]; var name = file.FullName; // 확장자 변경 file.Ext = "jpg"; // 알려진 이름 패턴을 삭제 file.Name = KS.Util.WordsReplaceMulti(file.Name, delfilename); workwork(ArkWork.Instance.Count, i, "ReName : " + name + " => " + file.FullName); } // 프로그레스바 연계 handleProgressBar((o, e) => workwork(e.Count, e.Cursor, "Extract : " + e.Progress)); ArkWork.Instance.Extract(x => { if (x == null) { return(null); } try { return(KS.Util.ImageUtilities.ConvertJpg(x)); } catch (Exception) { return(null); } }); // 필터링 // 폴더 제외 ArkWork.Instance.AddFilter(x => x.IsFolder); // 데이터이상제외 ArkWork.Instance.AddFilter(x => x.Data == null); // 파일사이즈 ArkWork.Instance.AddFilter(x => filtersize.Contains(x.Size)); // 파일명 ArkWork.Instance.AddFilter(x => filterfile.Any(y => y.Equals(x.FullName, StringComparison.OrdinalIgnoreCase))); handleProgressBar((o, e) => workwork(e.Count, e.Cursor, "Filtering : " + e.Progress)); // 필터링 ArkWork.Instance.Filtering(); handleProgressBar((o, e) => workwork(e.Count, e.Cursor, "Create ZIp : " + e.Progress)); var zipName = KS.Util.WordsReplaceMulti(target.Name, deltag).Trim(); var zipPath = parent.FullName + Path.DirectorySeparatorChar + zipName; // 파일 이름을 사용자에 확인하는 로직 삽입 // 하고 싶은데... 제어권을 어떻게 넘겨주지? 이벤트로. // 이벤트 발생 시 이벤트 핸들러 내의 로직을 완료할때 까지 일시 정지 상태가 되겠지. 정말? feed = new FeedEventArg(zipName); workFeed(feed); zipName = feed.Feed; // if (File.Exists(zipPath)) { zipPath += "_new"; } // 압축시작 zipPath = ArkWork.Instance.CreateCBZ(parent.FullName, zipName); workwork(new ProgressEventArg(100, 100, "Complete : " + zipPath)); // // 필터링으로 제외된 파일들 체크 필요??? // // 압축 헬퍼클래스 종료 ArkWork.Instance.Close(); // 원본 타겟 파일(폴더) 휴지통으로 이동 KS.Util.FileGoRecycle(target.FullName); return(zipPath); }