99 lines
2.6 KiB
Python
Executable File
99 lines
2.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*- coding: UTF-8 -*-
|
|
#----------------------
|
|
|
|
import os
|
|
import sys
|
|
from HTMLParser import HTMLParser
|
|
try:
|
|
from MythTV import MythDB
|
|
from MythTV.database import DBDataWrite
|
|
except:
|
|
print 'ERROR: The python bindings are not installed'
|
|
sys.exit(-1)
|
|
|
|
class Bookmark( DBDataWrite ):
|
|
_table = 'websites'
|
|
_defaults = {'id':None, 'category':u'', 'name':u'', 'url':u''}
|
|
_schema_value = 'BrowserDBSchemaVer'
|
|
_schema_local = 1002
|
|
_schema_name = 'MythBrowser'
|
|
|
|
def create(self, data=None):
|
|
id = DBDataWrite.create(self, data)
|
|
self.wheredat = (id,)
|
|
self._pull()
|
|
return self
|
|
|
|
class Parser( HTMLParser ):
|
|
def __init__(self):
|
|
HTMLParser.__init__(self)
|
|
self.stack = []
|
|
def handle_starttag(self, tag, attrs):
|
|
if tag == 'h3':
|
|
# new category, push to stack
|
|
self.stack.append('h3')
|
|
elif not len(self.stack):
|
|
# no categories, refuse links
|
|
return
|
|
elif tag == 'a':
|
|
# new bookmark, push to stack
|
|
d = dict(attrs)
|
|
self.stack.append(d['href'])
|
|
self.stack.append('a')
|
|
def handle_endtag(self, tag):
|
|
if not len(self.stack):
|
|
# empty stack, do nothing
|
|
return
|
|
elif tag == 'dl':
|
|
# drop out of category, pop from stack
|
|
self.stack.pop()
|
|
def handle_data(self, data):
|
|
if not len(self.stack):
|
|
# empty stack, do nothing
|
|
return
|
|
elif self.stack[-1] == 'h3':
|
|
# new category name, swap on stack
|
|
self.stack[-1] = data
|
|
elif self.stack[-1] == 'a':
|
|
# new link name, swap on stack
|
|
self.stack[-1] = data
|
|
# create new bookmark in database
|
|
b = Bookmark(db=db)
|
|
b.name = self.stack.pop()
|
|
b.url = self.stack.pop()
|
|
b.category = self.stack[-1]
|
|
b.create()
|
|
|
|
# select file
|
|
bookmark_file = '~/bookmarks.html'
|
|
if len(sys.argv) == 2:
|
|
bookmark_file = sys.argv[1]
|
|
|
|
# check if file exists
|
|
if not os.access(os.path.expanduser(bookmark_file), os.F_OK):
|
|
print 'ERROR: bookmark file could not be found'
|
|
sys.exit(-1)
|
|
|
|
# connect to database
|
|
try:
|
|
db = MythDB()
|
|
except:
|
|
print 'ERROR: database could not be accessed'
|
|
sys.exit(-1)
|
|
|
|
# flush old entries and reset counter
|
|
c = db.cursor()
|
|
c.execute("""TRUNCATE TABLE websites""")
|
|
c.close()
|
|
|
|
# read in file
|
|
fp = open(os.path.expanduser(bookmark_file))
|
|
data = ''.join(fp.readlines())
|
|
fp.close()
|
|
|
|
# parse file for bookmarks
|
|
parser = Parser()
|
|
parser.feed(data)
|
|
|