2023-01-26 15:36:43 +00:00
|
|
|
/*
|
|
|
|
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
|
|
|
|
|
2023-02-01 17:29:19 +00:00
|
|
|
#include "spellcheck/spellcheck_types.h"
|
|
|
|
|
2023-01-26 15:36:43 +00:00
|
|
|
class History;
|
|
|
|
class HistoryItem;
|
|
|
|
|
|
|
|
namespace HistoryView {
|
|
|
|
|
|
|
|
class Element;
|
|
|
|
|
|
|
|
class TranslateTracker final {
|
|
|
|
public:
|
|
|
|
explicit TranslateTracker(not_null<History*> history);
|
|
|
|
~TranslateTracker();
|
|
|
|
|
|
|
|
[[nodiscard]] bool enoughForRecognition() const;
|
|
|
|
void startBunch();
|
2023-02-07 13:29:30 +00:00
|
|
|
bool add(not_null<Element*> view);
|
|
|
|
bool add(not_null<HistoryItem*> item);
|
2023-01-26 15:36:43 +00:00
|
|
|
void finishBunch();
|
|
|
|
|
2023-02-07 13:29:30 +00:00
|
|
|
void addBunchFromBlocks();
|
|
|
|
void addBunchFrom(const std::vector<not_null<Element*>> &views);
|
|
|
|
|
2023-01-26 15:36:43 +00:00
|
|
|
[[nodiscard]] rpl::producer<bool> trackingLanguage() const;
|
|
|
|
|
|
|
|
private:
|
|
|
|
using MaybeLanguageId = std::variant<QString, LanguageId>;
|
2023-02-01 17:29:19 +00:00
|
|
|
struct ItemForRecognize {
|
|
|
|
uint64 generation = 0;
|
|
|
|
MaybeLanguageId id;
|
|
|
|
};
|
2023-01-26 15:36:43 +00:00
|
|
|
struct ItemToRequest {
|
|
|
|
int length = 0;
|
|
|
|
};
|
|
|
|
|
|
|
|
void setup();
|
2023-02-07 13:29:30 +00:00
|
|
|
bool add(not_null<HistoryItem*> item, bool skipDependencies);
|
2023-01-26 15:36:43 +00:00
|
|
|
void recognizeCollected();
|
|
|
|
void trackSkipLanguages();
|
|
|
|
void checkRecognized();
|
|
|
|
void checkRecognized(const std::vector<LanguageId> &skip);
|
|
|
|
void applyLimit();
|
|
|
|
void requestSome();
|
|
|
|
void cancelToRequest();
|
|
|
|
void cancelSentRequest();
|
|
|
|
void switchTranslation(not_null<HistoryItem*> item, LanguageId id);
|
|
|
|
|
|
|
|
void requestDone(
|
|
|
|
LanguageId to,
|
|
|
|
const QVector<MTPTextWithEntities> &list);
|
|
|
|
|
|
|
|
const not_null<History*> _history;
|
|
|
|
rpl::variable<bool> _trackingLanguage = false;
|
|
|
|
base::flat_map<FullMsgId, ItemForRecognize> _itemsForRecognize;
|
|
|
|
uint64 _generation = 0;
|
2023-02-01 17:29:19 +00:00
|
|
|
LanguageId _bunchTranslatedTo;
|
2023-01-26 15:36:43 +00:00
|
|
|
int _limit = 0;
|
|
|
|
int _addedInBunch = -1;
|
|
|
|
bool _allLoaded = false;
|
|
|
|
|
|
|
|
base::flat_map<not_null<HistoryItem*>, LanguageId> _switchTranslations;
|
|
|
|
base::flat_map<FullMsgId, ItemToRequest> _itemsToRequest;
|
|
|
|
std::vector<FullMsgId> _requested;
|
|
|
|
mtpRequestId _requestId = 0;
|
|
|
|
|
|
|
|
rpl::lifetime _trackingLifetime;
|
|
|
|
rpl::lifetime _lifetime;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace HistoryView
|
|
|
|
|