HPI/my/fbmessenger.py
2020-02-26 16:32:03 +01:00

50 lines
1.4 KiB
Python

"""
Module for Facebook Messenger messages
"""
from pathlib import Path
from shutil import rmtree
from tempfile import TemporaryDirectory
from typing import Iterator, Union
import mycfg.repos.fbmessengerexport.dal as messenger
from mycfg import paths
def _dump_helper(model: messenger.DAL, tdir: Path) -> None:
for t in model.iter_threads():
name = t.name.replace('/', '_') # meh..
path = tdir / (name + '.txt')
with path.open('w') as fo:
for m in t.iter_messages(order_by='-timestamp'):
# TODO would be nice to have usernames perhaps..
dts = m.dt.strftime('%Y-%m-%d %a %H:%M')
msg = f"{dts}: {m.text}"
print(msg, file=fo)
def get_model() -> messenger.DAL:
return messenger.DAL(paths.fbmessenger.export_db)
# TODO FIXME Result type?
def iter_all_messages() -> Iterator[messenger.Message]:
model = get_model()
for t in model.iter_threads():
yield from t.iter_messages()
def dump_chat_history(where: Union[Path, str]) -> None:
p = Path(where)
assert not p.exists() or p.is_dir()
model = get_model()
with TemporaryDirectory() as tdir:
td = Path(tdir)
_dump_helper(model, td)
if p.exists():
rmtree(p)
td.rename(p)
td.mkdir() # ugh, hacky way of preventing complaints from context manager