134 lines
3.5 KiB
C++
134 lines
3.5 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
|
|
*/
|
|
#include "export/view/export_view_content.h"
|
|
|
|
#include "lang/lang_keys.h"
|
|
#include "layout.h"
|
|
|
|
namespace Export {
|
|
namespace View {
|
|
|
|
const QString Content::kDoneId = "done";
|
|
|
|
Content ContentFromState(const ProcessingState &state) {
|
|
using Step = ProcessingState::Step;
|
|
|
|
auto result = Content();
|
|
const auto push = [&](
|
|
const QString &id,
|
|
const QString &label,
|
|
const QString &info,
|
|
float64 progress) {
|
|
result.rows.push_back({ id, label, info, progress });
|
|
};
|
|
const auto pushMain = [&](const QString &label) {
|
|
const auto info = (state.entityCount > 0)
|
|
? (QString::number(state.entityIndex)
|
|
+ " / "
|
|
+ QString::number(state.entityCount))
|
|
: QString();
|
|
if (!state.substepsTotal) {
|
|
push("main", label, info, 0.);
|
|
return;
|
|
}
|
|
const auto substepsTotal = state.substepsTotal;
|
|
const auto step = static_cast<int>(state.step);
|
|
const auto done = state.substepsPassed;
|
|
const auto add = state.substepsNow;
|
|
const auto doneProgress = done / float64(substepsTotal);
|
|
const auto addProgress = (state.entityCount > 0)
|
|
? ((float64(add) * state.entityIndex)
|
|
/ (float64(substepsTotal) * state.entityCount))
|
|
: 0.;
|
|
push("main", label, info, doneProgress + addProgress);
|
|
};
|
|
const auto pushBytes = [&](const QString &id, const QString &label) {
|
|
if (!state.bytesCount) {
|
|
return;
|
|
}
|
|
const auto progress = state.bytesLoaded / float64(state.bytesCount);
|
|
const auto info = formatDownloadText(
|
|
state.bytesLoaded,
|
|
state.bytesCount);
|
|
push(id, label, info, progress);
|
|
};
|
|
switch (state.step) {
|
|
case Step::Initializing:
|
|
pushMain(lang(lng_export_state_initializing));
|
|
break;
|
|
case Step::LeftChannelsList:
|
|
case Step::DialogsList:
|
|
pushMain(lang(lng_export_state_chats_list));
|
|
break;
|
|
case Step::PersonalInfo:
|
|
pushMain(lang(lng_export_option_info));
|
|
break;
|
|
case Step::Userpics:
|
|
pushMain(lang(lng_export_state_userpics));
|
|
pushBytes(
|
|
"userpic" + QString::number(state.entityIndex),
|
|
state.bytesName);
|
|
break;
|
|
case Step::Contacts:
|
|
pushMain(lang(lng_export_option_contacts));
|
|
break;
|
|
case Step::Sessions:
|
|
pushMain(lang(lng_export_option_sessions));
|
|
break;
|
|
case Step::LeftChannels:
|
|
case Step::Dialogs:
|
|
pushMain(lang(lng_export_state_chats));
|
|
if (state.itemCount > 0) {
|
|
push(
|
|
"chat" + QString::number(state.entityIndex),
|
|
(state.entityName.isEmpty()
|
|
? lang(lng_deleted)
|
|
: state.entityName),
|
|
(QString::number(state.itemIndex)
|
|
+ " / "
|
|
+ QString::number(state.itemCount)),
|
|
state.itemIndex / float64(state.itemCount));
|
|
}
|
|
pushBytes(
|
|
("file"
|
|
+ QString::number(state.entityIndex)
|
|
+ '_'
|
|
+ QString::number(state.itemIndex)),
|
|
state.bytesName);
|
|
break;
|
|
default: Unexpected("Step in ContentFromState.");
|
|
}
|
|
while (result.rows.size() < 3) {
|
|
result.rows.push_back(Content::Row());
|
|
}
|
|
return result;
|
|
}
|
|
|
|
Content ContentFromState(const FinishedState &state) {
|
|
auto result = Content();
|
|
result.rows.push_back({
|
|
Content::kDoneId,
|
|
lang(lng_export_finished),
|
|
QString(),
|
|
1. });
|
|
result.rows.push_back({
|
|
Content::kDoneId,
|
|
lng_export_total_files(lt_count, QString::number(state.filesCount)),
|
|
QString(),
|
|
1. });
|
|
result.rows.push_back({
|
|
Content::kDoneId,
|
|
lng_export_total_size(lt_size, formatSizeText(state.bytesCount)),
|
|
QString(),
|
|
1. });
|
|
return result;
|
|
}
|
|
|
|
} // namespace View
|
|
} // namespace Export
|