Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        /// <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);
        }