Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- import os
- import sqlite3
- import base64
- # 32bit
- golden_ratio = 0x9e3779b9
- # 32bit
- def rotate_left_5(val):
- return ( (val << 5) % (1 << 32) ) | (val >> 27)
- # 32bit
- def add_to_hash(hashVal, val):
- return (golden_ratio * (rotate_left_5(hashVal) ^ val)) % (1 << 32)
- # 64bit
- def hash_simple(url, len):
- hashVal = 0
- for i in range(len):
- hashVal = add_to_hash(hashVal, ord(url[i]))
- return hashVal
- # 64bit
- def url_hash(url, len):
- prefix = -1
- for i in range(len):
- if url[i] == ':':
- prefix = i
- break
- return ((((hash_simple(url, prefix) & 0x0000ffff) << 32) % (1 << 64)) + hash_simple(url, len)) % (1 << 64)
- def gen_guid():
- urlB64 = base64.urlsafe_b64encode(os.urandom(9))
- # omit padding
- return urlB64.replace(b'=', b'')
- # convert chrome timestamp
- def chrome_epoch(time):
- time = time // 1000000
- return time - 11644473600
- def ms_time(time):
- return time * 1000000
- if len(sys.argv) < 3:
- print(f'{sys.argv[0]}: from.sqlite to.sqlite')
- exit()
- edgeHist = sys.argv[1]
- # librewolf
- lwHist = sys.argv[2]
- lw = sqlite3.connect(lwHist)
- lwDb = lw.cursor()
- # fetch last id
- lastId = lwDb.execute("SELECT id FROM moz_places ORDER BY id DESC LIMIT 1").fetchone()[0]
- # fetch last origin_id
- lastOriginId = lwDb.execute("SELECT origin_id FROM moz_places ORDER BY origin_id DESC LIMIT 1").fetchone()[0]
- # fetch last visit id
- lastVisitId = lwDb.execute("SELECT id FROM moz_historyvisits ORDER BY id DESC LIMIT 1").fetchone()[0]
- edge = sqlite3.connect(edgeHist)
- edgeDb = edge.cursor()
- # fetch rows from edge history
- edgeRows = edgeDb.execute("SELECT url, title, visit_count, last_visit_time FROM urls ORDER BY id")
- # insert them into places.sqlite
- for row in edgeRows:
- lastId += 1
- lastOriginId += 1
- lastVisitId += 1
- urlHash = url_hash(row[0], len(row[0]))
- guid = gen_guid()
- unixTime = ms_time(chrome_epoch(row[3]))
- lwDb.execute("INSERT INTO moz_places (id, url, title, visit_count, last_visit_date, url_hash, guid, origin_id) \
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (lastId, row[0], row[1], row[2], unixTime, urlHash, guid, lastOriginId))
- lwDb.execute("INSERT INTO moz_historyvisits VALUES (?, ?, ?, ?, ?, ?)", (lastVisitId, 0, lastId, unixTime, 1, 0))
- lw.commit()
- lw.close()
- edge.close()
Add Comment
Please, Sign In to add comment