7 #include <condition_variable> 15 #include <camera/camera_plugin.h> 17 #include <nx/sdk/cloud_storage/helpers/data.h> 18 #include <nx/sdk/cloud_storage/helpers/device_archive.h> 19 #include <nx/sdk/cloud_storage/i_device_agent.h> 20 #include <nx/sdk/cloud_storage/i_media_data_packet.h> 21 #include <nx/sdk/i_device_info.h> 30 File(
const std::string& path);
33 template<
typename Container>
34 Container readAll()
const;
36 template<
typename Container>
37 void writeAll(
const Container& data,
bool replaceContents);
40 std::unique_ptr<FileImpl> m_fileImpl;
49 const std::shared_ptr<std::mutex>& mutex,
50 const std::string& path,
51 std::chrono::milliseconds startTime,
53 const char* opaqueMetadata);
58 void close(std::chrono::milliseconds duration);
62 std::shared_ptr<std::mutex> m_mutex;
63 std::unique_ptr<File> m_file;
64 const std::string m_path;
65 std::chrono::milliseconds m_startTime{};
66 std::vector<uint8_t> m_buffer;
75 std::vector<nx::sdk::cloud_storage::CodecInfoData> codecInfo()
const;
76 std::string opaqueMetadata()
const;
77 std::optional<nx::sdk::cloud_storage::MediaPacketData> getNextPacket()
const;
78 std::string name()
const;
82 int64_t* selectedPosition);
87 std::vector<uint8_t> m_fileData;
88 std::unique_ptr<MediaFileHeader> m_header;
90 mutable int m_current = 0;
96 std::map<int, std::vector<nx::sdk::cloud_storage::MediaChunk>> chunksPerStream;
102 std::vector<DeviceArchiveIndex> deviceArchiveIndexList;
111 std::function<void(nx::sdk::cloud_storage::MetadataType, nx::sdk::ErrorCode)>;
116 void setSaveHandler(SaveHandler handler);
118 void deleteBookmark(
const char*
id);
129 std::unique_ptr<WritableMediaFile> writableMediaFile(
130 const std::string& deviceId,
132 std::chrono::milliseconds timestamp,
134 const char* opaqueMetadata)
const;
136 std::unique_ptr<ReadableMediaFile> readableMediaFile(
137 const std::string& bucketUrl,
138 const std::string& deviceId,
141 int64_t durationMs)
const;
143 ArchiveIndex getArchive(std::optional<int64_t> startTime)
const;
146 nx::sdk::cloud_storage::TrackImageType type);
147 std::string fetchTrackImage(
const char* objectTrackId, nx::sdk::cloud_storage::TrackImageType type);
150 void flushMetadata(nx::sdk::cloud_storage::MetadataType type);
152 std::pair<std::string, int> bucketUrlAndId()
const;
155 std::string m_workDir;
156 std::shared_ptr<std::mutex> m_mutex{std::make_shared<std::mutex>()};
157 std::vector<nx::sdk::cloud_storage::Bookmark> m_cloudBookmarks;
158 std::vector<nx::sdk::cloud_storage::Motion> m_cloudMotion;
159 std::vector<nx::sdk::cloud_storage::ObjectTrack> m_cloudAnalytics;
160 std::queue<nx::sdk::cloud_storage::Bookmark> m_bookmarksToSend;
161 std::queue<nx::sdk::cloud_storage::Motion> m_motionToSend;
162 std::queue<nx::sdk::cloud_storage::ObjectTrack> m_analyticsToSend;
163 SaveHandler m_saveHandler;
164 std::thread m_workThread;
165 std::atomic<bool> m_needToStop{
false};
166 std::condition_variable m_cond;
167 bool m_needToFlushBookmarks{
false};
168 bool m_needToFlushMotion{
false};
169 bool m_needToFlushAnalytics{
false};
170 std::pair<std::string, int> m_bucketUrlToId;
173 std::string devicePath(
const std::string& deviceId)
const;
175 template<
typename Data>
176 std::queue<Data>* dataQueue();
178 template<
typename Data>
179 std::vector<Data>* cloudData();
181 template<
typename Data>
184 template<
typename Data>
185 nx::sdk::cloud_storage::MetadataType metadataType()
const;
187 template<
typename Data>
188 void processQueue(std::queue<Data>& dataQueue, std::unique_lock<std::mutex>& lock);
190 template<
typename Data>
191 nx::sdk::ErrorCode saveMetadataImpl(
const Data& data);
193 template<
typename Data>
194 void saveObject(
const Data& data,
const std::string& fileName);
196 template<
typename Data>
197 std::vector<Data> allObjects(
const std::string& fileName)
const;
199 template<
typename Data>
200 std::vector<Data> allObjectsNoLock(
const std::string& fileName)
const;
202 template<
typename Data>
203 std::optional<Data> oneObject(
const std::string& fileName)
const;
205 template<
typename DataList>
206 void flushToFile(
const DataList& data,
const std::string& fileName);
208 template<
typename Data>
209 std::vector<Data> load(
const std::string& fileName)
const;
211 std::vector<nx::kit::Json> loadListNoLock(
const std::string& fileName)
const;
213 std::string mediaFilePath(
214 const std::string& bucketUrl,
215 const std::string& deviceId,
217 std::chrono::milliseconds timestamp)
const;
219 std::string mediaFilePath(
220 const std::string& bucketUrl,
221 const std::string& deviceId,
224 int64_t durationMs)
const;
Definition: data_manager.h:107
Definition: data_manager.h:27
Definition: data_manager.h:100
Definition: data_manager.cpp:36
Definition: data_manager.h:94