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!")
+
![](data:image/png;base64,@IMAGE_DATA@)
+
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();