#ifndef TRAVEL_HH #define TRAVEL_HH #include "date.hh" #include "location.hh" #include "rotation.hh" #include #include #include #include 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 create(std::shared_ptr logger, std::shared_ptr runner); virtual bool setup(Logger* logger, Config* config) = 0; virtual void start() = 0; virtual void reload() = 0; virtual void call_when_loaded(std::function 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