tdlight/td/telegram/VideosManager.h
Andrea Cavalli 45e855f89d Remove most memory related features
I can't maintain anymore this amount of features while keeping the library constantly updated and without bugs. Every merge was taking me multiple hours of revisioning the code. I give up.
From this commit onwards TDLight will only have small useful customizations that are easy to maintain.
Now the people relying on the OptimizeMemory method can restart the session every N hours to free up the memory.
The real way to keep a low memory usage must involve a huge refactoring to allow the unloading of the caches into the sqlite database, similar to what's already happening with messages data. Only Levlam has the ability to implement this without needing to merge the upstream everytime.
2021-09-25 22:11:42 +02:00

94 lines
2.8 KiB
C++

//
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2021
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#pragma once
#include "td/telegram/td_api.h"
#include "td/telegram/telegram_api.h"
#include "td/telegram/files/FileId.h"
#include "td/telegram/Photo.h"
#include "td/telegram/SecretInputMedia.h"
#include "td/utils/buffer.h"
#include "td/utils/common.h"
#include <unordered_map>
namespace td {
class Td;
class VideosManager {
public:
explicit VideosManager(Td *td);
void memory_stats(vector<string> &output);
int32 get_video_duration(FileId file_id) const;
tl_object_ptr<td_api::video> get_video_object(FileId file_id) const;
void create_video(FileId file_id, string minithumbnail, PhotoSize thumbnail, AnimationSize animated_thumbnail,
bool has_stickers, vector<FileId> &&sticker_file_ids, string file_name, string mime_type,
int32 duration, Dimensions dimensions, bool supports_streaming, bool replace);
tl_object_ptr<telegram_api::InputMedia> get_input_media(FileId file_id,
tl_object_ptr<telegram_api::InputFile> input_file,
tl_object_ptr<telegram_api::InputFile> input_thumbnail,
int32 ttl) const;
SecretInputMedia get_secret_input_media(FileId video_file_id,
tl_object_ptr<telegram_api::InputEncryptedFile> input_file,
const string &caption, BufferSlice thumbnail) const;
FileId get_video_thumbnail_file_id(FileId file_id) const;
FileId get_video_animated_thumbnail_file_id(FileId file_id) const;
void delete_video_thumbnail(FileId file_id);
FileId dup_video(FileId new_id, FileId old_id);
void merge_videos(FileId new_id, FileId old_id, bool can_delete_old);
template <class StorerT>
void store_video(FileId file_id, StorerT &storer) const;
template <class ParserT>
FileId parse_video(ParserT &parser);
string get_video_search_text(FileId file_id) const;
private:
class Video {
public:
string file_name;
string mime_type;
int32 duration = 0;
Dimensions dimensions;
string minithumbnail;
PhotoSize thumbnail;
AnimationSize animated_thumbnail;
bool supports_streaming = false;
bool has_stickers = false;
vector<FileId> sticker_file_ids;
FileId file_id;
};
const Video *get_video(FileId file_id) const;
FileId on_get_video(unique_ptr<Video> new_video, bool replace);
Td *td_;
std::unordered_map<FileId, unique_ptr<Video>, FileIdHash> videos_;
};
} // namespace td