2022-05-13 17:48:19 +01:00
|
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
/*
|
|
|
|
* PolyMC - Minecraft Launcher
|
|
|
|
* Copyright (C) 2022 Lenny McLennington <lenny@sneed.church>
|
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, version 3.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
*
|
|
|
|
* This file incorporates work covered by the following copyright and
|
|
|
|
* permission notice:
|
|
|
|
*
|
|
|
|
* Copyright 2013-2021 MultiMC Contributors
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
|
|
|
|
2014-07-12 16:58:23 +01:00
|
|
|
#include "GuiUtil.h"
|
|
|
|
|
|
|
|
#include <QClipboard>
|
|
|
|
#include <QApplication>
|
2015-05-04 23:42:04 +01:00
|
|
|
#include <QFileDialog>
|
2022-06-12 11:22:48 +01:00
|
|
|
#include <QStandardPaths>
|
2014-07-12 16:58:23 +01:00
|
|
|
|
2021-11-22 02:55:16 +00:00
|
|
|
#include "ui/dialogs/ProgressDialog.h"
|
|
|
|
#include "ui/dialogs/CustomMessageBox.h"
|
2015-02-09 00:51:14 +00:00
|
|
|
#include "net/PasteUpload.h"
|
2014-07-12 16:58:23 +01:00
|
|
|
|
2021-11-20 15:22:22 +00:00
|
|
|
#include "Application.h"
|
2015-05-04 23:42:04 +01:00
|
|
|
#include <settings/SettingsObject.h>
|
2016-01-05 06:32:52 +00:00
|
|
|
#include <DesktopServices.h>
|
2015-10-01 23:12:53 +01:00
|
|
|
#include <BuildConfig.h>
|
2015-05-04 23:42:04 +01:00
|
|
|
|
2016-01-20 02:10:02 +00:00
|
|
|
QString GuiUtil::uploadPaste(const QString &text, QWidget *parentWidget)
|
2014-07-12 16:58:23 +01:00
|
|
|
{
|
2018-07-15 13:51:05 +01:00
|
|
|
ProgressDialog dialog(parentWidget);
|
2022-05-13 17:48:19 +01:00
|
|
|
auto pasteTypeSetting = static_cast<PasteUpload::PasteType>(APPLICATION->settings()->get("PastebinType").toInt());
|
2022-05-11 21:44:06 +01:00
|
|
|
auto pasteCustomAPIBaseSetting = APPLICATION->settings()->get("PastebinCustomAPIBase").toString();
|
|
|
|
std::unique_ptr<PasteUpload> paste(new PasteUpload(parentWidget, text, pasteCustomAPIBaseSetting, pasteTypeSetting));
|
2018-07-15 13:51:05 +01:00
|
|
|
|
|
|
|
dialog.execWithTask(paste.get());
|
|
|
|
if (!paste->wasSuccessful())
|
|
|
|
{
|
2021-11-22 02:55:16 +00:00
|
|
|
CustomMessageBox::selectable(
|
|
|
|
parentWidget,
|
|
|
|
QObject::tr("Upload failed"),
|
|
|
|
paste->failReason(),
|
|
|
|
QMessageBox::Critical
|
|
|
|
)->exec();
|
2018-07-15 13:51:05 +01:00
|
|
|
return QString();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
const QString link = paste->pasteLink();
|
|
|
|
setClipboardText(link);
|
|
|
|
CustomMessageBox::selectable(
|
|
|
|
parentWidget, QObject::tr("Upload finished"),
|
|
|
|
QObject::tr("The <a href=\"%1\">link to the uploaded log</a> has been placed in your clipboard.").arg(link),
|
|
|
|
QMessageBox::Information)->exec();
|
|
|
|
return link;
|
|
|
|
}
|
2014-07-12 16:58:23 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void GuiUtil::setClipboardText(const QString &text)
|
|
|
|
{
|
2018-07-15 13:51:05 +01:00
|
|
|
QApplication::clipboard()->setText(text);
|
2014-07-12 16:58:23 +01:00
|
|
|
}
|
2015-05-04 23:42:04 +01:00
|
|
|
|
2017-08-06 23:46:29 +01:00
|
|
|
static QStringList BrowseForFileInternal(QString context, QString caption, QString filter, QString defaultPath, QWidget *parentWidget, bool single)
|
2015-05-04 23:42:04 +01:00
|
|
|
{
|
2018-07-15 13:51:05 +01:00
|
|
|
static QMap<QString, QString> savedPaths;
|
|
|
|
|
|
|
|
QFileDialog w(parentWidget, caption);
|
|
|
|
QSet<QString> locations;
|
|
|
|
auto f = [&](QStandardPaths::StandardLocation l)
|
|
|
|
{
|
|
|
|
QString location = QStandardPaths::writableLocation(l);
|
|
|
|
QFileInfo finfo(location);
|
2021-11-22 02:55:16 +00:00
|
|
|
if (!finfo.exists()) {
|
2018-07-15 13:51:05 +01:00
|
|
|
return;
|
2021-11-22 02:55:16 +00:00
|
|
|
}
|
2018-07-15 13:51:05 +01:00
|
|
|
locations.insert(location);
|
|
|
|
};
|
|
|
|
f(QStandardPaths::DesktopLocation);
|
|
|
|
f(QStandardPaths::DocumentsLocation);
|
|
|
|
f(QStandardPaths::DownloadLocation);
|
|
|
|
f(QStandardPaths::HomeLocation);
|
|
|
|
QList<QUrl> urls;
|
|
|
|
for (auto location : locations)
|
|
|
|
{
|
|
|
|
urls.append(QUrl::fromLocalFile(location));
|
|
|
|
}
|
|
|
|
urls.append(QUrl::fromLocalFile(defaultPath));
|
|
|
|
|
|
|
|
w.setFileMode(single ? QFileDialog::ExistingFile : QFileDialog::ExistingFiles);
|
|
|
|
w.setAcceptMode(QFileDialog::AcceptOpen);
|
|
|
|
w.setNameFilter(filter);
|
|
|
|
|
|
|
|
QString pathToOpen;
|
|
|
|
if(savedPaths.contains(context))
|
|
|
|
{
|
|
|
|
pathToOpen = savedPaths[context];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
pathToOpen = defaultPath;
|
|
|
|
}
|
|
|
|
if(!pathToOpen.isEmpty())
|
|
|
|
{
|
|
|
|
QFileInfo finfo(pathToOpen);
|
|
|
|
if(finfo.exists() && finfo.isDir())
|
|
|
|
{
|
|
|
|
w.setDirectory(finfo.absoluteFilePath());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
w.setSidebarUrls(urls);
|
|
|
|
|
|
|
|
if (w.exec())
|
|
|
|
{
|
|
|
|
savedPaths[context] = w.directory().absolutePath();
|
|
|
|
return w.selectedFiles();
|
|
|
|
}
|
|
|
|
savedPaths[context] = w.directory().absolutePath();
|
|
|
|
return {};
|
2015-05-04 23:42:04 +01:00
|
|
|
}
|
2017-08-06 23:46:29 +01:00
|
|
|
|
|
|
|
QString GuiUtil::BrowseForFile(QString context, QString caption, QString filter, QString defaultPath, QWidget *parentWidget)
|
|
|
|
{
|
2018-07-15 13:51:05 +01:00
|
|
|
auto resultList = BrowseForFileInternal(context, caption, filter, defaultPath, parentWidget, true);
|
|
|
|
if(resultList.size())
|
|
|
|
{
|
|
|
|
return resultList[0];
|
|
|
|
}
|
|
|
|
return QString();
|
2017-08-06 23:46:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QStringList GuiUtil::BrowseForFiles(QString context, QString caption, QString filter, QString defaultPath, QWidget *parentWidget)
|
|
|
|
{
|
2018-07-15 13:51:05 +01:00
|
|
|
return BrowseForFileInternal(context, caption, filter, defaultPath, parentWidget, false);
|
2017-08-06 23:46:29 +01:00
|
|
|
}
|