Changes in / [a3a092a:ef428d5]


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • core/java/src/net/i2p/util/EepGet.java

    ra3a092a ref428d5  
    2525import java.util.Locale;
    2626import java.util.Map;
     27import java.util.regex.Matcher;
     28import java.util.regex.Pattern;
    2729
    2830import gnu.getopt.Getopt;
     
    313315    }
    314316
     317    /**
     318     * Parse URL for a viable filename.
     319     *
     320     * @param   url  a URL giving the location of an online resource
     321     * @return       a filename to save the resource as on local filesystem
     322     */
    315323    public static String suggestName(String url) {
    316         int last = url.lastIndexOf('/');
    317         if ((last < 0) || (url.lastIndexOf('#') > last))
    318             last = url.lastIndexOf('#');
    319         if ((last < 0) || (url.lastIndexOf('?') > last))
    320             last = url.lastIndexOf('?');
    321         if ((last < 0) || (url.lastIndexOf('=') > last))
    322             last = url.lastIndexOf('=');
    323 
    324         String name = null;
    325         if (last >= 0)
    326             name = sanitize(url.substring(last+1));
    327         if ( (name != null) && (name.length() > 0) )
    328             return name;
    329         else
    330             return sanitize(url);
     324        URL nameURL = null;  // URL object
     325        String name;         // suggested name
     326
     327        try {
     328            nameURL = new URL(url);
     329        } catch (MalformedURLException e) {
     330            System.err.println("Please enter a properly formed URL.");
     331            System.exit(1);
     332        }
     333
     334        String path = nameURL.getPath();  // discard any URI queries
     335
     336        // if no file specified, eepget scrapes webpage - use domain as name
     337        Pattern slashes = Pattern.compile("/+");
     338        Matcher matcher = slashes.matcher(path);
     339        // if empty path or just /'s - nameURL lets multiple /'s through
     340        if (path.equals("") || matcher.matches()) {
     341            name = sanitize(nameURL.getAuthority());
     342        // if path specified
     343        } else {
     344            int last = path.lastIndexOf('/');
     345            // if last / not at end of string, use following string as filename
     346            if (last != path.length() - 1) {
     347                name = sanitize(path.substring(last + 1));
     348            // if there's a trailing / group look for previous / as trim point
     349            } else {
     350                int i = 1;
     351                int slash;
     352                while (true) {
     353                    slash = path.lastIndexOf('/', last - i);
     354                    if (slash != last - i) {
     355                        break;
     356                    }
     357                    i += 1;
     358                }
     359                name = sanitize(path.substring(slash + 1, path.length() - i));
     360            }
     361        }
     362        return name;
    331363    }
    332364
Note: See TracChangeset for help on using the changeset viewer.