Files
tdesktop/Telegram/SourceFiles/storage/storage_cloud_blob.h
allhaileris afb81b8278
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Close stale issues and PRs / stale (push) Successful in 13s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
init
2026-02-16 15:50:16 +03:00

116 lines
2.2 KiB
C++

/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#pragma once
#include "mtproto/dedicated_file_loader.h"
namespace tr {
template <typename ...>
struct phrase;
} // namespace tr
namespace Main {
class Session;
} // namespace Main
namespace Storage::CloudBlob {
constexpr auto kCloudLocationUsername = "tdhbcfiles"_cs;
struct Blob {
int id = 0;
int postId = 0;
int64 size = 0;
QString name;
};
struct Available {
int64 size = 0;
inline bool operator<(const Available &other) const {
return size < other.size;
}
inline bool operator==(const Available &other) const {
return size == other.size;
}
};
struct Ready {
inline bool operator<(const Ready &other) const {
return false;
}
inline bool operator==(const Ready &other) const {
return true;
}
};
struct Active {
inline bool operator<(const Active &other) const {
return false;
}
inline bool operator==(const Active &other) const {
return true;
}
};
struct Failed {
inline bool operator<(const Failed &other) const {
return false;
}
inline bool operator==(const Failed &other) const {
return true;
}
};
using Loading = MTP::DedicatedLoader::Progress;
using BlobState = std::variant<
Available,
Ready,
Active,
Failed,
Loading>;
bool UnpackBlob(
const QString &path,
const QString &folder,
Fn<bool(const QString &)> checkNameCallback);
QString StateDescription(const BlobState &state, tr::phrase<> activeText);
class BlobLoader : public QObject {
public:
BlobLoader(
QObject *parent,
not_null<Main::Session*> session,
int id,
MTP::DedicatedLoader::Location location,
const QString &folder,
int64 size);
int id() const;
rpl::producer<BlobState> state() const;
virtual void destroy() = 0;
virtual void unpack(const QString &path) = 0;
protected:
virtual void fail();
const QString _folder;
private:
void setImplementation(std::unique_ptr<MTP::DedicatedLoader> loader);
int _id = 0;
rpl::variable<BlobState> _state;
MTP::WeakInstance _mtproto;
std::unique_ptr<MTP::DedicatedLoader> _implementation;
};
} // namespace Storage::CloudBlob