|
@@ -0,0 +1,103 @@
|
|
|
+/*
|
|
|
+ * To change this license header, choose License Headers in Project Properties.
|
|
|
+ * To change this template file, choose Tools | Templates
|
|
|
+ * and open the template in the editor.
|
|
|
+ */
|
|
|
+package FFBookMarksToPathFile;
|
|
|
+
|
|
|
+import de.nplusc.izc.tools.IOtools.DBWriter;
|
|
|
+import de.nplusc.izc.tools.IOtools.FileTK;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.LinkedHashMap;
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ * @author iZc <nplusc.de>
|
|
|
+ */
|
|
|
+public class Converter
|
|
|
+{
|
|
|
+ static StringBuilder out = new StringBuilder();
|
|
|
+ public static void main(String[] args)
|
|
|
+ {
|
|
|
+ HashMap<String,ArrayList<String>> tree = new LinkedHashMap<>();
|
|
|
+ HashMap<String,String> fnames = new LinkedHashMap<>();
|
|
|
+ HashMap<String,ArrayList<String>> childrenMap = new LinkedHashMap<>();
|
|
|
+ DBWriter dbw = new DBWriter("", args[0], "", "", DBWriter.DBTYPE_SQLite);
|
|
|
+ String[][] bookmarksraw = dbw.queryTable("SELECT id,type,fk,parent,position,title from moz_bookmarks ORDER BY id");
|
|
|
+ for (String[] bookmarkData : bookmarksraw)
|
|
|
+ {
|
|
|
+ String key = bookmarkData[0];
|
|
|
+ if(bookmarkData[1].equals("2"))//folder
|
|
|
+ {
|
|
|
+ if(!bookmarkData[3].equals("0"))
|
|
|
+ {
|
|
|
+ String parent = bookmarkData[3];
|
|
|
+
|
|
|
+ if(!childrenMap.containsKey(parent))
|
|
|
+ {
|
|
|
+ childrenMap.put(parent, new ArrayList<>());
|
|
|
+ }
|
|
|
+ childrenMap.get(parent).add(key);
|
|
|
+ }
|
|
|
+ childrenMap.put(key, new ArrayList<>());
|
|
|
+ if(!tree.containsKey(key))
|
|
|
+ {
|
|
|
+ tree.put(key, new ArrayList<>());
|
|
|
+ }
|
|
|
+ fnames.put(key,bookmarkData[5]);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(!bookmarkData[1].equals("1"))
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String parent = bookmarkData[3];
|
|
|
+ String datafield=dbw.querySingleCell("SELECT url FROM moz_places where id = "+bookmarkData[2]);
|
|
|
+ if(!tree.containsKey(parent))
|
|
|
+ {
|
|
|
+ tree.put(parent, new ArrayList<>());
|
|
|
+ }
|
|
|
+ tree.get(parent).add(bookmarkData[5]+"=>"+datafield);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ System.out.println("");
|
|
|
+
|
|
|
+ String internalpath = "";
|
|
|
+ //1 = rootbookmark (hardcoded im firefoxxens)
|
|
|
+ recurseBookMarks("1", internalpath, tree, fnames, childrenMap);
|
|
|
+
|
|
|
+ String res = out.toString();
|
|
|
+ FileTK.writeFile(res, args[1]);
|
|
|
+ }
|
|
|
+ private static void recurseBookMarks(String folder,String pathPrefix,
|
|
|
+ HashMap<String,ArrayList<String>> entries,HashMap<String,String> folders,HashMap<String,ArrayList<String>> childrenFolders)
|
|
|
+ {
|
|
|
+ pathPrefix=pathPrefix+folders.get(folder)+"/";
|
|
|
+ out.append(pathPrefix).append("\n");
|
|
|
+ ArrayList<String> childFolders = childrenFolders.get(folder);
|
|
|
+ if(childFolders!=null)
|
|
|
+ {
|
|
|
+ childFolders.sort((String a,String b)-> folders.get(a).compareTo(folders.get(b)));
|
|
|
+ for (String childFolder : childFolders)
|
|
|
+ {
|
|
|
+ recurseBookMarks(childFolder, pathPrefix, entries, folders, childrenFolders);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ArrayList<String> etrs = entries.get(folder);
|
|
|
+ if(etrs==null)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ etrs.sort((String a,String b)->a.compareTo(b));
|
|
|
+ for (String etr : etrs)
|
|
|
+ {
|
|
|
+ out.append(pathPrefix).append(etr).append("\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //"D:\\loa\\000003\\books.txt"
|
|
|
+}
|