home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 September / PCO_0998.ISO / browser / ns405lyc / netcast.z / ncjava10.jar / netscape / netcast / application / HTMLCrawler.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-03-09  |  15.2 KB  |  1,005 lines

  1. package netscape.netcast.application;
  2.  
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.PrintStream;
  8. import java.io.RandomAccessFile;
  9. import java.net.URL;
  10. import java.util.Date;
  11. import java.util.Enumeration;
  12. import java.util.Hashtable;
  13. import java.util.Vector;
  14. import netscape.net.Cache;
  15. import netscape.net.CacheRequest;
  16. import netscape.security.PrivilegeManager;
  17. import netscape.security.Target;
  18.  
  19. public class HTMLCrawler extends Thread {
  20.    private Hashtable pagesParsed = new Hashtable();
  21.    private Hashtable imagesCached = new Hashtable();
  22.    private Hashtable resourcesCached = new Hashtable();
  23.    private Hashtable linkedPagesList = new Hashtable();
  24.    private Hashtable linkedImagesList = new Hashtable();
  25.    private Hashtable linkedResourcesList = new Hashtable();
  26.    private Hashtable numLinksAtDepth = new Hashtable();
  27.    private Hashtable numImagesAtDepth = new Hashtable();
  28.    private Hashtable numResourcesAtDepth = new Hashtable();
  29.    private Hashtable robotExclusionList = new Hashtable();
  30.    private URL site;
  31.    private String siteName;
  32.    private String localName;
  33.    private int crawlerDepth;
  34.    private String localFileName;
  35.    private Cache cache;
  36.    private UpdateParent parent;
  37.    private boolean ignoreMaxUpdate;
  38.    private int numLinks;
  39.    private int numImages;
  40.    private int numResources;
  41.    private int totalContentLength;
  42.    private int maxSize;
  43.    private int dataUpdateStatus;
  44.    boolean inSiteSpecified = false;
  45.    boolean isStopUpdate = false;
  46.    boolean isCacheFull = false;
  47.    boolean isURLRemoved = false;
  48.    boolean isDepthValid = true;
  49.    boolean isSiteAllowed = true;
  50.    boolean isSiteValid = true;
  51.    private PrintStream psOut;
  52.    private RandomAccessFile sourceStream;
  53.    private RandomAccessFile rafOut;
  54.    PrivilegeManager privilegeManager;
  55.    Target target;
  56.    // $FF: renamed from: t netscape.security.Target
  57.    Target field_0;
  58.    // $FF: renamed from: tr netscape.security.Target
  59.    Target field_1;
  60.    // $FF: renamed from: tw netscape.security.Target
  61.    Target field_2;
  62.    static final int BUF_SIZE = 1024;
  63.    static byte[] junk = new byte[1024];
  64.    private static final int NEW_LINK = 1;
  65.    private static final int REPLACED_LINK = 2;
  66.    private static final int OLD_LINK = 3;
  67.    private static final int NEW_DATA = 1;
  68.    private static final int OLD_DATA = 0;
  69.    private static final int CACHE_FULL = -1;
  70.    private static final int INVALID_DEPTH = -2;
  71.    private static final int SITE_NOT_ALLOWED = -3;
  72.    private static final int INVALID_URL = -4;
  73.  
  74.    public HTMLCrawler(String var1, Cache var2, UpdateParent var3, int var4, String var5, int var6, boolean var7, boolean var8) {
  75.       this.siteName = var1;
  76.       this.cache = var2;
  77.       this.crawlerDepth = var4;
  78.       this.parent = var3;
  79.       this.inSiteSpecified = var7;
  80.       this.localFileName = var5.substring(0, var5.length() - 3);
  81.       this.maxSize = var6;
  82.       this.ignoreMaxUpdate = var8;
  83.    }
  84.  
  85.    public void HTMLCrawlerSite(String var1) {
  86.       this.siteName = var1;
  87.    }
  88.  
  89.    public void HTMLCrawlerCache(Cache var1) {
  90.       this.cache = var1;
  91.    }
  92.  
  93.    public void HTMLCrawlerDepth(int var1) {
  94.       this.crawlerDepth = var1;
  95.    }
  96.  
  97.    public void HTMLCrawlerParent(UpdateParent var1) {
  98.       this.parent = var1;
  99.    }
  100.  
  101.    public void HTMLCrawlerInSite(boolean var1) {
  102.       this.inSiteSpecified = var1;
  103.    }
  104.  
  105.    public void HTMLCrawlerLocalFileName(String var1) {
  106.       this.localFileName = var1.substring(0, var1.length() - 3);
  107.    }
  108.  
  109.    public void HTMLCrawlerMaxSize(int var1) {
  110.       this.maxSize = var1;
  111.    }
  112.  
  113.    public void setTotalContentLength(int var1) {
  114.       this.totalContentLength = var1;
  115.    }
  116.  
  117.    public int getTotalContentLength() {
  118.       return this.totalContentLength;
  119.    }
  120.  
  121.    public void run() {
  122.       try {
  123.          while(!SiteData.canICrawl(this.ignoreMaxUpdate || this.isStopUpdate)) {
  124.             Thread.sleep(30000L);
  125.          }
  126.  
  127.          this.parent.updateStarted();
  128.          PrivilegeManager.enablePrivilege("Netcaster");
  129.          this.site = new URL(this.siteName);
  130.          this.localName = this.site.getFile();
  131.          if (this.crawlerDepth < 1) {
  132.             this.isDepthValid = false;
  133.          } else {
  134.             this.setTotalContentLength(0);
  135.             if (this.getTotalContentLength() <= this.maxSize) {
  136.                this.startCrawler(this.localName);
  137.             }
  138.          }
  139.       } catch (Exception var6) {
  140.          printException(var6, "HTMLCrawler.run");
  141.       } finally {
  142.          if (!this.isStopUpdate && (!this.pagesParsed.isEmpty() || !this.pagesParsed.isEmpty() || !this.pagesParsed.isEmpty())) {
  143.             this.removeItems(this.cache);
  144.          }
  145.  
  146.          if (this.isStopUpdate && this.isCacheFull && (!this.pagesParsed.isEmpty() || !this.pagesParsed.isEmpty() || !this.pagesParsed.isEmpty())) {
  147.             this.removeItems(this.cache);
  148.          }
  149.  
  150.          this.updateStatus();
  151.          if (!this.pagesParsed.isEmpty() || !this.pagesParsed.isEmpty() || !this.pagesParsed.isEmpty()) {
  152.             this.writeCachedItemListToFile();
  153.          }
  154.  
  155.          this.clearTables();
  156.          this.parent.updateComplete(this.dataUpdateStatus);
  157.       }
  158.    }
  159.  
  160.    private void startCrawler(String var1) {
  161.       try {
  162.          for(int var2 = 1; var2 <= this.crawlerDepth; ++var2) {
  163.             if (var2 == 1) {
  164.                URL var8 = new URL(this.site, var1);
  165.                String var9 = var8.toString();
  166.                this.processLink(var9, var2, this.numLinksAtDepth, this.numImagesAtDepth, this.numResourcesAtDepth, this.resourcesCached, this.robotExclusionList);
  167.                this.addLinksToDepthTable(this.numLinksAtDepth, var2);
  168.                this.addImagesToDepthTable(this.numImagesAtDepth, var2);
  169.                this.addResourcesToDepthTable(this.numResourcesAtDepth, var2);
  170.                this.numLinks = 0;
  171.                this.numImages = 0;
  172.                this.numResources = 0;
  173.                this.numLinksAtDepth.clear();
  174.                this.numImagesAtDepth.clear();
  175.                this.numResourcesAtDepth.clear();
  176.             } else {
  177.                String var3 = this.composeLevelKey(var2 - 1);
  178.                Hashtable var4 = (Hashtable)this.linkedPagesList.get(var3);
  179.                if (var4 != null) {
  180.                   Enumeration var5 = var4.elements();
  181.  
  182.                   while(var5.hasMoreElements()) {
  183.                      String var6 = (String)var5.nextElement();
  184.                      this.processLink(var6, var2, this.numLinksAtDepth, this.numImagesAtDepth, this.numResourcesAtDepth, this.resourcesCached, this.robotExclusionList);
  185.                   }
  186.  
  187.                   this.addLinksToDepthTable(this.numLinksAtDepth, var2);
  188.                   this.addImagesToDepthTable(this.numImagesAtDepth, var2);
  189.                   this.addResourcesToDepthTable(this.numResourcesAtDepth, var2);
  190.                   this.numLinks = 0;
  191.                   this.numImages = 0;
  192.                   this.numResources = 0;
  193.                   this.numLinksAtDepth.clear();
  194.                   this.numImagesAtDepth.clear();
  195.                   this.numResourcesAtDepth.clear();
  196.                }
  197.             }
  198.          }
  199.  
  200.          if (this.maxSize - this.getTotalContentLength() <= 2000) {
  201.             this.isCacheFull = true;
  202.             this.stopUpdate();
  203.          }
  204.  
  205.          this.cacheImages(this.cache);
  206.          if (this.maxSize - this.getTotalContentLength() <= 2000) {
  207.             this.isCacheFull = true;
  208.             this.stopUpdate();
  209.          }
  210.  
  211.          this.cacheResources(this.cache);
  212.       } catch (Exception var7) {
  213.          printException(var7, "StartCrawler");
  214.       }
  215.    }
  216.  
  217.    private void processLink(String var1, int var2, Hashtable var3, Hashtable var4, Hashtable var5, Hashtable var6, Hashtable var7) {
  218.       try {
  219.          URL var8 = new URL(var1);
  220.          if (this.maxSize - this.getTotalContentLength() <= 2000) {
  221.             this.isCacheFull = true;
  222.             this.stopUpdate();
  223.          }
  224.  
  225.          Object var9 = this.pagesParsed.get(var1);
  226.          if (var9 != null) {
  227.             return;
  228.          }
  229.  
  230.          if (this.inSiteSpecified && !this.inSite(var8)) {
  231.             return;
  232.          }
  233.  
  234.          String var10 = this.getSite(var8);
  235.          Object var11 = var7.get(var10);
  236.          if (var11 == null) {
  237.             RobotExclusion var12 = new RobotExclusion(var10);
  238.             var7.put(var10, var12);
  239.          }
  240.  
  241.          RobotExclusion var17 = (RobotExclusion)var7.get(var10);
  242.          if (var17 != null) {
  243.             boolean var13 = var17.isRobotAllowed(var8, this.cache);
  244.             if (!var13) {
  245.                if (var2 == 1) {
  246.                   this.isSiteAllowed = false;
  247.                }
  248.  
  249.                return;
  250.             }
  251.          }
  252.  
  253.          PageScan var18 = new PageScan(this.site, var8, this.inSiteSpecified);
  254.          var18.fetchInfo(this.cache, var6, this.maxSize, this);
  255.          if (!this.isSiteValid && var2 == 1) {
  256.             return;
  257.          }
  258.  
  259.          if (!this.isURLRemoved) {
  260.             if (this.isSiteValid) {
  261.                this.pagesParsed.put(var1, var18);
  262.             }
  263.          } else {
  264.             this.isURLRemoved = false;
  265.          }
  266.  
  267.          this.isSiteValid = true;
  268.          if (var18.getLinks() != null) {
  269.             ++this.numLinks;
  270.             String var14 = this.composePositionKey(this.numLinks);
  271.             var3.put(var14, var18.getLinks());
  272.          }
  273.  
  274.          if (var18.getImages() != null) {
  275.             ++this.numImages;
  276.             String var19 = this.composePositionKey(this.numImages);
  277.             var4.put(var19, var18.getImages());
  278.          }
  279.  
  280.          if (var18.getResources() != null) {
  281.             ++this.numResources;
  282.             String var20 = this.composePositionKey(this.numResources);
  283.             var5.put(var20, var18.getResources());
  284.          }
  285.  
  286.          if (var18.getFrames() != null) {
  287.             Enumeration var21 = var18.getFrames().elements();
  288.  
  289.             while(var21.hasMoreElements()) {
  290.                String var15 = (String)var21.nextElement();
  291.                this.processLink(var15, var2, var3, var4, var5, var6, var7);
  292.             }
  293.          }
  294.  
  295.          if (var18.getLayers() != null) {
  296.             Enumeration var22 = var18.getLayers().elements();
  297.  
  298.             while(var22.hasMoreElements()) {
  299.                String var23 = (String)var22.nextElement();
  300.                this.processLink(var23, var2, var3, var4, var5, var6, var7);
  301.             }
  302.  
  303.             return;
  304.          }
  305.       } catch (Exception var16) {
  306.          printException(var16, "processLink");
  307.       }
  308.  
  309.    }
  310.  
  311.    public void setStopUpdate() {
  312.       this.isStopUpdate = true;
  313.       ((SiteData)this.parent).setStatus(0);
  314.    }
  315.  
  316.    public void stopUpdate() {
  317.       this.setStopUpdate();
  318.       ((Thread)this).stop();
  319.    }
  320.  
  321.    private String getSite(URL var1) {
  322.       String var2 = var1.toString();
  323.       String var3 = var1.getHost();
  324.       int var4 = var1.getPort();
  325.       String var5 = "";
  326.       int var6 = 0;
  327.       if (var4 != -1) {
  328.          Integer var8 = new Integer(var4);
  329.          String var9 = var8.toString();
  330.          int var12 = var9.length();
  331.          if (var12 > 0) {
  332.             var6 = var2.indexOf(var9);
  333.             var5 = var2.substring(0, var6 + var12);
  334.          }
  335.  
  336.          return var5;
  337.       } else {
  338.          int var7 = var3.length();
  339.          if (var7 > 0) {
  340.             var6 = var2.indexOf(var3);
  341.             var5 = var2.substring(0, var6 + var7);
  342.          }
  343.  
  344.          return var5;
  345.       }
  346.    }
  347.  
  348.    private boolean inSite(URL var1) {
  349.       String var2 = this.site.getHost();
  350.       String var3 = var1.getHost();
  351.       String var4 = "";
  352.       String var5 = "";
  353.       int var6 = var3.toLowerCase().indexOf(var2.toLowerCase());
  354.       if (var6 >= 0) {
  355.          return true;
  356.       } else {
  357.          var6 = var2.toLowerCase().indexOf(var3.toLowerCase());
  358.          if (var6 >= 0) {
  359.             return true;
  360.          } else {
  361.             int var7 = var2.indexOf(46);
  362.             int var8 = var3.indexOf(46);
  363.             if (var7 >= 0) {
  364.                var4 = var2.substring(var7);
  365.                if (var8 >= 0) {
  366.                   var5 = var3.substring(var8);
  367.                   return var4.equalsIgnoreCase(var5);
  368.                } else {
  369.                   return false;
  370.                }
  371.             } else {
  372.                return false;
  373.             }
  374.          }
  375.       }
  376.    }
  377.  
  378.    private String composeLevelKey(int var1) {
  379.       String var2 = "level" + var1;
  380.       return var2;
  381.    }
  382.  
  383.    private String composePositionKey(int var1) {
  384.       String var2 = "pos" + var1;
  385.       return var2;
  386.    }
  387.  
  388.    private void addLinksToDepthTable(Hashtable var1, int var2) {
  389.       try {
  390.          Hashtable var3 = new Hashtable();
  391.          Enumeration var4 = var1.elements();
  392.  
  393.          while(var4.hasMoreElements()) {
  394.             Vector var5 = (Vector)var4.nextElement();
  395.             Enumeration var6 = var5.elements();
  396.  
  397.             while(var6.hasMoreElements()) {
  398.                String var7 = (String)var6.nextElement();
  399.                boolean var8 = var3.containsKey(var7);
  400.                if (!var8) {
  401.                   var3.put(var7, var7);
  402.                }
  403.             }
  404.          }
  405.  
  406.          String var11 = this.composeLevelKey(var2);
  407.          this.linkedPagesList.put(var11, var3);
  408.          Object var10 = null;
  409.       } catch (Exception var9) {
  410.          printException(var9, "addLinksToDepthTable");
  411.       }
  412.    }
  413.  
  414.    private void addImagesToDepthTable(Hashtable var1, int var2) {
  415.       try {
  416.          Hashtable var3 = new Hashtable();
  417.          Enumeration var4 = var1.elements();
  418.  
  419.          while(var4.hasMoreElements()) {
  420.             Vector var5 = (Vector)var4.nextElement();
  421.             Enumeration var6 = var5.elements();
  422.  
  423.             while(var6.hasMoreElements()) {
  424.                String var7 = (String)var6.nextElement();
  425.                boolean var8 = var3.containsKey(var7);
  426.                if (!var8) {
  427.                   var3.put(var7, var7);
  428.                }
  429.             }
  430.          }
  431.  
  432.          String var11 = this.composeLevelKey(var2);
  433.          this.linkedImagesList.put(var11, var3);
  434.          Object var10 = null;
  435.       } catch (Exception var9) {
  436.          printException(var9, "addImagesToDepthTable");
  437.       }
  438.    }
  439.  
  440.    private void addResourcesToDepthTable(Hashtable var1, int var2) {
  441.       try {
  442.          Hashtable var3 = new Hashtable();
  443.          Enumeration var4 = var1.elements();
  444.  
  445.          while(var4.hasMoreElements()) {
  446.             Vector var5 = (Vector)var4.nextElement();
  447.             Enumeration var6 = var5.elements();
  448.  
  449.             while(var6.hasMoreElements()) {
  450.                String var7 = (String)var6.nextElement();
  451.                boolean var8 = var3.containsKey(var7);
  452.                if (!var8) {
  453.                   var3.put(var7, var7);
  454.                }
  455.             }
  456.          }
  457.  
  458.          String var11 = this.composeLevelKey(var2);
  459.          this.linkedResourcesList.put(var11, var3);
  460.          Object var10 = null;
  461.       } catch (Exception var9) {
  462.          printException(var9, "addResourcesToDepthTable");
  463.       }
  464.    }
  465.  
  466.    private void cacheImages(Cache var1) {
  467.       try {
  468.          label59:
  469.          for(int var2 = 1; var2 <= this.crawlerDepth; ++var2) {
  470.             String var3 = this.composeLevelKey(var2);
  471.             Hashtable var4 = (Hashtable)this.linkedImagesList.get(var3);
  472.             if (var4 != null) {
  473.                Enumeration var5 = var4.elements();
  474.  
  475.                while(true) {
  476.                   String var6;
  477.                   URL var7;
  478.                   String var8;
  479.                   byte var9;
  480.                   while(true) {
  481.                      while(true) {
  482.                         if (!var5.hasMoreElements()) {
  483.                            continue label59;
  484.                         }
  485.  
  486.                         var6 = (String)var5.nextElement();
  487.                         var7 = new URL(var6);
  488.                         var8 = null;
  489.                         var9 = 1;
  490.                         Object var10 = this.imagesCached.get(var6);
  491.                         if (var10 == null) {
  492.                            String var11 = this.getSite(var7);
  493.                            Object var12 = this.robotExclusionList.get(var11);
  494.                            if (var12 == null) {
  495.                               RobotExclusion var13 = new RobotExclusion(var11);
  496.                               this.robotExclusionList.put(var11, var13);
  497.                            }
  498.  
  499.                            RobotExclusion var20 = (RobotExclusion)this.robotExclusionList.get(var11);
  500.                            if (var20 == null) {
  501.                               break;
  502.                            }
  503.  
  504.                            boolean var14 = var20.isRobotAllowed(var7, var1);
  505.                            if (var14) {
  506.                               break;
  507.                            }
  508.                         }
  509.                      }
  510.  
  511.                      Object var21 = null;
  512.  
  513.                      try {
  514.                         CacheRequest var15 = new CacheRequest(var6);
  515.                         InputStream var22 = var1.getInputStream(var15);
  516.                         var8 = var15.getLastModified();
  517.                         int var16 = Integer.parseInt(var15.getContentLength());
  518.                         int var17 = this.getTotalContentLength();
  519.                         this.setTotalContentLength(var17 + var16);
  520.                         var17 = this.getTotalContentLength();
  521.                         if (var17 <= this.maxSize) {
  522.                            this.readAllInputStream(var22);
  523.                            this.closeInputStream(var22);
  524.                            break;
  525.                         }
  526.  
  527.                         this.setTotalContentLength(var17 - var16);
  528.                         this.closeInputStream(var22);
  529.                      } catch (Exception var18) {
  530.                         printException(var18, "cacheImages.cacheRequest");
  531.                         break;
  532.                      }
  533.                   }
  534.  
  535.                   LinkObject var23 = new LinkObject(var7, var8, var9);
  536.                   this.imagesCached.put(var6, var23);
  537.                   if (this.maxSize - this.getTotalContentLength() <= 2000) {
  538.                      this.isCacheFull = true;
  539.                      this.stopUpdate();
  540.                   }
  541.                }
  542.             }
  543.          }
  544.  
  545.       } catch (Exception var19) {
  546.          printException(var19, "cacheImages");
  547.       }
  548.    }
  549.  
  550.    private void cacheResources(Cache var1) {
  551.       try {
  552.          label59:
  553.          for(int var2 = 1; var2 <= this.crawlerDepth; ++var2) {
  554.             String var3 = this.composeLevelKey(var2);
  555.             Hashtable var4 = (Hashtable)this.linkedResourcesList.get(var3);
  556.             if (var4 != null) {
  557.                Enumeration var5 = var4.elements();
  558.  
  559.                while(true) {
  560.                   String var6;
  561.                   URL var7;
  562.                   String var8;
  563.                   byte var9;
  564.                   while(true) {
  565.                      while(true) {
  566.                         if (!var5.hasMoreElements()) {
  567.                            continue label59;
  568.                         }
  569.  
  570.                         var6 = (String)var5.nextElement();
  571.                         var7 = new URL(var6);
  572.                         var8 = null;
  573.                         var9 = 1;
  574.                         Object var10 = this.resourcesCached.get(var6);
  575.                         if (var10 == null) {
  576.                            String var11 = this.getSite(var7);
  577.                            Object var12 = this.robotExclusionList.get(var11);
  578.                            if (var12 == null) {
  579.                               RobotExclusion var13 = new RobotExclusion(var11);
  580.                               this.robotExclusionList.put(var11, var13);
  581.                            }
  582.  
  583.                            RobotExclusion var20 = (RobotExclusion)this.robotExclusionList.get(var11);
  584.                            if (var20 == null) {
  585.                               break;
  586.                            }
  587.  
  588.                            boolean var14 = var20.isRobotAllowed(var7, var1);
  589.                            if (var14) {
  590.                               break;
  591.                            }
  592.                         }
  593.                      }
  594.  
  595.                      Object var21 = null;
  596.  
  597.                      try {
  598.                         CacheRequest var15 = new CacheRequest(var6);
  599.                         InputStream var22 = var1.getInputStream(var15);
  600.                         var8 = var15.getLastModified();
  601.                         int var16 = Integer.parseInt(var15.getContentLength());
  602.                         int var17 = this.getTotalContentLength();
  603.                         this.setTotalContentLength(var17 + var16);
  604.                         var17 = this.getTotalContentLength();
  605.                         if (var17 <= this.maxSize) {
  606.                            this.readAllInputStream(var22);
  607.                            this.closeInputStream(var22);
  608.                            break;
  609.                         }
  610.  
  611.                         this.setTotalContentLength(var17 - var16);
  612.                         this.closeInputStream(var22);
  613.                      } catch (Exception var18) {
  614.                         printException(var18, "cacheResources.cacheRequest");
  615.                         break;
  616.                      }
  617.                   }
  618.  
  619.                   LinkObject var23 = new LinkObject(var7, var8, var9);
  620.                   this.resourcesCached.put(var6, var23);
  621.                   if (this.maxSize - this.getTotalContentLength() <= 2000) {
  622.                      this.isCacheFull = true;
  623.                      this.stopUpdate();
  624.                   }
  625.                }
  626.             }
  627.          }
  628.  
  629.       } catch (Exception var19) {
  630.          printException(var19, "cacheResources");
  631.       }
  632.    }
  633.  
  634.    public void closeInputStream(InputStream var1) {
  635.       try {
  636.          if (var1 != null) {
  637.             var1.close();
  638.             return;
  639.          }
  640.       } catch (IOException var2) {
  641.       }
  642.  
  643.    }
  644.  
  645.    public void readAllInputStream(InputStream var1) {
  646.       try {
  647.          while(var1.read(junk) >= 0) {
  648.          }
  649.  
  650.       } catch (IOException var2) {
  651.       }
  652.    }
  653.  
  654.    private void print(String var1) {
  655.       try {
  656.          if (this.isStopUpdate && !this.isCacheFull) {
  657.             this.rafOut.writeBytes(var1 + "\n");
  658.          } else {
  659.             this.psOut.println(var1);
  660.          }
  661.       } catch (IOException var2) {
  662.       }
  663.    }
  664.  
  665.    public static void printException(Exception var0, String var1) {
  666.    }
  667.  
  668.    private void removeItems(Cache var1) {
  669.       try {
  670.          File var2 = new File(this.localFileName + ".dat");
  671.          if (var2.exists() && var2.canRead()) {
  672.             long var3 = 0L;
  673.             boolean var5 = false;
  674.             String var7 = "";
  675.             int var9 = -1;
  676.             this.sourceStream = new RandomAccessFile(var2, "r");
  677.             this.sourceStream.seek(var3);
  678.  
  679.             String var6;
  680.             while((var6 = this.sourceStream.readLine()) != null) {
  681.                if (var6.startsWith("L>")) {
  682.                   var9 = var6.lastIndexOf(47);
  683.                   if (var9 + 1 >= 1) {
  684.                      String var8 = var6.substring(var9 + 1);
  685.                      var7 = var6.substring(2, var9);
  686.                      var5 = this.searchPagesList(var7, var8);
  687.                   }
  688.                } else if (var6.startsWith("I>")) {
  689.                   var9 = var6.lastIndexOf(47);
  690.                   if (var9 + 1 >= 1) {
  691.                      String var11 = var6.substring(var9 + 1);
  692.                      var7 = var6.substring(2, var9);
  693.                      var5 = this.searchImagesList(var7, var11);
  694.                   }
  695.                } else if (var6.startsWith("R>")) {
  696.                   var9 = var6.lastIndexOf(47);
  697.                   if (var9 + 1 >= 1) {
  698.                      String var12 = var6.substring(var9 + 1);
  699.                      var7 = var6.substring(2, var9);
  700.                      var5 = this.searchResourcesList(var7, var12);
  701.                   }
  702.                }
  703.  
  704.                if (!var5) {
  705.                   var1.remove(var7);
  706.                }
  707.             }
  708.  
  709.             if (this.sourceStream != null) {
  710.                this.sourceStream.close();
  711.                return;
  712.             }
  713.          }
  714.       } catch (Exception var10) {
  715.          printException(var10, "removeItems");
  716.       }
  717.  
  718.    }
  719.  
  720.    private boolean searchPagesList(String var1, String var2) {
  721.       try {
  722.          boolean var3 = false;
  723.          if (this.pagesParsed != null) {
  724.             Object var4 = this.pagesParsed.get(var1);
  725.             if (var4 != null) {
  726.                String var5 = ((PageScan)var4).getLastModified();
  727.                if (!var2.equals("null") && var5 != null) {
  728.                   Date var6 = new Date(var2);
  729.                   Date var7 = new Date(var5);
  730.                   var3 = var7.after(var6);
  731.                } else {
  732.                   var3 = true;
  733.                }
  734.  
  735.                if (var3) {
  736.                   ((PageScan)var4).setLinkStatus(2);
  737.                } else {
  738.                   ((PageScan)var4).setLinkStatus(3);
  739.                }
  740.  
  741.                return true;
  742.             }
  743.          }
  744.  
  745.          return false;
  746.       } catch (Exception var8) {
  747.          printException(var8, "searchPagesList");
  748.          return false;
  749.       }
  750.    }
  751.  
  752.    private boolean searchImagesList(String var1, String var2) {
  753.       try {
  754.          boolean var3 = false;
  755.          if (this.imagesCached != null) {
  756.             Object var4 = this.imagesCached.get(var1);
  757.             if (var4 != null) {
  758.                String var5 = ((LinkObject)var4).getLastModified();
  759.                if (!var2.equals("null") && var5 != null) {
  760.                   Date var6 = new Date(var2);
  761.                   Date var7 = new Date(var5);
  762.                   var3 = var7.after(var6);
  763.                } else {
  764.                   var3 = true;
  765.                }
  766.  
  767.                if (var3) {
  768.                   ((LinkObject)var4).setLinkStatus(2);
  769.                } else {
  770.                   ((LinkObject)var4).setLinkStatus(3);
  771.                }
  772.  
  773.                return true;
  774.             }
  775.          }
  776.  
  777.          return false;
  778.       } catch (Exception var8) {
  779.          printException(var8, "searchImagesList");
  780.          return false;
  781.       }
  782.    }
  783.  
  784.    private boolean searchResourcesList(String var1, String var2) {
  785.       try {
  786.          boolean var3 = false;
  787.          if (this.resourcesCached != null) {
  788.             Object var4 = this.resourcesCached.get(var1);
  789.             if (var4 != null) {
  790.                String var5 = ((LinkObject)var4).getLastModified();
  791.                if (!var2.equals("null") && var5 != null) {
  792.                   Date var6 = new Date(var2);
  793.                   Date var7 = new Date(var5);
  794.                   var3 = var7.after(var6);
  795.                } else {
  796.                   var3 = true;
  797.                }
  798.  
  799.                if (var3) {
  800.                   ((LinkObject)var4).setLinkStatus(2);
  801.                } else {
  802.                   ((LinkObject)var4).setLinkStatus(3);
  803.                }
  804.  
  805.                return true;
  806.             }
  807.          }
  808.  
  809.          return false;
  810.       } catch (Exception var8) {
  811.          printException(var8, "searchResourcesList");
  812.          return false;
  813.       }
  814.    }
  815.  
  816.    private void updateStatus() {
  817.       try {
  818.          if (this.isCacheFull) {
  819.             this.dataUpdateStatus = -1;
  820.             return;
  821.          }
  822.  
  823.          if (!this.isDepthValid) {
  824.             this.dataUpdateStatus = -2;
  825.             return;
  826.          }
  827.  
  828.          if (!this.isSiteAllowed) {
  829.             this.dataUpdateStatus = -3;
  830.             return;
  831.          }
  832.  
  833.          if (!this.isSiteValid) {
  834.             this.dataUpdateStatus = -4;
  835.             return;
  836.          }
  837.  
  838.          if (this.pagesParsed != null) {
  839.             Enumeration var1 = this.pagesParsed.keys();
  840.  
  841.             while(var1.hasMoreElements()) {
  842.                String var2 = (String)var1.nextElement();
  843.                PageScan var3 = (PageScan)this.pagesParsed.get(var2);
  844.                int var4 = var3.getLinkStatus();
  845.                if (var4 == 1 || var4 == 2) {
  846.                   this.dataUpdateStatus = 1;
  847.                   return;
  848.                }
  849.             }
  850.          }
  851.  
  852.          if (this.imagesCached != null) {
  853.             Enumeration var6 = this.imagesCached.keys();
  854.  
  855.             while(var6.hasMoreElements()) {
  856.                String var8 = (String)var6.nextElement();
  857.                LinkObject var10 = (LinkObject)this.imagesCached.get(var8);
  858.                int var12 = var10.getLinkStatus();
  859.                if (var12 == 1 || var12 == 2) {
  860.                   this.dataUpdateStatus = 1;
  861.                   return;
  862.                }
  863.             }
  864.          }
  865.  
  866.          if (this.resourcesCached != null) {
  867.             Enumeration var7 = this.resourcesCached.keys();
  868.  
  869.             while(var7.hasMoreElements()) {
  870.                String var9 = (String)var7.nextElement();
  871.                LinkObject var11 = (LinkObject)this.resourcesCached.get(var9);
  872.                int var13 = var11.getLinkStatus();
  873.                if (var13 == 1 || var13 == 2) {
  874.                   this.dataUpdateStatus = 1;
  875.                   return;
  876.                }
  877.             }
  878.  
  879.             return;
  880.          }
  881.       } catch (Exception var5) {
  882.          printException(var5, "updateStatus");
  883.       }
  884.  
  885.    }
  886.  
  887.    private void writeCachedItemListToFile() {
  888.       try {
  889.          File var3 = new File(this.localFileName + ".dat");
  890.          long var4 = 0L;
  891.          if (this.isStopUpdate && !this.isCacheFull) {
  892.             this.rafOut = new RandomAccessFile(var3, "rw");
  893.             var4 = this.rafOut.length();
  894.             this.rafOut.seek(var4);
  895.          } else {
  896.             this.psOut = new PrintStream(new FileOutputStream(var3));
  897.          }
  898.  
  899.          this.writeLinks();
  900.          this.writeImages();
  901.          this.writeResources();
  902.       } catch (Exception var11) {
  903.          printException(var11, "writeCachedItemListToFile");
  904.       } finally {
  905.          try {
  906.             if (this.isStopUpdate && !this.isCacheFull) {
  907.                if (this.rafOut != null) {
  908.                   this.rafOut.close();
  909.                }
  910.             } else if (this.psOut != null) {
  911.                this.psOut.close();
  912.             }
  913.          } catch (IOException var10) {
  914.          }
  915.  
  916.       }
  917.  
  918.    }
  919.  
  920.    private void writeLinks() {
  921.       try {
  922.          if (this.pagesParsed != null) {
  923.             Enumeration var1 = this.pagesParsed.keys();
  924.  
  925.             while(var1.hasMoreElements()) {
  926.                String var2 = (String)var1.nextElement();
  927.                PageScan var3 = (PageScan)this.pagesParsed.get(var2);
  928.                String var4 = var3.getLastModified();
  929.                this.print("L>" + var2 + "/" + var4);
  930.             }
  931.  
  932.             return;
  933.          }
  934.       } catch (Exception var5) {
  935.          printException(var5, "writeLinks");
  936.       }
  937.  
  938.    }
  939.  
  940.    private void writeImages() {
  941.       try {
  942.          if (this.imagesCached != null) {
  943.             Enumeration var1 = this.imagesCached.keys();
  944.  
  945.             while(var1.hasMoreElements()) {
  946.                String var2 = (String)var1.nextElement();
  947.                LinkObject var3 = (LinkObject)this.imagesCached.get(var2);
  948.                String var4 = var3.getLastModified();
  949.                this.print("I>" + var2 + "/" + var4);
  950.             }
  951.  
  952.             return;
  953.          }
  954.       } catch (Exception var5) {
  955.          printException(var5, "writeImages");
  956.       }
  957.  
  958.    }
  959.  
  960.    private void writeResources() {
  961.       try {
  962.          if (this.resourcesCached != null) {
  963.             Enumeration var1 = this.resourcesCached.keys();
  964.  
  965.             while(var1.hasMoreElements()) {
  966.                String var2 = (String)var1.nextElement();
  967.                LinkObject var3 = (LinkObject)this.resourcesCached.get(var2);
  968.                String var4 = var3.getLastModified();
  969.                this.print("R>" + var2 + "/" + var4);
  970.             }
  971.  
  972.             return;
  973.          }
  974.       } catch (Exception var5) {
  975.          printException(var5, "writeResources");
  976.       }
  977.  
  978.    }
  979.  
  980.    private void clearTables() {
  981.       try {
  982.          this.pagesParsed.clear();
  983.          this.pagesParsed = null;
  984.          this.imagesCached.clear();
  985.          this.imagesCached = null;
  986.          this.resourcesCached.clear();
  987.          this.resourcesCached = null;
  988.          this.linkedPagesList.clear();
  989.          this.linkedPagesList = null;
  990.          this.linkedImagesList.clear();
  991.          this.linkedImagesList = null;
  992.          this.linkedResourcesList.clear();
  993.          this.linkedResourcesList = null;
  994.          this.numLinksAtDepth.clear();
  995.          this.numLinksAtDepth = null;
  996.          this.numImagesAtDepth.clear();
  997.          this.numImagesAtDepth = null;
  998.          this.numResourcesAtDepth.clear();
  999.          this.numResourcesAtDepth = null;
  1000.       } catch (Exception var2) {
  1001.          printException(var2, "clearTables");
  1002.       }
  1003.    }
  1004. }
  1005.