tdesktop/Telegram/SourceFiles/export/view/export_view_content.cpp

109 lines
3 KiB
C++
Raw Normal View History

/*
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"
2018-06-19 19:31:30 +01:00
#include "layout.h"
namespace Export {
namespace View {
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 });
};
2018-06-19 19:31:30 +01:00
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:
2018-06-19 19:31:30 +01:00
pushMain(lang(lng_export_state_initializing));
break;
case Step::LeftChannelsList:
case Step::DialogsList:
2018-06-19 19:31:30 +01:00
pushMain(lang(lng_export_state_chats_list));
break;
case Step::PersonalInfo:
2018-06-19 19:31:30 +01:00
pushMain(lang(lng_export_option_info));
break;
case Step::Userpics:
2018-06-19 19:31:30 +01:00
pushMain(lang(lng_export_state_userpics));
pushBytes(
"userpic" + QString::number(state.entityIndex),
"Photo_" + QString::number(state.entityIndex + 1) + ".jpg");
break;
case Step::Contacts:
2018-06-19 19:31:30 +01:00
pushMain(lang(lng_export_option_contacts));
break;
case Step::Sessions:
2018-06-19 19:31:30 +01:00
pushMain(lang(lng_export_option_sessions));
break;
case Step::LeftChannels:
case Step::Dialogs:
2018-06-19 19:31:30 +01:00
pushMain(lang(lng_export_state_chats));
if (state.itemCount > 0) {
2018-06-19 19:31:30 +01:00
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));
}
2018-06-19 19:31:30 +01:00
pushBytes(
("file"
+ QString::number(state.entityIndex)
+ '_'
+ QString::number(state.itemIndex)),
state.bytesName);
break;
default: Unexpected("Step in ContentFromState.");
}
return result;
}
} // namespace View
} // namespace Export