diff --git a/data/data.qrc b/data/data.qrc index 7a71a36b6..113826a3f 100644 --- a/data/data.qrc +++ b/data/data.qrc @@ -348,5 +348,6 @@ volumeslider-handle_glow.png volumeslider-handle.png volumeslider-inset.png + oauthsuccess.html diff --git a/data/oauthsuccess.html b/data/oauthsuccess.html new file mode 100644 index 000000000..4aa0bda46 --- /dev/null +++ b/data/oauthsuccess.html @@ -0,0 +1,37 @@ + + + tr("Return to Clementine") + + + + + +
+

tr("Success!")

+ +

tr("Please close your browser and return to Clementine.")

+
+ + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 62f585c8c..2a35a1475 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1026,6 +1026,7 @@ add_pot(POT ${CMAKE_CURRENT_SOURCE_DIR}/translations/header ${CMAKE_CURRENT_SOURCE_DIR}/translations/translations.pot ${SOURCES} ${MOC} ${UIC} ${OTHER_SOURCES} + ../data/oauthsuccess.html ) add_po(PO clementine_ LANGUAGES ${LANGUAGES} diff --git a/src/internet/oauthenticator.cpp b/src/internet/oauthenticator.cpp index 186b61dec..46e3e854c 100644 --- a/src/internet/oauthenticator.cpp +++ b/src/internet/oauthenticator.cpp @@ -1,7 +1,11 @@ #include "oauthenticator.h" +#include +#include #include +#include #include +#include #include #include @@ -48,8 +52,37 @@ void OAuthenticator::NewConnection() { NewClosure(socket, SIGNAL(readyRead()), this, SLOT(RedirectArrived(QTcpSocket*, QByteArray)), socket, buffer); - // Everything is bon. + // Everything is bon. Prepare and display the success page. + QFile page_file(":oauthsuccess.html"); + page_file.open(QIODevice::ReadOnly); + QString page_data = QString::fromLatin1(page_file.readAll()); + + // Translate the strings inside + QRegExp tr_regexp("tr\\(\"([^\"]+)\"\\)"); + int offset = 0; + forever { + offset = tr_regexp.indexIn(page_data, offset); + if (offset == -1) { + break; + } + + page_data.replace(offset, tr_regexp.matchedLength(), + tr(tr_regexp.cap(1).toAscii())); + offset += tr_regexp.matchedLength(); + } + + // Add the tick image. + QBuffer image_buffer; + image_buffer.open(QIODevice::ReadWrite); + QApplication::style()->standardIcon(QStyle::SP_DialogOkButton) + .pixmap(16).toImage().save(&image_buffer, "PNG"); + + page_data.replace("@IMAGE_DATA@", image_buffer.data().toBase64()); + socket->write("HTTP/1.0 200 OK\r\n"); + socket->write("Content-type: text/html;charset=UTF-8\r\n"); + socket->write("\r\n\r\n"); + socket->write(page_data.toUtf8()); socket->flush(); } diff --git a/src/internet/oauthenticator.h b/src/internet/oauthenticator.h index 16b05eac2..141017cd1 100644 --- a/src/internet/oauthenticator.h +++ b/src/internet/oauthenticator.h @@ -17,9 +17,9 @@ class OAuthenticator : public QObject { signals: // Token to use now. - void AccessTokenAvailable(QString token); + void AccessTokenAvailable(const QString& token); // Token to use to get a new access token when it expires. - void RefreshTokenAvailable(QString token); + void RefreshTokenAvailable(const QString& token); private slots: void NewConnection();