diff options
-rw-r--r-- | api/logic/InstanceList.cpp | 3 | ||||
-rw-r--r-- | api/logic/InstanceList.h | 1 | ||||
-rw-r--r-- | api/logic/settings/INIFile.cpp | 16 | ||||
-rw-r--r-- | api/logic/settings/INIFile_test.cpp | 3 | ||||
-rw-r--r-- | application/MainWindow.cpp | 11 | ||||
-rw-r--r-- | application/MainWindow.h | 2 | ||||
-rw-r--r-- | application/pages/instance/ScreenshotsPage.cpp | 32 |
7 files changed, 63 insertions, 5 deletions
diff --git a/api/logic/InstanceList.cpp b/api/logic/InstanceList.cpp index afbebc25..c713b626 100644 --- a/api/logic/InstanceList.cpp +++ b/api/logic/InstanceList.cpp @@ -234,7 +234,7 @@ void InstanceList::deleteInstance(const InstanceId& id) auto inst = getInstanceById(id); if(!inst) { - qDebug() << "Cannot delete instance" << id << " No such instance is present."; + qDebug() << "Cannot delete instance" << id << ". No such instance is present (deleted externally?)."; return; } @@ -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 bec57c0d..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); @@ -1664,6 +1667,7 @@ void MainWindow::on_actionDeleteInstance_triggered() { return; } + auto id = m_selectedInstance->id(); auto response = CustomMessageBox::selectable( this, tr("CAREFUL!"), @@ -1674,7 +1678,7 @@ void MainWindow::on_actionDeleteInstance_triggered() )->exec(); if (response == QMessageBox::Yes) { - MMC->instances()->deleteInstance(m_selectedInstance->id()); + MMC->instances()->deleteInstance(id); } } @@ -1836,6 +1840,11 @@ void MainWindow::instanceChanged(const QModelIndex ¤t, 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 ¤t, 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); |