summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/logic/InstanceList.cpp1
-rw-r--r--api/logic/InstanceList.h1
-rw-r--r--api/logic/settings/INIFile.cpp16
-rw-r--r--api/logic/settings/INIFile_test.cpp3
-rw-r--r--application/MainWindow.cpp8
-rw-r--r--application/MainWindow.h2
-rw-r--r--application/pages/instance/ScreenshotsPage.cpp32
7 files changed, 60 insertions, 3 deletions
diff --git a/api/logic/InstanceList.cpp b/api/logic/InstanceList.cpp
index 306365c8..c713b626 100644
--- a/api/logic/InstanceList.cpp
+++ b/api/logic/InstanceList.cpp
@@ -819,6 +819,7 @@ bool InstanceList::commitStagedInstance(const QString& path, const QString& inst
instanceSet.insert(instID);
m_groups.insert(groupName);
emit instancesChanged();
+ emit instanceSelectRequest(instID);
}
saveGroupList();
return true;
diff --git a/api/logic/InstanceList.h b/api/logic/InstanceList.h
index 50b44738..e0abd890 100644
--- a/api/logic/InstanceList.h
+++ b/api/logic/InstanceList.h
@@ -129,6 +129,7 @@ public:
signals:
void dataIsInvalid();
void instancesChanged();
+ void instanceSelectRequest(QString instanceId);
void groupsChanged(QSet<QString> groups);
public slots:
diff --git a/api/logic/settings/INIFile.cpp b/api/logic/settings/INIFile.cpp
index 42244131..ff6d5cf3 100644
--- a/api/logic/settings/INIFile.cpp
+++ b/api/logic/settings/INIFile.cpp
@@ -36,8 +36,10 @@ QString INIFile::unescape(QString orig)
{
if(c == 'n')
out += '\n';
- else if (c == 't')
+ else if(c == 't')
out += '\t';
+ else if(c == '#')
+ out += '#';
else
out += c;
prev = 0;
@@ -67,6 +69,8 @@ QString INIFile::escape(QString orig)
out += "\\t";
else if(c == '\\')
out += "\\\\";
+ else if(c == '#')
+ out += "\\#";
else
out += c;
}
@@ -120,7 +124,15 @@ bool INIFile::loadFile(QByteArray file)
{
QString &lineRaw = lines[i];
// Ignore comments.
- QString line = lineRaw.left(lineRaw.indexOf('#')).trimmed();
+ int commentIndex = 0;
+ QString line = lineRaw;
+ // Search for comments until no more escaped # are available
+ while((commentIndex = line.indexOf('#', commentIndex + 1)) != -1) {
+ if(commentIndex > 0 && line.at(commentIndex - 1) == '\\') {
+ continue;
+ }
+ line = line.left(lineRaw.indexOf('#')).trimmed();
+ }
int eqPos = line.indexOf('=');
if (eqPos == -1)
diff --git a/api/logic/settings/INIFile_test.cpp b/api/logic/settings/INIFile_test.cpp
index 45f70973..08c2155e 100644
--- a/api/logic/settings/INIFile_test.cpp
+++ b/api/logic/settings/INIFile_test.cpp
@@ -26,6 +26,7 @@ slots:
QTest::newRow("Plain text") << "Lorem ipsum dolor sit amet.";
QTest::newRow("Escape sequences") << "Lorem\n\t\n\\n\\tAAZ\nipsum dolor\n\nsit amet.";
QTest::newRow("Escape sequences 2") << "\"\n\n\"";
+ QTest::newRow("Hashtags") << "some data#something";
}
void test_Escape()
{
@@ -40,7 +41,7 @@ slots:
void test_SaveLoad()
{
QString a = "a";
- QString b = "a\nb\t\n\\\\\\C:\\Program files\\terrible\\name\\of something\\";
+ QString b = "a\nb\t\n\\\\\\C:\\Program files\\terrible\\name\\of something\\#thisIsNotAComment";
QString filename = "test_SaveLoad.ini";
// save
diff --git a/application/MainWindow.cpp b/application/MainWindow.cpp
index ca0b443d..00f95fca 100644
--- a/application/MainWindow.cpp
+++ b/application/MainWindow.cpp
@@ -702,6 +702,9 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new MainWindow
// model reset -> selection is invalid. All the instance pointers are wrong.
connect(MMC->instances().get(), &InstanceList::dataIsInvalid, this, &MainWindow::selectionBad);
+ // handle newly added instances
+ connect(MMC->instances().get(), &InstanceList::instanceSelectRequest, this, &MainWindow::instanceSelectRequest);
+
// When the global settings page closes, we want to know about it and update our state
connect(MMC, &MultiMC::globalSettingsClosed, this, &MainWindow::globalSettingsClosed);
@@ -1837,6 +1840,11 @@ void MainWindow::instanceChanged(const QModelIndex &current, const QModelIndex &
}
}
+void MainWindow::instanceSelectRequest(QString id)
+{
+ setSelectedInstanceById(id);
+}
+
void MainWindow::instanceDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
auto current = view->selectionModel()->currentIndex();
diff --git a/application/MainWindow.h b/application/MainWindow.h
index 7691d50e..69ea7c6b 100644
--- a/application/MainWindow.h
+++ b/application/MainWindow.h
@@ -152,6 +152,8 @@ private slots:
void instanceChanged(const QModelIndex &current, const QModelIndex &previous);
+ void instanceSelectRequest(QString id);
+
void instanceDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
void selectionBad();
diff --git a/application/pages/instance/ScreenshotsPage.cpp b/application/pages/instance/ScreenshotsPage.cpp
index 3420e86b..e61bf5c1 100644
--- a/application/pages/instance/ScreenshotsPage.cpp
+++ b/application/pages/instance/ScreenshotsPage.cpp
@@ -286,6 +286,38 @@ void ScreenshotsPage::on_uploadBtn_clicked()
QList<ScreenshotPtr> uploaded;
auto job = NetJobPtr(new NetJob("Screenshot Upload"));
+ if(selection.size() < 2)
+ {
+ auto item = selection.at(0);
+ auto info = m_model->fileInfo(item);
+ auto screenshot = std::make_shared<ScreenShot>(info);
+ job->addNetAction(ImgurUpload::make(screenshot));
+
+ m_uploadActive = true;
+ ProgressDialog dialog(this);
+ if(dialog.execWithTask(job.get()) != QDialog::Accepted)
+ {
+ CustomMessageBox::selectable(this, tr("Failed to upload screenshots!"),
+ tr("Unknown error"), QMessageBox::Warning)->exec();
+ }
+ else
+ {
+ auto link = screenshot->m_url;
+ QClipboard *clipboard = QApplication::clipboard();
+ clipboard->setText(link);
+ CustomMessageBox::selectable(
+ this,
+ tr("Upload finished"),
+ tr("The <a href=\"%1\">link to the uploaded screenshot</a> has been placed in your clipboard.")
+ .arg(link),
+ QMessageBox::Information
+ )->exec();
+ }
+
+ m_uploadActive = false;
+ return;
+ }
+
for (auto item : selection)
{
auto info = m_model->fileInfo(item);