102 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
	
		
			2.8 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/sender.h"
 | 
						|
#include "base/weak_ptr.h"
 | 
						|
 | 
						|
namespace MTP {
 | 
						|
class Instance;
 | 
						|
} // namespace MTP
 | 
						|
 | 
						|
namespace Lang {
 | 
						|
 | 
						|
class Instance;
 | 
						|
enum class Pack;
 | 
						|
struct Language;
 | 
						|
 | 
						|
Language ParseLanguage(const MTPLangPackLanguage &data);
 | 
						|
 | 
						|
class CloudManager : public base::has_weak_ptr {
 | 
						|
public:
 | 
						|
	explicit CloudManager(Instance &langpack);
 | 
						|
 | 
						|
	using Languages = std::vector<Language>;
 | 
						|
 | 
						|
	void requestLanguageList();
 | 
						|
	const Languages &languageList() const {
 | 
						|
		return _languages;
 | 
						|
	}
 | 
						|
	[[nodiscard]] rpl::producer<> languageListChanged() const;
 | 
						|
	[[nodiscard]] rpl::producer<> firstLanguageSuggestion() const;
 | 
						|
	void requestLangPackDifference(const QString &langId);
 | 
						|
	void applyLangPackDifference(const MTPLangPackDifference &difference);
 | 
						|
	void setCurrentVersions(int version, int baseVersion);
 | 
						|
 | 
						|
	void resetToDefault();
 | 
						|
	void switchWithWarning(const QString &id);
 | 
						|
	void switchToLanguage(const QString &id);
 | 
						|
	void switchToLanguage(const Language &data);
 | 
						|
	void switchToTestLanguage();
 | 
						|
	void setSuggestedLanguage(const QString &langCode);
 | 
						|
	QString suggestedLanguage() const {
 | 
						|
		return _suggestedLanguage;
 | 
						|
	}
 | 
						|
 | 
						|
private:
 | 
						|
	mtpRequestId &packRequestId(Pack pack);
 | 
						|
	mtpRequestId packRequestId(Pack pack) const;
 | 
						|
	Pack packTypeFromId(const QString &id) const;
 | 
						|
	void requestLangPackDifference(Pack pack);
 | 
						|
	bool canApplyWithoutRestart(const QString &id) const;
 | 
						|
	void performSwitchToCustom();
 | 
						|
	void performSwitch(const Language &data);
 | 
						|
	void performSwitchAndAddToRecent(const Language &data);
 | 
						|
	void performSwitchAndRestart(const Language &data);
 | 
						|
	void restartAfterSwitch();
 | 
						|
	void offerSwitchLangPack();
 | 
						|
	bool showOfferSwitchBox();
 | 
						|
	Language findOfferedLanguage() const;
 | 
						|
 | 
						|
	void requestLanguageAndSwitch(const QString &id, bool warning);
 | 
						|
	void applyLangPackData(Pack pack, const MTPDlangPackDifference &data);
 | 
						|
	void switchLangPackId(const Language &data);
 | 
						|
	void changeIdAndReInitConnection(const Language &data);
 | 
						|
 | 
						|
	void sendSwitchingToLanguageRequest();
 | 
						|
	void resendRequests();
 | 
						|
 | 
						|
	std::optional<MTP::Sender> _api;
 | 
						|
	Instance &_langpack;
 | 
						|
	Languages _languages;
 | 
						|
	mtpRequestId _langPackRequestId = 0;
 | 
						|
	mtpRequestId _langPackBaseRequestId = 0;
 | 
						|
	mtpRequestId _languagesRequestId = 0;
 | 
						|
 | 
						|
	QString _offerSwitchToId;
 | 
						|
	bool _restartAfterSwitch = false;
 | 
						|
 | 
						|
	QString _suggestedLanguage;
 | 
						|
	bool _languageWasSuggested = false;
 | 
						|
 | 
						|
	mtpRequestId _switchingToLanguageRequest = 0;
 | 
						|
	QString _switchingToLanguageId;
 | 
						|
	bool _switchingToLanguageWarning = false;
 | 
						|
 | 
						|
	mtpRequestId _getKeysForSwitchRequestId = 0;
 | 
						|
 | 
						|
	rpl::event_stream<> _languageListChanged;
 | 
						|
	rpl::event_stream<> _firstLanguageSuggestion;
 | 
						|
 | 
						|
	rpl::lifetime _lifetime;
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
CloudManager &CurrentCloudManager();
 | 
						|
 | 
						|
} // namespace Lang
 |