Always export to subfolder of Downloads.

This commit is contained in:
John Preston 2018-09-19 15:56:08 +03:00
parent 00e4cfc345
commit 233a87a8bc
5 changed files with 29 additions and 12 deletions

View File

@ -70,6 +70,7 @@ struct Settings {
friend inline constexpr auto is_flag_type(Type) { return true; }; friend inline constexpr auto is_flag_type(Type) { return true; };
QString path; QString path;
bool forceSubPath = false;
Output::Format format = Output::Format(); Output::Format format = Output::Format();
Types types = DefaultTypes(); Types types = DefaultTypes();

View File

@ -23,12 +23,12 @@ QString NormalizePath(const Settings &settings) {
QDir folder(settings.path); QDir folder(settings.path);
const auto path = folder.absolutePath(); const auto path = folder.absolutePath();
auto result = path.endsWith('/') ? path : (path + '/'); auto result = path.endsWith('/') ? path : (path + '/');
if (!folder.exists()) { if (!folder.exists() && !settings.forceSubPath) {
return result; return result;
} }
const auto mode = QDir::AllEntries | QDir::NoDotAndDotDot; const auto mode = QDir::AllEntries | QDir::NoDotAndDotDot;
const auto list = folder.entryInfoList(mode); const auto list = folder.entryInfoList(mode);
if (list.isEmpty()) { if (list.isEmpty() && !settings.forceSubPath) {
return result; return result;
} }
const auto date = QDate::currentDate(); const auto date = QDate::currentDate();

View File

@ -102,13 +102,30 @@ void ClearSuggestStart() {
} }
} }
bool IsDefaultPath(const QString &path) {
const auto check = [](const QString &value) {
const auto result = value.endsWith('/')
? value.mid(0, value.size() - 1)
: value;
return (cPlatform() == dbipWindows) ? result.toLower() : result;
};
return (check(path) == check(psDownloadPath()));
}
void ResolveSettings(Settings &settings) {
if (settings.path.isEmpty()) {
settings.path = psDownloadPath();
settings.forceSubPath = true;
} else {
settings.forceSubPath = IsDefaultPath(settings.path);
}
}
PanelController::PanelController(not_null<ControllerWrap*> process) PanelController::PanelController(not_null<ControllerWrap*> process)
: _process(process) : _process(process)
, _settings(std::make_unique<Settings>(Local::ReadExportSettings())) , _settings(std::make_unique<Settings>(Local::ReadExportSettings()))
, _saveSettingsTimer([=] { saveSettings(); }) { , _saveSettingsTimer([=] { saveSettings(); }) {
if (_settings->path.isEmpty()) { ResolveSettings(*_settings);
_settings->path = psDownloadPath();
}
_process->state( _process->state(
) | rpl::start_with_next([=](State &&state) { ) | rpl::start_with_next([=](State &&state) {

View File

@ -27,6 +27,8 @@ namespace View {
Environment PrepareEnvironment(); Environment PrepareEnvironment();
QPointer<BoxContent> SuggestStart(); QPointer<BoxContent> SuggestStart();
void ClearSuggestStart(); void ClearSuggestStart();
bool IsDefaultPath(const QString &path);
void ResolveSettings(Settings &settings);
class Panel; class Panel;

View File

@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "export/view/export_view_settings.h" #include "export/view/export_view_settings.h"
#include "export/output/export_output_abstract.h" #include "export/output/export_output_abstract.h"
#include "export/view/export_view_panel_controller.h"
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "ui/widgets/checkbox.h" #include "ui/widgets/checkbox.h"
#include "ui/widgets/buttons.h" #include "ui/widgets/buttons.h"
@ -76,6 +77,7 @@ SettingsWidget::SettingsWidget(QWidget *parent, Settings data)
: RpWidget(parent) : RpWidget(parent)
, _singlePeerId(ReadPeerId(data.singlePeer)) , _singlePeerId(ReadPeerId(data.singlePeer))
, _internal_data(std::move(data)) { , _internal_data(std::move(data)) {
ResolveSettings(_internal_data);
setupContent(); setupContent();
} }
@ -240,13 +242,7 @@ void SettingsWidget::addLocationLabel(
return data.path; return data.path;
}) | rpl::distinct_until_changed( }) | rpl::distinct_until_changed(
) | rpl::map([](const QString &path) { ) | rpl::map([](const QString &path) {
const auto check = [](const QString &value) { const auto text = IsDefaultPath(path)
const auto result = value.endsWith('/')
? value.mid(0, value.size() - 1)
: value;
return (cPlatform() == dbipWindows) ? result.toLower() : result;
};
const auto text = (check(path) == check(psDownloadPath()))
? QString("Downloads/Telegram Desktop") ? QString("Downloads/Telegram Desktop")
: path; : path;
auto pathLink = TextWithEntities{ auto pathLink = TextWithEntities{
@ -562,6 +558,7 @@ void SettingsWidget::chooseFolder() {
const auto callback = [=](QString &&result) { const auto callback = [=](QString &&result) {
changeData([&](Settings &data) { changeData([&](Settings &data) {
data.path = std::move(result); data.path = std::move(result);
data.forceSubPath = IsDefaultPath(data.path);
}); });
}; };
FileDialog::GetFolder( FileDialog::GetFolder(