diff --git a/QCloudMusicApi/request.cpp b/QCloudMusicApi/request.cpp index 9b39adb..472ed9a 100644 --- a/QCloudMusicApi/request.cpp +++ b/QCloudMusicApi/request.cpp @@ -1,6 +1,4 @@ -#include -#include -#include +#include #include #include #include @@ -10,7 +8,6 @@ #include #include #include -#include #include #include #include diff --git a/QCloudMusicApi/request.h b/QCloudMusicApi/request.h index 054702b..c6c4d25 100644 --- a/QCloudMusicApi/request.h +++ b/QCloudMusicApi/request.h @@ -1,5 +1,4 @@ -#include -#include +#include namespace Request { diff --git a/Test/main.cpp b/Test/main.cpp index fd3e533..92aee3d 100644 --- a/Test/main.cpp +++ b/Test/main.cpp @@ -1,10 +1,19 @@ #include "mainwindow.h" - +#include "../QCloudMusicApi/util/crypto.h" #include int main(int argc, char *argv[]) { QApplication a(argc, argv); + []() {//测试aes加解密 + QString body = "This is a text"; + auto bodyEncrypt = Crypto::aesEncrypt(body.toUtf8(), EVP_aes_128_ecb, Crypto::eapiKey, ""); + auto bodyDecrypt = Crypto::aesDecrypt(bodyEncrypt, EVP_aes_128_ecb, Crypto::eapiKey, ""); + qDebug() << body; + qDebug() << bodyEncrypt; + qDebug() << bodyDecrypt; + qDebug() << (body == bodyDecrypt); + }(); MainWindow w; w.show(); return a.exec(); diff --git a/Test/mainwindow.cpp b/Test/mainwindow.cpp index 58b5197..81c2a33 100644 --- a/Test/mainwindow.cpp +++ b/Test/mainwindow.cpp @@ -24,33 +24,49 @@ MainWindow::~MainWindow() delete ui; } -void MainWindow::updateCookie(QVariantMap ret) { +void MainWindow::updateCookie(const QVariantMap ret) { auto newMap = Index::stringToMap(ret["cookie"].toString()); - auto map = Index::stringToMap(cookie); + cookie = Index::mergeMap(cookie, newMap);; if (ret["body"].toMap()["token"].isValid()) { - map["MUSIC_A"] = ret["body"].toMap()["token"]; + cookie["MUSIC_A"] = ret["body"].toMap()["token"]; } - Index::mergeMap(map, newMap); - cookie = Index::mapToString(map); } -QVariantMap MainWindow::invoke(QString funName, QVariantMap arg) { - arg["cookie"] = arg.value("cookie", cookie); - cookie = arg["cookie"].toString() + " SameSite=None; Secure"; +QVariantMap MainWindow::invoke(const QString funName, const QVariantMap arg) { QVariantMap ret; QMetaObject::invokeMethod(&api, funName.toUtf8() , Qt::DirectConnection , Q_RETURN_ARG(QVariantMap, ret) , Q_ARG(QVariantMap, arg)); - this->updateCookie(ret); return ret; } void MainWindow::on_pushButton_clicked() { - ui->textEdit_2->setText(QJsonDocument::fromJson(ui->textEdit_2->toPlainText().toUtf8()).toJson(QJsonDocument::Indented)); + auto JsonFormat = ui->checkBox->isChecked() ? QJsonDocument::Indented : QJsonDocument::Compact; + ui->textEdit_2->setText(QJsonDocument::fromJson(ui->textEdit_2->toPlainText().toUtf8()).toJson(JsonFormat)); + QVariantMap arg = QJsonDocument::fromJson(ui->textEdit_2->toPlainText().toUtf8()).toVariant().toMap(); + + //Api只能处理map类型的cookie + if(arg.contains("cookie")) { + //如果传入新的cookie,替换原有的cookie + if(arg["cookie"].userType() == QMetaType::QVariantMap) { + cookie = arg["cookie"].toMap()/* + " SameSite=None; Secure"*/; + } + else if(arg["cookie"].userType() == QMetaType::QString) { + cookie = Index::stringToMap(arg["cookie"].toString()); + } + } + else { + //使用存储的cookie + arg["cookie"] = arg.value("cookie", cookie); + } + QVariantMap ret = this->invoke(ui->comboBox->currentText(), arg); + + this->updateCookie(ret); + if(ui->checkBox->isChecked()) { ui->textEdit->setText(QJsonDocument::fromVariant(ret).toJson(QJsonDocument::Indented)); } @@ -65,20 +81,17 @@ void MainWindow::on_comboBox_currentTextChanged(const QString &arg1) QFile file(":/config.json"); file.open(QIODevice::ReadOnly); auto config = QJsonDocument::fromJson(file.readAll()); + auto JsonFormat = ui->checkBox->isChecked() ? QJsonDocument::Indented : QJsonDocument::Compact; ui->textEdit_2->setText( QJsonDocument(config[arg1].toObject()) - .toJson(QJsonDocument::Indented) + .toJson(JsonFormat) ); } void MainWindow::on_checkBox_stateChanged(int arg1) { - if(arg1) { - ui->textEdit->setText(QJsonDocument::fromJson(ui->textEdit->toPlainText().toUtf8()).toJson(QJsonDocument::Indented)); - } - else { - ui->textEdit->setText(QJsonDocument::fromJson(ui->textEdit->toPlainText().toUtf8()).toJson(QJsonDocument::Compact)); - } + auto JsonFormat = arg1 ? QJsonDocument::Indented : QJsonDocument::Compact; + ui->textEdit->setText(QJsonDocument::fromJson(ui->textEdit->toPlainText().toUtf8()).toJson(JsonFormat)); } diff --git a/Test/mainwindow.h b/Test/mainwindow.h index 4d1ad4f..ae44328 100644 --- a/Test/mainwindow.h +++ b/Test/mainwindow.h @@ -26,11 +26,24 @@ private slots: void on_checkBox_stateChanged(int arg1); private: + + /** + * @brief 反射调用API中的方法 + * @param funName 函数名称 + * @param arg 参数 + * @return QVariantMap 返回的数据 + */ + QVariantMap invoke(const QString funName, const QVariantMap arg); + + /** + * @brief 更新储存的cookie + * @param ret Api返回的数据 + * @return void + */ + void updateCookie(const QVariantMap ret); + Ui::MainWindow *ui; NeteaseCloudMusicApi api; - - QVariantMap invoke(QString funName, QVariantMap arg); - void updateCookie(QVariantMap ret); - QString cookie = ""; + QVariantMap cookie; }; #endif // MAINWINDOW_H