import java.util.*; public class Bookmark { String title; String uri; HashSet<String> tags = new HashSet<String>(); public Bookmark(String title, String uri) { this.title = title; this.uri = uri; } /* * Assume: * Same URI = Same Bookmark */ @Override public boolean equals(Object o) { if (! (o instanceof Bookmark)) return false; Bookmark b = (Bookmark) o; if (this.uri.equals(b.uri) && this.title.equals(b.title)) { return true; } else { return false; } } /* * Print the bookmark in form: * Title[list, of, tags] */ @Override public String toString() { StringBuilder s = new StringBuilder(title).append(" ["); StringBuilder taglist = new StringBuilder(); for (String tag : tags) { if (taglist.length() != 0) { taglist.append(", "); } taglist.append(tag); } s.append(taglist).append("]"); return s.toString(); } }
import java.io.*; import java.util.*; import org.json.simple.*; import org.json.simple.parser.*; public class FirefoxToChrome { public static void main(String[] args) throws IOException,ParseException { if (args.length < 2) { System.out.println("USAGE:\njava FirefoxToChrome infile.json outfile.html"); System.exit(0); } /* * Read and parse file */ File inputFile = new File(args[0]); JSONObject placesRoot = (JSONObject) JSONValue.parseWithException(new FileReader(inputFile)); ArrayList<Bookmark> bookmarksList = new ArrayList<Bookmark>(); extractPlaces(placesRoot, bookmarksList); writeHTMLFile(args[1], bookmarksList); } public static void extractPlaces(JSONObject root, ArrayList<Bookmark> bookmarksList) { if (root.get("type").equals("text/x-moz-place-container")) { // recursion JSONArray rootChildren = (JSONArray) root.get("children"); if (rootChildren != null) { for (Object child : rootChildren) { extractPlaces((JSONObject)child, bookmarksList); } } } else if (root.get("type").equals("text/x-moz-place")) { JSONObject place = root; String title = (String)place.get("title"); String uri = (String)place.get("uri"); String tags = (String)place.get("tags"); // ignore firefox-specific folders etc. if (uri.startsWith("place:")) return; Bookmark currentBookmark = new Bookmark(title, uri); if (tags != null) { currentBookmark.tags.addAll(Arrays.asList(tags.split(","))); } if (! bookmarksList.contains(currentBookmark)) { // create a new Bookmark bookmarksList.add(currentBookmark); } else { // same bookmark. Merge tags into it. int index = bookmarksList.indexOf(currentBookmark); Bookmark oldBookmark = bookmarksList.get(index); oldBookmark.tags.addAll(currentBookmark.tags); } } } public static void writeHTMLFile(String filename, ArrayList<Bookmark> bookmarksList) throws IOException { PrintWriter pw = new PrintWriter(new FileWriter(new File(filename))); // header pw.println("<!DOCTYPE NETSCAPE-Bookmark-file-1>\n<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=UTF-8\">\n<TITLE>Bookmarks</TITLE>\n<H1>Bookmarks</H1>\n<DL><p>\n\t<DT><H3 ADD_DATE=\"0\" LAST_MODIFIED=\"0\" PERSONAL_TOOLBAR_FOLDER=\"true\">Bookmarks Bar</H3>\n\t<DL><p>\n\t</DL><p>"); // bookmarks for (Bookmark b : bookmarksList) { pw.println("\t<DT><A HREF=\"" + b.uri + "\" ADD_DATE=\"0\" LAST_VISIT=\"0\" LAST_MODIFIED=\"0\">" + b.toString() + "</A>"); } // footer pw.println("</DL><p>"); pw.flush(); pw.close(); } }
Du måste vara medlem för att kunna kommentera
Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!
Swish: 123 536 99 96 Bankgiro: 211-4106