blob: ed0df870b4590bde6ab45005325250a2416969cc (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
import datetime
import os
from dataclasses import dataclass
from datetime import datetime as dt
from later.utils import hexdigest
@dataclass
class WatchLaterEntry:
name: str
path: str
mtime: dt
def format(self, title_map):
def format_time(time):
now = dt.now()
if time < now - datetime.timedelta(days=7):
return time.strftime("%b %d %Y")
return time.strftime("%b %d %H:%M")
output = [format_time(self.mtime), self.name]
if title := title_map.get(self.name):
output.append(f"# {title}")
return "\t".join(output)
class EntryManager:
def __init__(self, directory, title_map):
self.watch_later_dir = directory
self.title_map = title_map
def walk_entries(self):
def get_mtime(entry):
return entry.stat().st_mtime
with os.scandir(self.watch_later_dir) as entries:
for entry in sorted(entries, key=get_mtime):
if not entry.is_file():
continue
mtime = dt.fromtimestamp(get_mtime(entry))
with open(entry.path) as handle:
first = handle.readline().rstrip()
name = entry.name
if first.startswith("# "):
name = first.strip("# ")
if name == "redirect entry":
continue
self.title_map.mark_seen(name)
yield WatchLaterEntry(name=name, path=entry.path, mtime=mtime)
def print(self):
for entry in self.walk_entries():
print(entry.format(self.title_map))
def add(self, entry):
path = os.path.join(self.watch_later_dir, hexdigest(entry))
try:
with open(path, "x") as handle:
handle.write(f"# {entry}\n")
except FileExistsError:
pass
except OSError as e:
exit(e)
def delete(self, entry):
path = os.path.join(self.watch_later_dir, hexdigest(entry))
try:
os.remove(path)
except FileNotFoundError:
pass
except OSError as e:
exit(e)
|