50 lines
1.2 KiB
Python
50 lines
1.2 KiB
Python
"""
|
|
Parses active browser history by backing it up with [[http://github.com/seanbreckenridge/sqlite_backup][sqlite_backup]]
|
|
"""
|
|
|
|
REQUIRES = ["browserexport", "sqlite_backup"]
|
|
|
|
|
|
from my.config import browser as user_config
|
|
from my.core import Paths, dataclass
|
|
|
|
|
|
@dataclass
|
|
class config(user_config.active_browser):
|
|
# paths to sqlite database files which you use actively
|
|
# to read from. For example:
|
|
# from browserexport.browsers.all import Firefox
|
|
# export_path = Firefox.locate_database()
|
|
export_path: Paths
|
|
|
|
|
|
from pathlib import Path
|
|
from typing import Sequence, Iterator
|
|
|
|
from my.core import get_files, Stats
|
|
from browserexport.merge import read_visits, Visit
|
|
from sqlite_backup import sqlite_backup
|
|
|
|
from .common import _patch_browserexport_logs
|
|
|
|
_patch_browserexport_logs()
|
|
|
|
|
|
def inputs() -> Sequence[Path]:
|
|
return get_files(config.export_path)
|
|
|
|
|
|
def history() -> Iterator[Visit]:
|
|
for ad in inputs():
|
|
conn = sqlite_backup(ad)
|
|
assert conn is not None
|
|
try:
|
|
yield from read_visits(conn)
|
|
finally:
|
|
conn.close()
|
|
|
|
|
|
def stats() -> Stats:
|
|
from my.core import stat
|
|
|
|
return {**stat(history)}
|