-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTODO
83 lines (75 loc) · 3.74 KB
/
TODO
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
83
Design decisions:
- Photo library has to reside in a single director, but no specific folder structure inside is imposed
Reasons:
- easy to access photos even without the software
- easy to move library to a different location
- "importing" is as easy as copying the files to the correct location
- Arbitrary kinds of tags (e.g. people, places, but really anything user-defined), arbitrary tag values per kind
- values of tags are defined dynamically by assigning them for the first time
- Keep reference to raw file around
- Allow multiple versions of the same picture (original, post-processed), grouped together
- Fast and efficient to use
Main features:
Foto store:
✔ decide on a on-disk format @done
✔ enumerate all photos in store on startup @done
✔ read metadata
☐ EXIF @started
☐ XMP (?)
☐ write metadata (e.g. changed EXIF tags)
☐ search for duplicates (how to deal with duplicates?)
☐ allow moving photos around
☐ support RAW files
☐ link between images
Gallery-Widget:
✔ display photos fast @done
✔ nice scrolling @done
☐ manage selection of photos
☐ display extra information about photos (file path, etc.)
☐ as tooltip
☐ as overlay
☐ allow grouping of images (based on linking above)
- groups take one tile, can scroll through them
☐ show aggregate information
☐ time range of photos in view
☐ number of photos in current gallery
Slideshow:
✔ basic slideshow of photos in current gallery view @done(19-10-19 21:27)
☐ zoom/pan
☐ animated transitions
Explorer-widget:
Displays the various categories for filtering the photo library.
☐ list of current filters
☐ list of tag kinds
☐ list of tags of a tag kind
☐ group into albums
Difference to searching with filters is that albums are a static set of photos
☐ save tag filters (dynamic albums)
Albums:
☐ data structure for albums
- `PRAGMA foreign_keys = ON;`
- `CREATE TABLE albums (id INTEGER PRIMARY KEY, name TEXT NOT NULL, description TEXT NOT NULL)`
- `CREATE TABLE albums_x_photos (photo_id INTEGER NOT NULL, album_id INTEGER NOT NULL, PRIMARY KEY (photo_id, album_id), order INTEGER NOT NULL, FOREIGN KEY(photo_id) REFERENCES photos(id) ON DELETE CASCADE, FOREIGN KEY(album_id) REFERENCES albums(id) ON DELETE CASCADE)`
Metadata:
☐ read all EXIF things, cache in DB
☐ free-text comment for photos
- `ALTER TABLE photos ADD COLUMN comment TEXT`
Tagging:
☐ data structure for tags
- `PRAGMA foreign_keys = ON;`
- `CREATE TABLE tag_kinds (id INTEGER PRIMARY KEY, name TEXT NOT NULL)`
- `CREATE TABLE tags (id INTEGER PRIMARY KEY, name TEXT NOT NULL, kind INTEGER NOT NULL, FOREIGN KEY(kind) REFERENCES tag_kinds(id) ON DELETE CASCADE)`
- `CREATE TABLE tags_x_photos (photo_id INTEGER NOT NULL, tag_id INTEGER NOT NULL, PRIMARY KEY (photo_id, tag_id), FOREIGN KEY(photo_id) REFERENCES photos(id) ON DELETE CASCADE, FOREIGN KEY(tag_id) REFERENCES tags(id) ON DELETE CASCADE)`
☐ default tag kinds: people, location
☐ manage tag kinds
☐ allow assigning tags to pictures (auto-completion of existing values for the current tag kind)
☐ allow easy (from the usability perspective) and efficient (from the implementation perspective) renaming of tag kinds and values
Discovering:
A single text box input (but maybe more structured) with auto-completion
☐ search by tag
☐ search by time of day
☐ search by month/season
☐ search by absolute date
☐ search by geo-location (need to read this from EXIF)
☐ get database of geographic entities
☐ use spatial extension of sqlite