gosuki/firefox.go

141 lines
3.4 KiB
Go
Raw Normal View History

2018-06-08 16:27:33 +00:00
package main
import (
"fmt"
2018-06-14 14:42:54 +00:00
"path"
)
2018-06-08 16:27:33 +00:00
var Firefox = BrowserPaths{
"places.sqlite",
"/home/spike/.mozilla/firefox/p1rrgord.default/",
}
const (
MozPlacesRootID = 1
MozPlacesTagsRootID = 4
MozPlacesMobileRootID = 6
)
2018-06-08 16:27:33 +00:00
type FFBrowser struct {
BaseBrowser //embedding
_places *DB
}
type FFTag struct {
id int
title string
2018-06-08 16:27:33 +00:00
}
func NewFFBrowser() IBrowser {
browser := &FFBrowser{}
browser.name = "firefox"
browser.bType = TFirefox
browser.baseDir = Firefox.BookmarkDir
browser.bkFile = Firefox.BookmarkFile
browser.Stats = &ParserStats{}
browser.NodeTree = &Node{Name: "root", Parent: nil}
// Across jobs buffer
browser.InitBuffer()
browser.SetupWatcher()
/*
*Run debouncer to avoid duplicate running of jobs
*when a batch of events is received
*/
//browser.eventsChan = make(chan fsnotify.Event, EventsChanLen)
//go debouncer(3000*time.Millisecond, browser.eventsChan, browser)
2018-06-08 16:27:33 +00:00
return browser
}
func (bw *FFBrowser) Watch() bool {
log.Debugf("<%s> NOT IMPLEMENTED! ", bw.name)
//if !bw.isWatching {
//go WatcherThread(bw)
//bw.isWatching = true
//return true
//}
2018-06-08 16:27:33 +00:00
//return false
2018-06-08 16:27:33 +00:00
return false
}
func (bw *FFBrowser) Load() {
bw.BaseBrowser.Load()
bw.Run()
}
func getTags(bw *FFBrowser) {
var tags []*FFTag
QGetTags := "SELECT id,title from moz_bookmarks WHERE parent = %d"
rows, err := bw._places.Handle.Query(fmt.Sprintf(QGetTags, MozPlacesTagsRootID))
logPanic(err)
for rows.Next() {
tag := &FFTag{}
err = rows.Scan(&tag.id, &tag.title)
logPanic(err)
tags = append(tags, tag)
}
log.Debug(len(tags))
//bookmarksToBufferFromTags(bw, tag)
}
func bookmarksToBufferFromTag(bw *FFBrowser, tag *FFTag) {
log.Debugf("db cons: %d", bw._places.Handle.Stats().OpenConnections)
//log.Debugf("bookmarks for %s", tag.title)
QGetBookmarksForTag := `SELECT moz_places.url, IFNULL(moz_places.title, '')
FROM moz_places
LEFT OUTER JOIN moz_bookmarks
ON moz_places.id = moz_bookmarks.fk
WHERE moz_bookmarks.parent = ?`
// WITH bookmarks AS (SELECT moz_places.url , moz_bookmarks.parent AS tagId FROM moz_places LEFT OUTER JOIN moz_bookmarks ON moz_places.id = moz_bookmarks.fk WHERE moz_bookmarks.parent IN (SELECT id FROM moz_bookmarks WHERE parent = 4 )) SELECT url, tagId, moz_bookmarks.title FROM bookmarks LEFT OUTER JOIN moz_bookmarks ON tagId = moz_bookmarks.id ORDER BY moz_bookmarks.title WHERE title = 'bitcoin'
rows, err := bw._places.Handle.Query(QGetBookmarksForTag, tag.id)
logPanic(err)
//log.Debugf("Query is %s", fmt.Sprintf(QGetBookmarksForTag, tag.id))
for rows.Next() {
var url string
var title string
err = rows.Scan(&url, &title)
logPanic(err)
//log.Debugf("%s ---> %s", tag.title, url)
}
//bk := new(Bookmark)
//bk.Tags = append(bk.Tags, tag.title)
}
2018-06-08 16:27:33 +00:00
func (bw *FFBrowser) Run() {
log.Debugf("<%s> start bookmark parsing", bw.name)
2018-06-08 16:27:33 +00:00
// TODO: Node tree is not used for now as the folder
// parsing is not implemented
2018-06-14 14:42:54 +00:00
// Rebuild node tree
// bw.NodeTree = &Node{Name: "root", Parent: nil}
2018-06-14 14:42:54 +00:00
// Open firefox sqlite db
bookmarkPath := path.Join(bw.baseDir, bw.bkFile)
placesDB := DB{}.New("Places", bookmarkPath)
placesDB.InitRO()
defer placesDB.Close()
bw._places = placesDB
2018-06-14 14:42:54 +00:00
// Start parsing from the root node (id = 1, type = 2) and down the tree
2018-06-14 14:42:54 +00:00
// First get all tags and register them as nodes under the root node
getTags(bw)
log.Debugf("<%s> finished parsing tags", bw.name)
2018-06-14 14:42:54 +00:00
2018-06-08 16:27:33 +00:00
}