blob: c9cc8919f580b4644c2ae4a3396eae5b9d8b625b (
plain)
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
#ifndef TRAVEL_HH
#define TRAVEL_HH
#include "date.hh"
#include "location.hh"
#include "rotation.hh"
#include <filesystem>
#include <functional>
#include <memory>
#include <string_view>
class Config;
class Logger;
class TaskRunner;
class Travel {
public:
class Thumbnail {
public:
enum class ThumbType {
FILE,
EXIF,
};
virtual ~Thumbnail() = default;
virtual std::filesystem::path const& path() const = 0;
virtual ThumbType thumb_type() const = 0;
virtual std::string_view mime_type() const = 0;
virtual uint64_t size() const = 0;
protected:
Thumbnail() = default;
};
class Media {
public:
enum class Type {
IMAGE,
VIDEO,
};
virtual ~Media() = default;
virtual std::string_view id() const = 0;
virtual std::filesystem::path const& path() const = 0;
virtual Type type() const = 0;
virtual uint64_t width() const = 0;
virtual uint64_t height() const = 0;
virtual Location location() const = 0;
virtual Date date() const = 0;
// Only ever > 0.0 for videos
virtual double length() const = 0;
// Only ever != UNKNOWN for images
virtual Rotation rotation() const = 0;
// Returns nullptr if no thumbnail
virtual Thumbnail const* thumbnail() const = 0;
protected:
Media() = default;
};
class Day {
public:
virtual ~Day() = default;
// Returns 00:00:00 of the day in question.
virtual Date date() const = 0;
// Index in media array for first media for this day.
virtual size_t first() const = 0;
// Index in media array for the last media for this day.
// Days can't be empty, if there is just one media of the day then
// first() == last().
virtual size_t last() const = 0;
protected:
Day() = default;
};
class Trip {
public:
virtual ~Trip() = default;
virtual std::string_view id() const = 0;
virtual std::string_view title() const = 0;
virtual uint16_t year() const = 0;
virtual Location location() const = 0;
virtual uint64_t images() const = 0;
virtual uint64_t videos() const = 0;
virtual size_t media_count() const = 0;
virtual Media const& media(size_t i) const = 0;
virtual size_t day_count() const = 0;
virtual Day const& day(size_t i) const = 0;
protected:
Trip() = default;
};
virtual ~Travel() = default;
static std::unique_ptr<Travel> create(std::shared_ptr<Logger> logger,
std::shared_ptr<TaskRunner> runner);
virtual bool setup(Logger* logger, Config* config) = 0;
virtual void start() = 0;
virtual void reload() = 0;
virtual void call_when_loaded(std::function<void()> callback) = 0;
virtual size_t trips() const = 0;
virtual Trip const& trip(size_t i) const = 0;
protected:
Travel() = default;
Travel(Travel const&) = delete;
Travel& operator=(Travel const&) = delete;
};
#endif // TRAVEL_HH
|