mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-09-03 07:56:03 +00:00
Suggest premium on transfer speed limiting.
This commit is contained in:
@@ -27,6 +27,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
#include "media/player/media_player_instance.h"
|
||||
#include "media/view/media_view_open_common.h"
|
||||
#include "data/data_document_resolver.h"
|
||||
#include "data/data_download_manager.h"
|
||||
#include "data/data_session.h"
|
||||
#include "data/data_file_origin.h"
|
||||
#include "data/data_folder.h"
|
||||
@@ -64,6 +65,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
#include "ui/boxes/confirm_box.h"
|
||||
#include "mainwidget.h"
|
||||
#include "main/main_account.h"
|
||||
#include "main/main_app_config.h"
|
||||
#include "main/main_domain.h"
|
||||
#include "main/main_session.h"
|
||||
#include "main/main_session_settings.h"
|
||||
@@ -74,6 +76,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
#include "api/api_blocked_peers.h"
|
||||
#include "support/support_helper.h"
|
||||
#include "storage/file_upload.h"
|
||||
#include "storage/download_manager_mtproto.h"
|
||||
#include "window/themes/window_theme.h"
|
||||
#include "window/window_peer_menu.h"
|
||||
#include "window/window_session_controller_link_info.h"
|
||||
@@ -90,20 +93,6 @@ namespace {
|
||||
constexpr auto kCustomThemesInMemory = 5;
|
||||
constexpr auto kMaxChatEntryHistorySize = 50;
|
||||
|
||||
[[nodiscard]] Ui::ChatThemeBubblesData PrepareBubblesData(
|
||||
const Data::CloudTheme &theme,
|
||||
Data::CloudThemeType type) {
|
||||
const auto i = theme.settings.find(type);
|
||||
return {
|
||||
.colors = (i != end(theme.settings)
|
||||
? i->second.outgoingMessagesColors
|
||||
: std::vector<QColor>()),
|
||||
.accent = (i != end(theme.settings)
|
||||
? i->second.outgoingAccentColor
|
||||
: std::optional<QColor>()),
|
||||
};
|
||||
}
|
||||
|
||||
class MainWindowShow final : public ChatHelpers::Show {
|
||||
public:
|
||||
explicit MainWindowShow(not_null<SessionController*> controller);
|
||||
@@ -144,6 +133,29 @@ private:
|
||||
|
||||
};
|
||||
|
||||
[[nodiscard]] Ui::ChatThemeBubblesData PrepareBubblesData(
|
||||
const Data::CloudTheme &theme,
|
||||
Data::CloudThemeType type) {
|
||||
const auto i = theme.settings.find(type);
|
||||
return {
|
||||
.colors = (i != end(theme.settings)
|
||||
? i->second.outgoingMessagesColors
|
||||
: std::vector<QColor>()),
|
||||
.accent = (i != end(theme.settings)
|
||||
? i->second.outgoingAccentColor
|
||||
: std::optional<QColor>()),
|
||||
};
|
||||
}
|
||||
|
||||
[[nodiscard]] bool DownloadingDocument(not_null<DocumentData*> document) {
|
||||
for (const auto id : Core::App().downloadManager().loadingList()) {
|
||||
if (id->object.document == document.get()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
MainWindowShow::MainWindowShow(not_null<SessionController*> controller)
|
||||
: _window(base::make_weak(controller)) {
|
||||
}
|
||||
@@ -1192,6 +1204,16 @@ SessionController::SessionController(
|
||||
}));
|
||||
}, _lifetime);
|
||||
|
||||
session->downloader().nonPremiumDelays(
|
||||
) | rpl::start_with_next([=](DocumentId id) {
|
||||
checkNonPremiumLimitToastDownload(id);
|
||||
}, _lifetime);
|
||||
|
||||
session->uploader().nonPremiumDelays(
|
||||
) | rpl::start_with_next([=](FullMsgId id) {
|
||||
checkNonPremiumLimitToastUpload(id);
|
||||
}, _lifetime);
|
||||
|
||||
session->addWindow(this);
|
||||
|
||||
crl::on_main(this, [=] {
|
||||
@@ -1200,6 +1222,50 @@ SessionController::SessionController(
|
||||
});
|
||||
}
|
||||
|
||||
bool SessionController::skipNonPremiumLimitToast(bool download) const {
|
||||
if (session().premium()) {
|
||||
return true;
|
||||
}
|
||||
const auto now = base::unixtime::now();
|
||||
const auto last = download
|
||||
? session().settings().lastNonPremiumLimitDownload()
|
||||
: session().settings().lastNonPremiumLimitUpload();
|
||||
const auto delay = session().account().appConfig().get<int>(
|
||||
u"upload_premium_speedup_notify_period"_q,
|
||||
3600);
|
||||
return (last && now < last + delay && now > last - delay);
|
||||
}
|
||||
|
||||
void SessionController::checkNonPremiumLimitToastDownload(DocumentId id) {
|
||||
if (skipNonPremiumLimitToast(true)) {
|
||||
return;
|
||||
}
|
||||
const auto document = session().data().document(id);
|
||||
const auto visible = session().data().queryDocumentVisibility(document)
|
||||
|| DownloadingDocument(document);
|
||||
if (!visible) {
|
||||
return;
|
||||
}
|
||||
content()->showNonPremiumLimitToast(true);
|
||||
const auto now = base::unixtime::now();
|
||||
session().settings().setLastNonPremiumLimitDownload(now);
|
||||
session().saveSettingsDelayed();
|
||||
}
|
||||
|
||||
void SessionController::checkNonPremiumLimitToastUpload(FullMsgId id) {
|
||||
if (skipNonPremiumLimitToast(false)) {
|
||||
return;
|
||||
} else if (const auto item = session().data().message(id)) {
|
||||
if (!session().data().queryItemVisibility(item)) {
|
||||
return;
|
||||
}
|
||||
content()->showNonPremiumLimitToast(false);
|
||||
const auto now = base::unixtime::now();
|
||||
session().settings().setLastNonPremiumLimitUpload(now);
|
||||
session().saveSettingsDelayed();
|
||||
}
|
||||
}
|
||||
|
||||
void SessionController::suggestArchiveAndMute() {
|
||||
const auto weak = base::make_weak(this);
|
||||
_window->show(Box([=](not_null<Ui::GenericBox*> box) {
|
||||
|
Reference in New Issue
Block a user