6#include "events/roomevent.h"
7#include "events/filesourceinfo.h"
9#include <QtCore/QPromise>
10#include <QtCore/QFuture>
17namespace EventStatus {
21
22
23
24
25 enum Code : uint16_t {
41 using value_type = RoomEvent;
43 explicit EventItemBase(RoomEventPtr&& e) : evt(std::move(e))
48 const RoomEvent* event()
const {
return std::to_address(evt); }
49 const RoomEvent* get()
const {
return event(); }
50 template <EventClass<RoomEvent> EventT>
51 const EventT* viewAs()
const
53 return eventCast<
const EventT>(evt);
55 const RoomEventPtr& operator->()
const {
return evt; }
56 const RoomEvent& operator*()
const {
return *evt; }
59 RoomEventPtr replaceEvent(RoomEventPtr&& other)
61 return std::exchange(evt, std::move(other));
65 void setUserData(std::any userData) { data = std::move(userData); }
67 const std::any& userdata()
const {
return data; }
68 std::any& userData() {
return data; }
71 template <EventClass<RoomEvent> EventT>
74 return eventCast<EventT>(evt);
88 TimelineItem(RoomEventPtr&& e, index_t number)
89 : EventItemBase(std::move(e)), idx(number)
92 index_t index()
const {
return idx; }
100 using future_type = QFuture<std::reference_wrapper<
const RoomEvent>>;
102 explicit PendingEventItem(RoomEventPtr&& e) : EventItemBase(std::move(e))
104 _promise.setProgressRange(0, 5);
107 EventStatus::Code deliveryStatus()
const {
return _status; }
108 QDateTime lastUpdated()
const {
return _lastUpdated; }
109 QString annotation()
const {
return _annotation; }
111 void setDeparted() { setStatus(EventStatus::Departed); }
112 void setFileUploaded(
const FileSourceInfo &uploadedFileData);
113 void setReachedServer(
const QString& eventId)
115 setStatus(EventStatus::ReachedServer);
116 (*
this)->addId(eventId);
118 void setMerged(
const RoomEvent& intoEvent)
120 _promise.addResult(intoEvent);
123 void setSendingFailed(QString errorText)
125 setStatus(EventStatus::SendingFailed);
126 _annotation = std::move(errorText);
128 void resetStatus() { setStatus(EventStatus::Submitted); }
135 future_type whenMerged()
const {
return _promise.future(); }
140 EventStatus::Code _status = EventStatus::Submitted;
141 QDateTime _lastUpdated = QDateTime::currentDateTimeUtc();
143 QPromise<std::reference_wrapper<
const RoomEvent>> _promise;
145 void setStatus(EventStatus::Code status)
148 _lastUpdated = QDateTime::currentDateTimeUtc();
151 _promise.setProgressValue(_status);
155inline QDebug& operator<<(QDebug& d,
const TimelineItem& ti)
157 QDebugStateSaver dss(d);
158 d.nospace() <<
"(" << ti.index() <<
"|" << ti->id() <<
")";