Пример #1
0
        private void saveButton_Click(object sender, EventArgs e)
        {
            string saveFolder = Config.Instance.GetConfig("SaveFolder");

            /*
             * save by gdi+
             * 모니터 해상도 크기 이상의 이미지는 저장되지 않는다.
             */

            /*
             * Logger.Log("save images by gdi+");
             * Stopwatch sw = new Stopwatch();
             * sw.Start();
             *
             * FilePathMaker filePathMaker = new FilePathMaker(saveFolder);
             *
             * foreach(ListViewItem item in thumbnailListView.CheckedItems)
             * {
             *      ImageRakerThumbnailListViewItem myitem = item.Tag as ImageRakerThumbnailListViewItem;
             *      //string src = myitem.ImageSource;
             *      //string referer = myitem.RefererUrl;
             *
             *      //urls.Add(new UrlPair(src, referer));
             *
             *      using (Bitmap originalBitmap = new Bitmap(myitem.Width, myitem.Height))
             *      {
             *              using (Graphics g = Graphics.FromImage(originalBitmap))
             *              {
             *                      myitem.Render.DrawToDC(g.GetHdc());
             *              }
             *
             *              Logger.DLog("    save to file: {0} * {1}, url: {2}", myitem.Width, myitem.Height, myitem.ImageSource);
             *
             *              string filepath = filePathMaker.MakeFilePath(myitem.ImageSource, fileNameMakingMethod);
             *
             *              originalBitmap.Save(filepath);
             *      }
             * }
             *
             * sw.Stop();
             * Logger.Log("save images by gdi+ DONE - elapsed: {0}", sw.ElapsedMilliseconds);
             *
             * return;
             */

            // 자동선택됐지만 선택 해제된 아이템들을 블럭. 다시 선택된 애들은 블럭 리스트에서 삭제.
            // 최초 저장시만 사용한다. 두번째 저장부터는 실패한 것일 수 있음.
            if (Config.Instance.GetConfigBool("UseBlockUrls") && saveCount == 0)
            {
                Dictionary <string, long> blockUrls = Config.Instance.GetBlockUrls();
                bool blockUrlsChanged = false;

                foreach (ImageRakerThumbnailListViewItem autoitem in originallyAutoSelectedImageItems)
                {
                    string autourl = autoitem.ImageSource;

                    foreach (ListViewItem item in thumbnailListView.Items)
                    {
                        ImageRakerThumbnailListViewItem myitem = item.Tag as ImageRakerThumbnailListViewItem;

                        if (myitem.ImageSource == autourl)
                        {
                            if (item.Checked == false)
                            {
                                if (!blockUrls.ContainsKey(autourl))
                                {
                                    Logger.DLog("auto selected but unchecked, not added in blocks yet: {0}, ADD TO BLOCK URLS", autourl);

                                    Config.Instance.AddBlockUrl(autourl);
                                    blockUrlsChanged = true;
                                }
                            }
                            else
                            {
                                if (blockUrls.ContainsKey(autourl))
                                {
                                    Logger.DLog("originally auto selected, blocked, but checked again: {0}, REMOVE FROM BLOCK URLS", autourl);

                                    Config.Instance.RemoveBlockUrl(autourl);
                                    blockUrlsChanged = true;
                                }
                            }
                        }
                    }
                }

                if (blockUrlsChanged)
                {
                    Config.Instance.SaveBlockUrls();
                }
            }

            ExceptionTester.Instance.Throw("random_save1");

            // extract urls to save
            List <UrlPair> urls = new List <UrlPair>();

            foreach (ListViewItem item in thumbnailListView.CheckedItems)
            {
                ImageRakerThumbnailListViewItem myitem = item.Tag as ImageRakerThumbnailListViewItem;
                string src     = myitem.ImageSource;
                string referer = myitem.RefererUrl;

                urls.Add(new UrlPair(src, referer));
            }

            // determine selected file name making method
            //FilePathMaker.FileNameMakingMethod fileNameMakingMethod = FilePathMaker.FileNameMakingMethod.FullUrl;
            FilePathMaker.FileNameMakingMethod fileNameMakingMethod = FilePathMaker.GetFileNameMakingMethodFromConfig();
            bool exitOnComplete = Config.Instance.GetConfigBool("ExitOnComplete");

//			bool overwrite = Config.Instance.GetConfigBool("Overwrite");

            UsageReporter.Instance.SaveCountInSession = saveCount++;

            ExceptionTester.Instance.Throw("random_save2");

            ImageRaker.SaveType saveType = ImageRaker.SaveType.ByForm;

            if (instantMode)
            {
                saveType = ImageRaker.SaveType.ByInstant;
            }

            ImageRakerDownloadForm form = new ImageRakerDownloadForm(saveFolder, urls,
                                                                     fileNameMakingMethod, exitOnComplete, saveType);

            DialogResult result = form.ShowDialog();

            ExceptionTester.Instance.Throw("random_save3");

            if (result != DialogResult.Abort)
            {
                bool failed = false;

                // 실패한 이미지 체크 기능
                if (Config.Instance.GetConfigBool("MarkFailed") == true)
                {
                    // reset checked first
                    deselectAllButton.PerformClick();

                    // check on failed urls
                    Logger.Log("check on failed urls...");

                    foreach (UrlPair url in urls)
                    {
                        if (url.Result == UrlPair.SaveResult.Failed ||
                            url.Result == UrlPair.SaveResult.Duplicated)
                        {
                            foreach (ListViewItem item in thumbnailListView.Items)
                            {
                                ImageRakerThumbnailListViewItem myitem = item.Tag as ImageRakerThumbnailListViewItem;

                                if (myitem.ImageSource == url.Url)
                                {
                                    failed       = true;
                                    item.Checked = true;
                                }
                            }
                        }
                    }
                }

                // exit when exit on complete enabled.
                if (!failed && (exitOnComplete && (result == DialogResult.OK || result == DialogResult.Cancel)))
                {
                    // exit the program
                    this.Close();
                }
            }
            else
            {
                Logger.Warn("cannot start downloader! reason: {0}", form.ExceptionMessage);
                Message.Warn("이미지 레이커 다운로더를 실행할 수 없습니다.\n" + form.ExceptionMessage);

                //MessageBox.Show("이미지 레이커 다운로더를 실행할 수 없습니다.\n" + form.ExceptionMessage,
                //    About.AppName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Пример #2
0
        // returns num of images to save
        public int OnDocumentComplete(IHTMLDocument2 docRoot, ImageRakerDownloadForm.SaveCompleteDelegate saveCompleteDelegate)
        {
            if (docRoot != null)
            {
                // 프레임의 경우 여러 url으로 이루어져있으므로 우선 combined url을 구한다.
                int    numOfDocs   = 0;
                string combinedUrl = GetCombinedUrl(docRoot, out numOfDocs);

                Logger.Log("autosavemanager - doc complete - numofdocs: {0}, combined url: {1}", numOfDocs, combinedUrl);

                // check visited
                if (savedPages.ContainsKey(combinedUrl))
                {
                    // already visited, skip
                    Logger.Warn("already saved in this url: {0}", combinedUrl);

                    // 이미 방문한 경우...
                    saveCompleteDelegate(ImageRakerDownloadForm.SaveCompleteState.AlreadySaved, 0, 0, 0, 0, 0);

                    return(0);
                }

                savedPages.Add(combinedUrl, 0);

                ImgSrcExtractor extractor = new ImgSrcExtractor();
                extractor.Extract(docRoot);
                ImageRakerThumbnailListViewItem[] items = extractor.GetItems();

                ImageSelecter selecter = new ImageSelecter();
                Dictionary <string, string> selected = selecter.AutoSelect(items, items, true);                 // url, referer

                //List<UrlPair> urlpairs = new List<UrlPair>();
                urlPairs.Clear();

                // make url pair
                foreach (KeyValuePair <string, string> sel in selected)
                {
                    string url     = sel.Key;
                    string referer = sel.Value;

                    // check img url duplication
                    if (!savedUrls.ContainsKey(url))
                    {
                        urlPairs.Add(new UrlPair(url, referer));

                        savedUrls.Add(url, 0);
                    }
                }

                if (urlPairs.Count > 0)
                {
                    Logger.Info("auto save manager - starting ir downloadform...");

                    UsageReporter.Instance.FormLoadTime       = -1;
                    UsageReporter.Instance.SaveCountInSession = -1;

                    FilePathMaker.FileNameMakingMethod fileNameMakingMethod = FilePathMaker.GetFileNameMakingMethodFromConfig();

                    downloadForm = new ImageRakerDownloadForm(saveFolder, urlPairs,
                                                              fileNameMakingMethod, true, ImageRaker.SaveType.ByAuto);

//					downloadForm.TopMost = true;	// 사용할 수 없음.
                    downloadForm.WindowState = FormWindowState.Minimized;
//					downloadForm.Opacity = 0.65;
                    downloadForm.StartPosition = FormStartPosition.CenterScreen;
                    downloadForm.SaveComplete += saveCompleteDelegate;

                    downloadForm.Show();

                    Logger.Log("auto save complete asynchronously");

                    return(urlPairs.Count);
                }
                else
                {
                    Logger.Info("nothing to auto save!");

                    saveCompleteDelegate(ImageRakerDownloadForm.SaveCompleteState.NothingToSave, 0, 0, 0, 0, 0);

                    return(0);
                }
            }
            else
            {
                Logger.DLog("invalid doc!");
            }

            return(0);
        }
Пример #3
0
        private void UpdateAutoSaveLabel(ImageRakerDownloadForm.SaveCompleteState state, int total, int succeed, int failed)
        {
            switch(state)
            {
                case ImageRakerDownloadForm.SaveCompleteState.SaveComplete:
                    break;

                case ImageRakerDownloadForm.SaveCompleteState.OneOrMoreFailed:
                    break;

                case ImageRakerDownloadForm.SaveCompleteState.AlreadySaved:
                    {
                        ShowAutoMessage("이미 저장된 페이지입니다.", true, false);
                        return;
                    }
                    break;

                case ImageRakerDownloadForm.SaveCompleteState.NothingToSave:
                    {
                        ShowAutoMessage("저장할 이미지가 없습니다.", true, false);
                        return;
                    }
                    break;

                case ImageRakerDownloadForm.SaveCompleteState.Canceled:
                    {
                        ShowAutoMessage("취소되었습니다.", true, false);
                        return;
                    }
                    break;
            }

            if (!allowAutoCompleteMessage)
            {
                Logger.Warn("show auto message NOT ALLOWED!");

                return;
            }

            Logger.Log("UpdateAutoSaveLabel - num of saved: {0}", succeed);

            // show
            ShowAutoMessage(string.Format("{0}개의 이미지를 저장했습니다.", succeed), true, succeed > 0);
        }
Пример #4
0
        private void autoSaveManager_SaveCompleteDelegate(ImageRakerDownloadForm.SaveCompleteState state, 
            int total, int succeed, int failed, int duplicated, int timeElapsed)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new ImageRakerDownloadForm.SaveCompleteDelegate(autoSaveManager_SaveCompleteDelegate),
                    state, total, succeed, failed, duplicated, timeElapsed);
            }
            else
            {
                autoSaving = false;

                UpdateAutoSaveLabel(state, total, succeed, failed);
            }
        }
Пример #5
0
        // returns num of images to save
        public int OnDocumentComplete(IHTMLDocument2 docRoot, ImageRakerDownloadForm.SaveCompleteDelegate saveCompleteDelegate)
        {
            if (docRoot != null)
            {
                // 프레임의 경우 여러 url으로 이루어져있으므로 우선 combined url을 구한다.
                int numOfDocs = 0;
                string combinedUrl = GetCombinedUrl(docRoot, out numOfDocs);

                Logger.Log("autosavemanager - doc complete - numofdocs: {0}, combined url: {1}", numOfDocs, combinedUrl);

                // check visited
                if (savedPages.ContainsKey(combinedUrl))
                {
                    // already visited, skip
                    Logger.Warn("already saved in this url: {0}", combinedUrl);

                    // 이미 방문한 경우...
                    saveCompleteDelegate(ImageRakerDownloadForm.SaveCompleteState.AlreadySaved, 0, 0, 0, 0, 0);

                    return 0;
                }

                savedPages.Add(combinedUrl, 0);

                ImgSrcExtractor extractor = new ImgSrcExtractor();
                extractor.Extract(docRoot);
                ImageRakerThumbnailListViewItem[] items = extractor.GetItems();

                ImageSelecter selecter = new ImageSelecter();
                Dictionary<string, string> selected = selecter.AutoSelect(items, items, true);	// url, referer

                //List<UrlPair> urlpairs = new List<UrlPair>();
                urlPairs.Clear();

                // make url pair
                foreach (KeyValuePair<string, string> sel in selected)
                {
                    string url = sel.Key;
                    string referer = sel.Value;

                    // check img url duplication
                    if(!savedUrls.ContainsKey(url))
                    {
                        urlPairs.Add(new UrlPair(url, referer));

                        savedUrls.Add(url, 0);
                    }
                }

                if (urlPairs.Count > 0)
                {
                    Logger.Info("auto save manager - starting ir downloadform...");

                    UsageReporter.Instance.FormLoadTime = -1;
                    UsageReporter.Instance.SaveCountInSession = -1;

                    FilePathMaker.FileNameMakingMethod fileNameMakingMethod = FilePathMaker.GetFileNameMakingMethodFromConfig();

                    downloadForm = new ImageRakerDownloadForm(saveFolder, urlPairs,
                                                             fileNameMakingMethod, true, ImageRaker.SaveType.ByAuto);

            //					downloadForm.TopMost = true;	// 사용할 수 없음.
                    downloadForm.WindowState = FormWindowState.Minimized;
            //					downloadForm.Opacity = 0.65;
                    downloadForm.StartPosition = FormStartPosition.CenterScreen;
                    downloadForm.SaveComplete += saveCompleteDelegate;

                    downloadForm.Show();

                    Logger.Log("auto save complete asynchronously");

                    return urlPairs.Count;
                }
                else
                {
                    Logger.Info("nothing to auto save!");

                    saveCompleteDelegate(ImageRakerDownloadForm.SaveCompleteState.NothingToSave, 0, 0, 0, 0, 0);

                    return 0;
                }
            }
            else
            {
                Logger.DLog("invalid doc!");
            }

            return 0;
        }
Пример #6
0
        private void saveButton_Click(object sender, EventArgs e)
        {
            string saveFolder = Config.Instance.GetConfig("SaveFolder");

            /*
             * save by gdi+
             * 모니터 해상도 크기 이상의 이미지는 저장되지 않는다.
             */

            /*
            Logger.Log("save images by gdi+");
            Stopwatch sw = new Stopwatch();
            sw.Start();

            FilePathMaker filePathMaker = new FilePathMaker(saveFolder);

            foreach(ListViewItem item in thumbnailListView.CheckedItems)
            {
                ImageRakerThumbnailListViewItem myitem = item.Tag as ImageRakerThumbnailListViewItem;
                //string src = myitem.ImageSource;
                //string referer = myitem.RefererUrl;

                //urls.Add(new UrlPair(src, referer));

                using (Bitmap originalBitmap = new Bitmap(myitem.Width, myitem.Height))
                {
                    using (Graphics g = Graphics.FromImage(originalBitmap))
                    {
                        myitem.Render.DrawToDC(g.GetHdc());
                    }

                    Logger.DLog("    save to file: {0} * {1}, url: {2}", myitem.Width, myitem.Height, myitem.ImageSource);

                    string filepath = filePathMaker.MakeFilePath(myitem.ImageSource, fileNameMakingMethod);

                    originalBitmap.Save(filepath);
                }
            }

            sw.Stop();
            Logger.Log("save images by gdi+ DONE - elapsed: {0}", sw.ElapsedMilliseconds);

            return;
             */

            // 자동선택됐지만 선택 해제된 아이템들을 블럭. 다시 선택된 애들은 블럭 리스트에서 삭제.
            // 최초 저장시만 사용한다. 두번째 저장부터는 실패한 것일 수 있음.
            if(Config.Instance.GetConfigBool("UseBlockUrls") && saveCount == 0)
            {
                Dictionary<string, long> blockUrls = Config.Instance.GetBlockUrls();
                bool blockUrlsChanged = false;

                foreach (ImageRakerThumbnailListViewItem autoitem in originallyAutoSelectedImageItems)
                {
                    string autourl = autoitem.ImageSource;

                    foreach (ListViewItem item in thumbnailListView.Items)
                    {
                        ImageRakerThumbnailListViewItem myitem = item.Tag as ImageRakerThumbnailListViewItem;

                        if (myitem.ImageSource == autourl)
                        {
                            if (item.Checked == false)
                            {
                                if (!blockUrls.ContainsKey(autourl))
                                {
                                    Logger.DLog("auto selected but unchecked, not added in blocks yet: {0}, ADD TO BLOCK URLS", autourl);

                                    Config.Instance.AddBlockUrl(autourl);
                                    blockUrlsChanged = true;
                                }
                            }
                            else
                            {
                                if (blockUrls.ContainsKey(autourl))
                                {
                                    Logger.DLog("originally auto selected, blocked, but checked again: {0}, REMOVE FROM BLOCK URLS", autourl);

                                    Config.Instance.RemoveBlockUrl(autourl);
                                    blockUrlsChanged = true;
                                }
                            }
                        }
                    }
                }

                if (blockUrlsChanged)
                {
                    Config.Instance.SaveBlockUrls();
                }
            }

            ExceptionTester.Instance.Throw("random_save1");

            // extract urls to save
            List<UrlPair> urls = new List<UrlPair>();

            foreach (ListViewItem item in thumbnailListView.CheckedItems)
            {
                ImageRakerThumbnailListViewItem myitem = item.Tag as ImageRakerThumbnailListViewItem;
                string src = myitem.ImageSource;
                string referer = myitem.RefererUrl;

                urls.Add(new UrlPair(src, referer));
            }

            // determine selected file name making method
            //FilePathMaker.FileNameMakingMethod fileNameMakingMethod = FilePathMaker.FileNameMakingMethod.FullUrl;
            FilePathMaker.FileNameMakingMethod fileNameMakingMethod = FilePathMaker.GetFileNameMakingMethodFromConfig();
            bool exitOnComplete = Config.Instance.GetConfigBool("ExitOnComplete");
            //			bool overwrite = Config.Instance.GetConfigBool("Overwrite");

            UsageReporter.Instance.SaveCountInSession = saveCount++;

            ExceptionTester.Instance.Throw("random_save2");

            ImageRaker.SaveType saveType = ImageRaker.SaveType.ByForm;

            if(instantMode)
            {
                saveType = ImageRaker.SaveType.ByInstant;
            }

            ImageRakerDownloadForm form = new ImageRakerDownloadForm(saveFolder, urls,
                                                                     fileNameMakingMethod, exitOnComplete, saveType);

            DialogResult result = form.ShowDialog();

            ExceptionTester.Instance.Throw("random_save3");

            if (result != DialogResult.Abort)
            {
                bool failed = false;

                // 실패한 이미지 체크 기능
                if (Config.Instance.GetConfigBool("MarkFailed") == true)
                {
                    // reset checked first
                    deselectAllButton.PerformClick();

                    // check on failed urls
                    Logger.Log("check on failed urls...");

                    foreach (UrlPair url in urls)
                    {
                        if(url.Result == UrlPair.SaveResult.Failed
                            || url.Result == UrlPair.SaveResult.Duplicated)
                        {
                            foreach (ListViewItem item in thumbnailListView.Items)
                            {
                                ImageRakerThumbnailListViewItem myitem = item.Tag as ImageRakerThumbnailListViewItem;

                                if (myitem.ImageSource == url.Url)
                                {
                                    failed = true;
                                    item.Checked = true;
                                }
                            }
                        }
                    }
                }

                // exit when exit on complete enabled.
                if (!failed && (exitOnComplete && (result == DialogResult.OK || result == DialogResult.Cancel)))
                {
                    // exit the program
                    this.Close();
                }
            }
            else
            {
                Logger.Warn("cannot start downloader! reason: {0}", form.ExceptionMessage);
                Message.Warn("이미지 레이커 다운로더를 실행할 수 없습니다.\n" + form.ExceptionMessage);

                //MessageBox.Show("이미지 레이커 다운로더를 실행할 수 없습니다.\n" + form.ExceptionMessage,
                //    About.AppName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }