Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: comiccollection/URLWorker.java


1   package comiccollection;
2   
3   import java.util.*;
4   import java.net.*;
5   import java.io.*;
6   
7   class URLWorker extends Thread{
8     ComicObject comic;
9     GregorianCalendar date;
10    ComicAccesser ca;
11    ComicReceiver cr;
12    int cs=-1;
13    Hashtable setupInfo;
14    String mainExt=null;
15    int offset;
16    
17    public URLWorker(String str, ComicObject comic, GregorianCalendar date, ComicAccesser ca, ComicReceiver cr, Hashtable setupInfo, int offset){
18      super(str);
19      
20      this.comic=comic;
21      this.date=date;
22      this.ca=ca;
23      this.cr=cr;
24      this.setupInfo=setupInfo;
25      this.offset=offset;
26    }
27    
28    public void run(){
29      System.out.println(comic.access_string);
30  //    StringTokenizer extTok=new StringTokenizer(comic.ext_list, ",");
31      BufferedInputStream istream=null;
32      boolean found=false;
33      boolean multi=false;
34      
35      if((comic.order.equals("s"))||(comic.order.equals("sm"))){
36        istream=startStrip(getUrl(comic.access_string, (char)0), true);
37        if((istream==null)&&(comic.order.equals("sm"))){
38          istream=startStrip(getUrl(comic.multi_access_string, 'a'), true);
39          if(istream!=null){
40            multi=true;
41          }
42        }
43      }
44      if((comic.order.equals("m"))||(comic.order.equals("ms"))){
45        istream=startStrip(getUrl(comic.multi_access_string, 'a'), true);
46        if(istream!=null){
47          multi=true;
48        }
49        if((istream==null)&&(comic.order.equals("ms"))){
50          istream=startStrip(getUrl(comic.access_string, (char)0), true);
51        }
52      }
53      if(comic.order.equals("e")) {
54        String pageUrl=getUrl(comic.access_string, (char)0);
55        String imgUrl;
56        try{
57          imgUrl=getImgUrl(pageUrl);
58        }catch(Exception ex){
59          System.out.println(ex);
60          return;
61        }
62        if(imgUrl!=null){
63          istream=startStrip(imgUrl, false);
64          mainExt=comic.ext_list;
65        }
66      }
67      
68      System.out.println(istream+":"+mainExt);
69      
70      if(istream!=null){
71        found=true;
72      }
73      
74      if(found){
75        ComicStrip strip=new ComicStrip();
76        strip.date=date;
77        try{
78          getImage(strip, mainExt, istream);
79          if(multi){
80            char count='a';
81            count+=Integer.parseInt(comic.inc);
82            while((istream=startStrip(getUrl(comic.multi_access_string, count), true))!=null){
83              getImage(strip, mainExt, istream);
84              count+=Integer.parseInt(comic.inc);
85            }
86          }
87          cr.comicShow(offset, true);
88        }catch(Exception ex){
89          System.out.println(ex);
90        }
91      }else{
92        cr.comicShow(offset, false);
93      }
94    }
95    
96    void getImage(ComicStrip strip, String ext, BufferedInputStream istream) throws Exception{
97      byte []buffer=new byte[1024];
98      ComicImage image=new ComicImage();
99      image.type=ext.toLowerCase();
100     if(cs==-1){
101       cs=ca.createStrip(strip, comic);
102     }
103     int id=ca.createImage(image, cs);
104     ByteArrayOutputStream out=new ByteArrayOutputStream();
105     //FileOutputStream(setupInfo.get("imagePath")+"/"+id+"."+ext.toLowerCase());
106     while(true){
107       int nBytes=istream.read(buffer);
108       if(nBytes<0){  break;}
109       out.write(buffer, 0, nBytes);
110       System.out.println("Added");
111     }
112     FileOutputStream ostream=new FileOutputStream(setupInfo.get("imagePath")+"/"+id+"."+ext.toLowerCase());
113     ostream.write(out.toByteArray());
114 
115     istream.close();
116     ostream.close();
117   }
118   
119   BufferedInputStream startStrip(String url, boolean addExt){
120     String ext;
121     BufferedInputStream istream=null;
122     boolean found=false;
123     
124     if(addExt){
125       StringTokenizer extTok=new StringTokenizer(comic.ext_list, ",");
126     
127       while(extTok.hasMoreTokens()){
128         System.out.println("Stoat!");
129         ext=extTok.nextToken();
130         System.out.println(url.toString()+"."+ext);
131         
132         try{
133           URL image=new URL(url.toString()+"."+ext);
134           URLConnection urlc=image.openConnection();
135           urlc.setRequestProperty("Referer", url.toString()+"."+ext);
136           urlc.setRequestProperty("User-Agent", "Comic Collection 1 (http://comiccollection.sourceforge.net)");
137           
138           istream=new BufferedInputStream(urlc.getInputStream());
139 //          istream=new BufferedInputStream(image.openStream());
140           found=true;
141         }catch(FileNotFoundException ex){
142           found=false;
143         }catch(Exception ex){
144           System.out.println(ex);
145         }
146         System.out.println("File found: "+String.valueOf(found));
147         if(found){
148           mainExt=ext;
149           break;
150         }
151       }
152     }else{      
153       try{
154         URL image=new URL(url.toString());
155         System.out.println("Using url: "+url);
156         istream=new BufferedInputStream(image.openStream());
157         found=true;
158       }catch(FileNotFoundException ex){
159         found=false;
160       }catch(Exception ex){
161         System.out.println(ex);
162       }
163       System.out.println("File found: "+String.valueOf(found));
164     }
165     if(found){
166       return istream;
167     }else{
168       return null;
169     }
170   }
171   
172   StringBuffer doReplace(StringBuffer input, String needle, String subst){
173     StringBuffer working=input;
174     int pos=0;
175     
176     while(true){
177       pos=working.toString().indexOf(needle, pos);
178       
179       if(pos==-1){
180         break;
181       }
182       
183       working.replace(pos, pos+needle.length(), subst);
184     }
185     
186     return working;
187   }
188       
189   
190   //BufferedInputStream
191   
192   String getUrl(String urlIn, char frame){
193     int posY=0, posM=0, posD=0, posF=0;
194     StringBuffer url;
195     String dayStr, monthStr, yearStr, shortYearStr, ext="";
196     
197     url=new StringBuffer(urlIn);
198     System.out.println("Url: "+url);
199     
200     yearStr=String.valueOf(date.get(Calendar.YEAR));
201     monthStr=String.valueOf(date.get(Calendar.MONTH)+1);
202     dayStr=String.valueOf(date.get(Calendar.DAY_OF_MONTH));
203     shortYearStr=String.valueOf(date.get(Calendar.YEAR)%100);
204     
205     
206     if((date.get(Calendar.YEAR)%100)<10){
207       shortYearStr="0"+shortYearStr;
208     }
209     if((date.get(Calendar.MONTH)+1)<10){
210       monthStr="0"+monthStr;
211     }
212     if(date.get(Calendar.DAY_OF_MONTH)<10){
213       dayStr="0"+dayStr;
214     }
215     
216     url=doReplace(url, "YYYY", yearStr);
217     url=doReplace(url, "MM", monthStr);
218     url=doReplace(url, "DD", dayStr);
219     url=doReplace(url, "AA", new Character(frame).toString());
220     url=doReplace(url, "yy", shortYearStr);
221     
222     /*while(true){
223       posY=urlIn.indexOf("YYYY", posY);
224       posM=urlIn.indexOf("MM", posM);
225       posD=urlIn.indexOf("DD", posD);
226       
227       if((posY==-1)||(posM==-1)||(posD==-1)){
228         break;
229       }
230       
231       
232       url.replace(posY, posY+4, yearStr);
233       url.replace(posM, posM+2, monthStr);
234       url.replace(posD, posD+2, dayStr);
235       posY=posY+4;
236       posM=posM+2;
237       posD=posD+2;
238       
239       if(frame!=0){
240         posF=urlIn.indexOf("AA", posF);
241         url.replace(posF, posF+2, new Character(frame).toString());
242       }
243       
244       System.out.println("URL: "+url);
245     }*/
246     
247     System.out.println("Url: "+url.toString());
248     
249     return url.toString();
250   }
251   
252   String getImgUrl(String pageUrl) throws Exception{
253     String url=null;
254     char[] buffer=new char[1024];
255     StringBuffer pageCont=new StringBuffer();
256     Reader istream;
257     
258     URL page=new URL(pageUrl.toString());
259     try{
260       istream=new InputStreamReader(page.openStream());
261       while(true){
262         int nBytes=istream.read(buffer, 0, 1024);
263         if(nBytes<0){
264           break;
265         }
266         pageCont.append(buffer);
267       }
268       istream.close();
269     }catch(FileNotFoundException ex){
270       System.out.println(ex);
271       return null;
272     }
273     
274     StringTokenizer ruleTok=new StringTokenizer(comic.extract_rules, "|");
275     ArrayList rules=new ArrayList();
276     while(ruleTok.hasMoreTokens()){
277       rules.add(ruleTok.nextToken());
278     }
279     
280     StringTokenizer pageTok=new StringTokenizer(pageCont.toString(), "\"");
281     boolean inQuotes=false;
282     while(pageTok.hasMoreElements()){
283       if(inQuotes){
284         String str=pageTok.nextToken();
285         if(matchExtraction(str, rules)){
286           System.out.println("Str:"+str);
287           url=str;
288           break;
289         }
290         inQuotes=false;
291       }else{
292         String str=pageTok.nextToken();
293         if(matchExtraction(str, rules)){
294           System.out.println("Str:"+str);
295           url=str;
296           break;
297         }
298         inQuotes=true;
299       }
300     }
301     //United Media, at least, uses relative image names
302     if((url!=null)&&(url.indexOf("http:")==-1)){
303       //Assume relative to host
304       url=page.getProtocol()+"://"+page.getHost()+url;
305       System.out.println("Corrected URL: "+url);
306     }
307     //System.out.println(pageCont.toString());
308     return url;
309   }
310   
311   boolean matchExtraction(String str, ArrayList rules){
312     boolean matches=true;
313     for(int i=0; i<rules.size(); i++){
314       if(str.indexOf((String)rules.get(i))==-1){
315         matches=false;  
316       }
317     }
318     if(matches){
319       System.out.println("Len: "+str.length()+" extPos: "+str.indexOf(comic.ext_list)+" dif: "+String.valueOf(str.length()-str.indexOf(comic.ext_list)));
320       if((str.length()-str.indexOf(comic.ext_list))!=comic.ext_list.length()){
321         matches=false;
322       }
323     }
324     return matches;
325   }
326 }