Skip to content

Commit

Permalink
add support for file update on musescore.com
Browse files Browse the repository at this point in the history
  • Loading branch information
lasconic committed Nov 20, 2014
1 parent 3e73dc5 commit 08e2faa
Show file tree
Hide file tree
Showing 6 changed files with 219 additions and 29 deletions.
81 changes: 76 additions & 5 deletions mscore/loginmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ LoginManager::LoginManager(QObject* parent)
: QObject(parent)
{
_oauthManager = new KQOAuthManager(this);
connect(_oauthManager, SIGNAL(accessTokenReceived(QString,QString)),
this, SLOT(onAccessTokenReceived(QString,QString)));
connect(_oauthManager, SIGNAL(accessTokenReceived(QString, QString)),
this, SLOT(onAccessTokenReceived(QString, QString)));
connect(_oauthManager, SIGNAL(authorizedRequestDone()),
this, SLOT(onAuthorizedRequestDone()));
QByteArray ba;
Expand Down Expand Up @@ -250,27 +250,98 @@ void LoginManager::onGetUserRequestReady(QByteArray ba)
QJsonObject user = jsonResponse.object();
if (user.value("name") != QJsonValue::Undefined) {
_userName = user.value("name").toString();
_uid = user.value("id").toString().toInt();
emit getUserSuccess();
}
else {
emit getUserError(tr("Error while getting user info. Please try again"));
}
}
else {
else if (_oauthManager->lastError() != KQOAuthManager::NetworkError) {
emit getUserError(tr("Error while getting user info: %1").arg(_oauthManager->lastError()));
}

}

//---------------------------------------------------------
// getScore
//---------------------------------------------------------

void LoginManager::getScore(int nid)
{
//qDebug() << "getScore";
if (_accessToken.isEmpty() || _accessTokenSecret.isEmpty()) {
emit getScoreError("getScore - No token");
return;
}
KQOAuthRequest * oauthRequest = new KQOAuthRequest();
oauthRequest->initRequest(KQOAuthRequest::AuthorizedRequest, QUrl(QString("https://api.musescore.com/services/rest/score/%1.json").arg(nid)));
oauthRequest->setHttpMethod(KQOAuthRequest::GET);
oauthRequest->setConsumerKey(_consumerKey);
oauthRequest->setConsumerSecretKey(_consumerSecret);
oauthRequest->setToken(_accessToken);
oauthRequest->setTokenSecret(_accessTokenSecret);

connect(_oauthManager, SIGNAL(requestReady(QByteArray)),
this, SLOT(onGetScoreRequestReady(QByteArray)));

_oauthManager->executeRequest(oauthRequest);
}

//---------------------------------------------------------
// onGetUserRequestReady
//---------------------------------------------------------

void LoginManager::onGetScoreRequestReady(QByteArray ba)
{
qDebug() << "onGetScoreRequestReady" << ba;
qDebug() << _oauthManager->lastError();
disconnect(_oauthManager, SIGNAL(requestReady(QByteArray)),
this, SLOT(onGetScoreRequestReady(QByteArray)));
if (_oauthManager->lastError() == KQOAuthManager::NoError) {
QJsonDocument jsonResponse = QJsonDocument::fromJson(ba);
QJsonObject score = jsonResponse.object();
if (score.value("user") != QJsonValue::Undefined) {
QJsonObject user = score.value("user").toObject();
QString title = score.value("title").toString();
QString description = score.value("description").toString();
QString sharing = score.value("sharing").toString();
QString license = score.value("license").toString();
QString tags = score.value("tags").toString();
if (user.value("uid") != QJsonValue::Undefined) {
int uid = user.value("uid").toString().toInt();
qDebug() << "uid" << uid << _uid;
emit getScoreSuccess(title, description, (sharing == "private"), license, tags);
}
else {
emit getScoreError("");
qDebug() << "SCORE NOT FOUND";
}
}
else {
emit getScoreError("");
qDebug() << "SCORE NOT FOUND";
}
}
else {
emit getScoreError("");
qDebug() << "SCORE NOT FOUND";
}

}

//---------------------------------------------------------
// upload
//---------------------------------------------------------

void LoginManager::upload(const QString &path, const QString &title, const QString &description, const QString& priv, const QString& license, const QString& tags)
void LoginManager::upload(const QString &path, int nid, const QString &title, const QString &description, const QString& priv, const QString& license, const QString& tags)
{
//qDebug() << "file upload";
KQOAuthRequest *oauthRequest = new KQOAuthRequest(this);
oauthRequest->initRequest(KQOAuthRequest::AuthorizedRequest, QUrl("https://api.musescore.com/services/rest/score.json"));
QUrl url("https://api.musescore.com/services/rest/score.json");
if (nid > 0)
url = QUrl(QString("https://api.musescore.com/services/rest/score/%1/update.json").arg(nid));
oauthRequest->initRequest(KQOAuthRequest::AuthorizedRequest, url);
oauthRequest->setConsumerKey(_consumerKey);
oauthRequest->setConsumerSecretKey(_consumerSecret);
oauthRequest->setToken(_accessToken);
Expand Down
11 changes: 9 additions & 2 deletions mscore/loginmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,15 @@ class LoginManager : public QObject
QString _accessToken = 0;
QString _accessTokenSecret = 0;
QString _userName = 0;
int _uid = -1;

signals:
void loginError(const QString& error);
void loginSuccess();
void getUserError(const QString& error);
void getUserSuccess();
void getScoreError(const QString& error);
void getScoreSuccess(const QString &title, const QString &description, bool priv, const QString& license, const QString& tags);
void uploadError(const QString& error);
void uploadSuccess(const QString& url);
void tryLoginSuccess();
Expand All @@ -45,6 +48,7 @@ class LoginManager : public QObject
void onAccessTokenRequestReady(QByteArray ba);
void onAccessTokenReceived(QString token, QString tokenSecret);
void onGetUserRequestReady(QByteArray ba);
void onGetScoreRequestReady(QByteArray ba);
void onAuthorizedRequestDone();
void onUploadRequestReady(QByteArray ba);

Expand All @@ -57,15 +61,18 @@ class LoginManager : public QObject
public:
LoginManager(QObject* parent = 0);
void login(QString login, QString password);
void upload(const QString& path, const QString& title, const QString& description, const QString& priv, const QString& license, const QString& tags);
void upload(const QString& path, int nid, const QString& title, const QString& description, const QString& priv, const QString& license, const QString& tags);
bool hasAccessToken();
void getUser();
void getScore(int nid);

bool save();
bool load();

bool logout();

void setUserName(const QString& username) { _userName = username; }
QString userName() { return _userName; }
int uid() { return _uid; }
};
}

Expand Down
76 changes: 69 additions & 7 deletions mscore/uploadscoredialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ UploadScoreDialog::UploadScoreDialog(LoginManager* loginManager)
_loginManager = loginManager;
connect(_loginManager, SIGNAL(uploadSuccess(QString)), this, SLOT(uploadSuccess(QString)));
connect(_loginManager, SIGNAL(uploadError(QString)), this, SLOT(uploadError(QString)));
connect(_loginManager, SIGNAL(getScoreSuccess(QString, QString, bool, QString, QString)), this, SLOT(onGetScoreSuccess(QString, QString, bool, QString, QString)));
connect(_loginManager, SIGNAL(getScoreError(QString)), this, SLOT(onGetScoreError(QString)));
connect(_loginManager, SIGNAL(tryLoginSuccess()), this, SLOT(display()));
connect(btnSignout, SIGNAL(pressed()), this, SLOT(logout()));
}
Expand All @@ -66,8 +68,8 @@ UploadScoreDialog::UploadScoreDialog(LoginManager* loginManager)
void UploadScoreDialog::buttonBoxClicked(QAbstractButton* button)
{
QDialogButtonBox::StandardButton sb = buttonBox->standardButton(button);
if (sb == QDialogButtonBox::Ok)
upload();
if (sb == QDialogButtonBox::Save)
upload(updateExistingCb->isChecked() ? _nid : -1);
else
setVisible(false);
}
Expand All @@ -76,18 +78,18 @@ void UploadScoreDialog::buttonBoxClicked(QAbstractButton* button)
// upload
//---------------------------------------------------------

void UploadScoreDialog::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();
Score* score = mscore->currentScore()->rootScore();
QString path = QDir::tempPath() + "/temp.mscz";
if(mscore->saveAs(score, true, path, "mscz")) {
QString licenseString = license->currentData().toString();
QString privateString = rbPrivate->isChecked() ? "1" : "0";
_loginManager->upload(path, title->text(), description->toPlainText(), privateString, licenseString, tags->text());
_loginManager->upload(path, nid, title->text(), description->toPlainText(), privateString, licenseString, tags->text());
}
}

Expand All @@ -98,6 +100,8 @@ void UploadScoreDialog::upload()
void UploadScoreDialog::uploadSuccess(const QString& url)
{
setVisible(false);
mscore->currentScore()->rootScore()->setMetaTag("source", url);
mscore->currentScore()->rootScore()->setDirty(true);
QMessageBox::information(this,
tr("Success"),
tr("Finished! <a href=\"%1\">Go to my score</a>.").arg(url),
Expand All @@ -124,13 +128,71 @@ void UploadScoreDialog::uploadError(const QString& error)
void UploadScoreDialog::display()
{
lblUsername->setText(_loginManager->userName());
// clear the content
QString source = mscore->currentScore()->rootScore()->metaTag("source");
if (!source.isEmpty()) {
QStringList sl = source.split("/");
qDebug() << sl;
if (sl.length() > 0) {
QString nidString = sl.last();
qDebug() << sl;
bool ok;
int nid = nidString.toInt(&ok);
if (ok) {
qDebug() << nid;
_nid = nid;
_loginManager->getScore(nid);
return;
}
}
}
clear();
setVisible(true);
}

//---------------------------------------------------------
// onGetScoreSuccess
//---------------------------------------------------------

void UploadScoreDialog::onGetScoreSuccess(const QString &t, const QString &desc, bool priv, const QString& lic, const QString& tag)
{
// file with score info
title->setText(t);
description->setPlainText(desc);
rbPrivate->setChecked(priv);
rbPublic->setChecked(!priv);
int lIndex = license->findData(lic);
if (lIndex < 0) lIndex = 0;
license->setCurrentIndex(lIndex);
tags->setText(tag);
updateExistingCb->setChecked(true);
updateExistingCb->setVisible(true);
setVisible(true);
}

//---------------------------------------------------------
// onGetScoreError
//---------------------------------------------------------

void UploadScoreDialog::onGetScoreError(const QString& error)
{
clear();
setVisible(true);
}

//---------------------------------------------------------
// onGetScoreError
//---------------------------------------------------------

void UploadScoreDialog::clear()
{
description->clear();
rbPrivate->setChecked(false);
rbPublic->setChecked(true);
license->setCurrentIndex(0);
tags->clear();
setVisible(true);
updateExistingCb->setChecked(false);
updateExistingCb->setVisible(false);
_nid = -1;
}

//---------------------------------------------------------
Expand Down
6 changes: 5 additions & 1 deletion mscore/uploadscoredialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,20 @@ class UploadScoreDialog : public QDialog, public Ui::UploadScoreDialog
Q_OBJECT

LoginManager* _loginManager;
int _nid;

private slots:
void buttonBoxClicked(QAbstractButton* button);
void uploadSuccess(const QString& url);
void uploadError(const QString& error);
void onGetScoreSuccess(const QString &title, const QString &description, bool priv, const QString& license, const QString& tags);
void onGetScoreError(const QString& error);
void logout();
void display();

private:
void upload();
void upload(int nid);
void clear();

public:
UploadScoreDialog(LoginManager*);
Expand Down
51 changes: 39 additions & 12 deletions mscore/uploadscoredialog.ui
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>615</width>
<height>463</height>
<height>477</height>
</rect>
</property>
<property name="windowTitle">
Expand Down Expand Up @@ -345,18 +345,45 @@ p, li { white-space: pre-wrap; }
</item>
</layout>
</item>
<item row="2" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
<property name="centerButtons">
<bool>true</bool>
<item row="3" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
</widget>
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Save</set>
</property>
<property name="centerButtons">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="updateExistingCb">
<property name="text">
<string>Update the existing score </string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
Expand Down
Loading

0 comments on commit 08e2faa

Please sign in to comment.