""" Phone calls and SMS messages """ # TODO extract SMS as well? I barely use them though.. from . import init from datetime import datetime from pathlib import Path from typing import NamedTuple, Iterator, Set import pytz from lxml import etree # type: ignore from .common import get_files from my.config import smscalls as config class Call(NamedTuple): dt: datetime duration_s: int who: str @property def summary(self) -> str: return f"talked with {self.who} for {self.duration_s} secs" def _extract_calls(path: Path) -> Iterator[Call]: tr = etree.parse(str(path)) for cxml in tr.findall('call'): # TODO we've got local tz herer, not sure if useful.. # ok, so readable date is local datetime, cahnging throughout the backup dt = pytz.utc.localize(datetime.utcfromtimestamp(int(cxml.get('date')) / 1000)) yield Call( dt=dt, duration_s=int(cxml.get('duration')), who=cxml.get('contact_name') # TODO number if contact is unavail?? # TODO type? must be missing/outgoing/incoming ) def calls() -> Iterator[Call]: files = get_files(config.export_path, glob='calls-*.xml') # TODO always replacing with the latter is good, we get better contact names?? emitted: Set[datetime] = set() for p in files: for c in _extract_calls(p): if c.dt in emitted: continue emitted.add(c.dt) yield c