306 lines
12 KiB
C++
306 lines
12 KiB
C++
//=============================================================================
|
|
// MuseScore
|
|
// Music Composition & Notation
|
|
//
|
|
// Copyright (C) 2014 Werner Schweer
|
|
//
|
|
// This program is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License version 2
|
|
// as published by the Free Software Foundation and appearing in
|
|
// the file LICENCE.GPL
|
|
//=============================================================================
|
|
|
|
#include "musescore.h"
|
|
#include "libmscore/score.h"
|
|
#include "libmscore/undo.h"
|
|
#include "uploadscoredialog.h"
|
|
|
|
namespace Ms {
|
|
|
|
//---------------------------------------------------------
|
|
// showUploadScore
|
|
//---------------------------------------------------------
|
|
|
|
void MuseScore::showUploadScoreDialog()
|
|
{
|
|
if (!currentScore())
|
|
return;
|
|
if (!currentScore()->sanityCheck(QString())) {
|
|
QMessageBox msgBox;
|
|
msgBox.setWindowTitle(QObject::tr("Upload Error"));
|
|
msgBox.setText(tr("This score cannot be saved online. Please fix the corrupted measures and try again."));
|
|
msgBox.setDetailedText(MScore::lastError);
|
|
msgBox.setTextFormat(Qt::RichText);
|
|
msgBox.setIcon(QMessageBox::Warning);
|
|
msgBox.setStandardButtons(QMessageBox::Ok);
|
|
msgBox.exec();
|
|
return;
|
|
}
|
|
if (uploadScoreDialog == nullptr) {
|
|
uploadScoreDialog = new UploadScoreDialog(_loginManager);
|
|
}
|
|
|
|
uploadScoreDialog->setTitle(currentScore()->title());
|
|
_loginManager->tryLogin();
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// UploadScoreDialog
|
|
//---------------------------------------------------------
|
|
|
|
UploadScoreDialog::UploadScoreDialog(LoginManager* loginManager)
|
|
: QDialog(0)
|
|
{
|
|
setObjectName("UploadScoreDialog");
|
|
setupUi(this);
|
|
setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
|
|
|
license->addItem(tr("All Rights reserved"), "all-rights-reserved");
|
|
license->addItem(tr("Creative Commons Attribution"), "cc-by");
|
|
license->addItem(tr("Creative Commons Attribution No Derivative Works"), "cc-by-nd");
|
|
license->addItem(tr("Creative Commons Attribution Share Alike"), "cc-by-sa");
|
|
license->addItem(tr("Creative Commons Attribution Noncommercial"), "cc-by-nc");
|
|
license->addItem(tr("Creative Commons Attribution Noncommercial Non Derivate Works"), "cc-by-nc-nd");
|
|
license->addItem(tr("Creative Commons Attribution Noncommercial Share Alike"), "cc-by-nc-sa");
|
|
license->addItem(tr("Creative Commons Copyright Waiver"), "cc-zero");
|
|
|
|
licenseHelp->setText(tr("%1What does this mean?%2")
|
|
.arg("<a href=\"http://redirect.musescore.com/help/license\">")
|
|
.arg("</a>"));
|
|
QFont font = licenseHelp->font();
|
|
font.setPointSize(8);
|
|
font.setItalic(true);
|
|
licenseHelp->setFont(font);
|
|
|
|
privateHelp->setText(tr("Respect the %1community guidelines%2. Only make your scores accessible to anyone with permission from the right holders.")
|
|
.arg("<a href=\"https://musescore.com/community-guidelines\">")
|
|
.arg("</a>"));
|
|
privateHelp->setFont(font);
|
|
|
|
tagsHelp->setText(tr("Use a comma to separate the tags"));
|
|
tagsHelp->setFont(font);
|
|
|
|
uploadAudioHelp->setFont(font);
|
|
QString urlHelp = QString("https://musescore.org/redirect/handbook?chapter=upload-score-audio&locale=%1&utm_source=desktop&utm_medium=save-online&utm_content=%2&utm_term=upload-score-audio&utm_campaign=MuseScore%3")
|
|
.arg(mscore->getLocaleISOCode())
|
|
.arg(mscore->revision().trimmed())
|
|
.arg(QString(VERSION));
|
|
uploadAudioHelp->setText(tr("Render the score with the current synth settings. %1More info%2.")
|
|
.arg("<a href=\"" + urlHelp + "\">")
|
|
.arg("</a>"));
|
|
lblChanges->setVisible(false);
|
|
changes->setVisible(false);
|
|
|
|
connect(updateExistingCb, SIGNAL(toggled(bool)), lblChanges, SLOT(setVisible(bool)));
|
|
connect(updateExistingCb, SIGNAL(toggled(bool)), changes, SLOT(setVisible(bool)));
|
|
|
|
connect(buttonBox, SIGNAL(clicked(QAbstractButton*)), SLOT(buttonBoxClicked(QAbstractButton*)));
|
|
chkSignoutOnExit->setVisible(false); // currently unused, so hide it
|
|
_loginManager = loginManager;
|
|
connect(_loginManager, SIGNAL(uploadSuccess(QString, QString, QString)), this, SLOT(uploadSuccess(QString, QString, QString)));
|
|
connect(_loginManager, SIGNAL(uploadError(QString)), this, SLOT(uploadError(QString)));
|
|
connect(_loginManager, SIGNAL(getScoreSuccess(QString, QString, bool, QString, QString, QString)), this, SLOT(onGetScoreSuccess(QString, QString, bool, QString, QString, QString)));
|
|
connect(_loginManager, SIGNAL(getScoreError(QString)), this, SLOT(onGetScoreError(QString)));
|
|
connect(_loginManager, SIGNAL(tryLoginSuccess()), this, SLOT(display()));
|
|
connect(_loginManager, SIGNAL(displaySuccess()), this, SLOT(displaySuccess()));
|
|
connect(btnSignout, SIGNAL(pressed()), this, SLOT(logout()));
|
|
|
|
MuseScore::restoreGeometry(this);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// buttonBoxClicked
|
|
//---------------------------------------------------------
|
|
|
|
void UploadScoreDialog::buttonBoxClicked(QAbstractButton* button)
|
|
{
|
|
QDialogButtonBox::StandardButton sb = buttonBox->standardButton(button);
|
|
if (sb == QDialogButtonBox::Save)
|
|
upload(updateExistingCb->isChecked() ? _nid : -1);
|
|
else
|
|
setVisible(false);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// upload
|
|
//---------------------------------------------------------
|
|
|
|
void UploadScoreDialog::upload(int nid)
|
|
{
|
|
if (title->text().trimmed().isEmpty()) {
|
|
QMessageBox::critical(this, tr("Missing title"), tr("Please provide a title"));
|
|
return;
|
|
}
|
|
Score* score = mscore->currentScore()->masterScore();
|
|
QString path = QDir::tempPath() + QString("/temp_%1.mscz").arg(qrand() % 100000);
|
|
if(mscore->saveAs(score, true, path, "mscz")) {
|
|
QString licenseString = license->currentData().toString();
|
|
QString privateString = cbPrivate->isChecked() ? "1" : "0";
|
|
_loginManager->upload(path, nid, title->text(), description->toPlainText(), privateString, licenseString, tags->text(), changes->toPlainText());
|
|
}
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// uploadSuccess
|
|
//---------------------------------------------------------
|
|
|
|
void UploadScoreDialog::uploadSuccess(const QString& url, const QString& nid, const QString& vid)
|
|
{
|
|
setVisible(false);
|
|
_url = url;
|
|
Score* score = mscore->currentScore()->masterScore();
|
|
QMap<QString, QString> metatags = score->metaTags();
|
|
if (metatags.value("source") != url) {
|
|
metatags.insert("source", url);
|
|
score->startCmd();
|
|
score->undo(new ChangeMetaTags(score, metatags));
|
|
score->endCmd();
|
|
}
|
|
if (uploadAudio->isChecked())
|
|
_loginManager->getMediaUrl(nid, vid, "mp3");
|
|
else
|
|
displaySuccess();
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// uploadSuccess
|
|
//---------------------------------------------------------
|
|
|
|
void UploadScoreDialog::displaySuccess()
|
|
{
|
|
QMessageBox::information(this,
|
|
tr("Success"),
|
|
tr("Finished! %1Go to my score%2.")
|
|
.arg("<a href=\"" + _url + "\">")
|
|
.arg("</a>"),
|
|
QMessageBox::Ok, QMessageBox::NoButton);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// uploadError
|
|
//---------------------------------------------------------
|
|
|
|
void UploadScoreDialog::uploadError(const QString& error)
|
|
{
|
|
QMessageBox::information(this,
|
|
tr("Error"),
|
|
error,
|
|
QMessageBox::Ok, QMessageBox::NoButton);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// showOrHideUploadAudio
|
|
//---------------------------------------------------------
|
|
|
|
void UploadScoreDialog::showOrHideUploadAudio()
|
|
{
|
|
uploadAudio->setEnabled(mscore->canSaveMp3());
|
|
bool v = !mscore->synthesizerState().isDefaultSynthSoundfont();
|
|
uploadAudio->setVisible(v);
|
|
uploadAudioHelp->setVisible(v);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// display
|
|
//---------------------------------------------------------
|
|
|
|
void UploadScoreDialog::display()
|
|
{
|
|
lblUsername->setText(_loginManager->userName());
|
|
QString source = mscore->currentScore()->masterScore()->metaTag("source");
|
|
if (!source.isEmpty()) {
|
|
QStringList sl = source.split("/");
|
|
if (sl.length() > 0) {
|
|
QString nidString = sl.last();
|
|
bool ok;
|
|
int nid = nidString.toInt(&ok);
|
|
if (ok) {
|
|
_nid = nid;
|
|
_loginManager->getScore(nid);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
showOrHideUploadAudio();
|
|
clear();
|
|
setVisible(true);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// onGetScoreSuccess
|
|
//---------------------------------------------------------
|
|
|
|
void UploadScoreDialog::onGetScoreSuccess(const QString &t, const QString &desc, bool priv, const QString& lic, const QString& tag, const QString& url)
|
|
{
|
|
// file with score info
|
|
title->setText(t);
|
|
description->setPlainText(desc);
|
|
cbPrivate->setChecked(priv);
|
|
// publicdomain used to be an option. Not anymore. Remap to CC0
|
|
QString lice = lic;
|
|
if (lice == "publicdomain")
|
|
lice = "cc-zero";
|
|
int lIndex = license->findData(lice);
|
|
if (lIndex < 0) lIndex = 0;
|
|
license->setCurrentIndex(lIndex);
|
|
tags->setText(tag);
|
|
changes->clear();
|
|
updateExistingCb->setChecked(true);
|
|
updateExistingCb->setVisible(true);
|
|
linkToScore->setText(tr("[%1Link%2]")
|
|
.arg("<a href=\"" + url + "\">")
|
|
.arg("</a>"));
|
|
showOrHideUploadAudio();
|
|
setVisible(true);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// onGetScoreError
|
|
//---------------------------------------------------------
|
|
|
|
void UploadScoreDialog::onGetScoreError(const QString& /*error*/)
|
|
{
|
|
clear();
|
|
setVisible(true);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// clear
|
|
//---------------------------------------------------------
|
|
|
|
void UploadScoreDialog::clear()
|
|
{
|
|
description->clear();
|
|
cbPrivate->setChecked(false);
|
|
license->setCurrentIndex(0);
|
|
tags->clear();
|
|
changes->clear();
|
|
updateExistingCb->setChecked(false);
|
|
updateExistingCb->setVisible(false);
|
|
linkToScore->setText("");
|
|
uploadAudio->setChecked(false);
|
|
_nid = -1;
|
|
_url = "";
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// logout
|
|
//---------------------------------------------------------
|
|
|
|
void UploadScoreDialog::logout()
|
|
{
|
|
_loginManager->logout();
|
|
setVisible(false);
|
|
}
|
|
|
|
//---------------------------------------------------------
|
|
// hideEvent
|
|
//---------------------------------------------------------
|
|
|
|
void UploadScoreDialog::hideEvent(QHideEvent* event)
|
|
{
|
|
MuseScore::saveGeometry(this);
|
|
QWidget::hideEvent(event);
|
|
}
|
|
}
|
|
|