package org.arong.egdownloader.ui.work; import java.util.HashMap; import java.util.List; import javax.script.ScriptException; import javax.swing.SwingWorker; import org.arong.egdownloader.model.ScriptParser; import org.arong.egdownloader.model.SearchTask; import org.arong.egdownloader.spider.WebClient; import org.arong.egdownloader.ui.window.EgDownloaderWindow; import org.arong.egdownloader.ui.window.SearchComicWindow; import org.arong.util.JsonUtil; /** * 搜索漫画线程类 * @author dipoo * @since 2015-03-11 */ public class SearchComicWorker extends SwingWorker<Void, Void>{ private EgDownloaderWindow mainWindow; private String url; private Integer currentPage; public SearchComicWorker(EgDownloaderWindow mainWindow, String url, Integer currentPage){ this.mainWindow = mainWindow; this.url = url; this.currentPage = currentPage; } protected Void doInBackground() throws Exception { SearchComicWindow searchComicWindow = (SearchComicWindow)this.mainWindow.searchComicWindow; try { String source = WebClient.getRequestUseJavaWithCookie(this.url, null, mainWindow.setting.getCookieInfo()); String[] result = ScriptParser.search(source, mainWindow.setting); if(result != null){ String json = result[1]; if(result.length > 2){ for(int i = 2; i < result.length; i ++){ json += "###" + result[i]; } } List<SearchTask> searchTasks = JsonUtil.jsonArray2beanList(SearchTask.class, json); String totalTasks = result[0].split(",")[0]; //总页数 String totalPage = result[0].split(",")[1];//Spider.getTextFromSource(source, "+Math.min(", ", Math.max("); searchComicWindow.setTotalInfo(totalPage, totalTasks); //下载封面线程 new DownloadCacheCoverWorker(searchTasks, mainWindow).execute(); searchComicWindow.searchTasks = searchTasks; if(searchComicWindow.datas.get(searchComicWindow.key) == null){ searchComicWindow.datas.put(searchComicWindow.key, new HashMap<String, List<SearchTask>>()); searchComicWindow.keyPage.put(searchComicWindow.key, searchComicWindow.totalLabel.getText()); searchComicWindow.pageInfo.put(searchComicWindow.key, totalPage); } searchComicWindow.datas.get(searchComicWindow.key).put((currentPage) + "", searchTasks); searchComicWindow.showResult(totalPage, currentPage); }else{ searchComicWindow.totalLabel.setText("搜索不到相关内容"); searchComicWindow.hideLoading(); return null; } } catch (ScriptException e) { e.printStackTrace(); } catch (Exception e) { searchComicWindow.key = " "; searchComicWindow.totalLabel.setText(e.getMessage()); } finally{ searchComicWindow.hideLoading(); searchComicWindow.leftBtn.setEnabled(true); searchComicWindow.rightBtn.setEnabled(true); if(searchComicWindow.isVisible()){ searchComicWindow.toFront(); } } return null; } }