]> git.phdru.name Git - bookmarks_db.git/blob - bkmk2db.py
"BroytMann" => "Broytman".
[bookmarks_db.git] / bkmk2db.py
1 #! /usr/bin/env python
2 """
3    Convert Netscape Navigator's or Mozilla's bookmarks.html to a database
4
5    Written by Broytman. Copyright (C) 1997-2003 PhiloSoft Design
6 """
7
8
9 import sys, os
10 from getopt import getopt
11 from bkmk_parser import BkmkParser
12
13
14 def run():
15    optlist, args = getopt(sys.argv[1:], "is")
16
17    show_pbar = True
18    report_stats = 1
19
20    for _opt, _arg in optlist:
21       if _opt == '-i':
22          show_pbar = 0
23       if _opt == '-s':
24          report_stats = 0
25    try:
26       del _opt, _arg
27    except NameError:
28       pass
29
30    if args:
31       if len(args) > 1:
32          sys.stderr.write("bkmk2db: too many arguments\n")
33          sys.stderr.write("Usage: bkmk2db [-is] bookmarks.html\n")
34          sys.exit(1)
35
36       filename = args[0]
37
38    else:
39       filename = 'bookmarks.html' # good name both for DOS (bookmark.htm) and UNIX
40
41
42    if report_stats:
43       from storage import storage_name
44       sys.stdout.write("Converting %s to %s: " % (filename, storage_name))
45       sys.stdout.flush()
46
47    if show_pbar:
48       show_pbar = sys.stderr.isatty()
49
50    if show_pbar:
51       try:
52          from m_lib.pbar.tty_pbar import ttyProgressBar
53       except ImportError:
54          show_pbar = 0
55
56    if show_pbar:
57       try:
58          size = os.path.getsize(filename)
59       except:
60          print filename, ": no such file"
61          sys.exit(1)
62
63
64    if show_pbar:
65       pbar = ttyProgressBar(0, size)
66       lng = 0
67
68       # This is for DOS - it counts CRLF, which len() counts as 1 char!
69       if os.name == 'dos' or os.name == 'nt' :
70          dos_add = 1
71       else:
72          dos_add = 0 # UNIX' and Mac's len() counts CR or LF correct
73
74
75    infile = open(filename, 'r')
76    parser = BkmkParser()
77
78    line_no = 0
79    lng = 0
80    ok = 1
81
82    for line in infile:
83       if show_pbar:
84          lng = lng + len(line) + dos_add
85          pbar.display(lng)
86
87       #line = line.strip()
88       line_no = line_no + 1
89
90       try:
91          parser.feed(line)
92       except:
93          ok = 0
94          break
95
96    try:
97       parser.close()
98    except:
99       ok = 0
100
101    infile.close()
102
103    if show_pbar:
104       del pbar
105
106    if report_stats:
107       print "Ok"
108       print line_no, "lines proceed"
109       print parser.urls, "urls found"
110       print parser.objects, "objects created"
111
112    if ok:
113       from storage import storage
114       storage = storage()
115       storage.store(parser.root_folder)
116
117    else:
118       import traceback
119       traceback.print_exc()
120       sys.exit(1)
121
122
123 if __name__ == '__main__':
124    run()