Clean up the network remote settings page, add a "Get it on Google Play" button.
@ -270,6 +270,40 @@
|
|||||||
<file>osd_background.png</file>
|
<file>osd_background.png</file>
|
||||||
<file>osd_shadow_corner.png</file>
|
<file>osd_shadow_corner.png</file>
|
||||||
<file>osd_shadow_edge.png</file>
|
<file>osd_shadow_edge.png</file>
|
||||||
|
<file>playstore/af_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/ar_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/be_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/bg_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/ca_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/cs_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/da_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/de_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/el_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/en_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/es_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/et_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/fa_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/fi_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/fr_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/hr_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/hu_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/it_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/ja_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/ko_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/lt_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/lv_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/ms_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/nl_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/pl_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/ro_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/ru_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/sk_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/sl_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/sr_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/sv_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/tr_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/uk_generic_rgb_wo_45.png</file>
|
||||||
|
<file>playstore/vi_generic_rgb_wo_45.png</file>
|
||||||
<file>providers/amazon.png</file>
|
<file>providers/amazon.png</file>
|
||||||
<file>providers/aol.png</file>
|
<file>providers/aol.png</file>
|
||||||
<file>providers/bbc.png</file>
|
<file>providers/bbc.png</file>
|
||||||
|
BIN
data/playstore/af_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
BIN
data/playstore/ar_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
data/playstore/be_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
data/playstore/bg_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
data/playstore/ca_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.0 KiB |
BIN
data/playstore/cs_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
data/playstore/da_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.3 KiB |
BIN
data/playstore/de_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
data/playstore/el_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.0 KiB |
BIN
data/playstore/en_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.0 KiB |
BIN
data/playstore/es_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.2 KiB |
BIN
data/playstore/et_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.0 KiB |
BIN
data/playstore/fa_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
data/playstore/fi_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
data/playstore/fr_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.3 KiB |
BIN
data/playstore/hr_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
data/playstore/hu_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
BIN
data/playstore/it_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.2 KiB |
BIN
data/playstore/ja_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.0 KiB |
BIN
data/playstore/ko_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
data/playstore/lt_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.3 KiB |
BIN
data/playstore/lv_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
data/playstore/ms_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
data/playstore/nl_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 7.9 KiB |
BIN
data/playstore/pl_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
BIN
data/playstore/ro_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
data/playstore/ru_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.0 KiB |
BIN
data/playstore/sk_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
data/playstore/sl_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
BIN
data/playstore/sr_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.4 KiB |
BIN
data/playstore/sv_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 7.0 KiB |
BIN
data/playstore/tr_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 7.9 KiB |
BIN
data/playstore/uk_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.0 KiB |
BIN
data/playstore/vi_generic_rgb_wo_45.png
Normal file
After Width: | Height: | Size: 8.2 KiB |
@ -55,6 +55,9 @@ public:
|
|||||||
Application(QObject* parent = NULL);
|
Application(QObject* parent = NULL);
|
||||||
~Application();
|
~Application();
|
||||||
|
|
||||||
|
QString language_name() const { return language_name_; }
|
||||||
|
void set_language_name(const QString& name) { language_name_ = name; }
|
||||||
|
|
||||||
TagReaderClient* tag_reader_client() const { return tag_reader_client_; }
|
TagReaderClient* tag_reader_client() const { return tag_reader_client_; }
|
||||||
Database* database() const { return database_; }
|
Database* database() const { return database_; }
|
||||||
AlbumCoverLoader* album_cover_loader() const { return album_cover_loader_; }
|
AlbumCoverLoader* album_cover_loader() const { return album_cover_loader_; }
|
||||||
@ -95,6 +98,8 @@ signals:
|
|||||||
void SettingsDialogRequested(SettingsDialog::Page page);
|
void SettingsDialogRequested(SettingsDialog::Page page);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
QString language_name_;
|
||||||
|
|
||||||
TagReaderClient* tag_reader_client_;
|
TagReaderClient* tag_reader_client_;
|
||||||
Database* database_;
|
Database* database_;
|
||||||
AlbumCoverLoader* album_cover_loader_;
|
AlbumCoverLoader* album_cover_loader_;
|
||||||
|
@ -588,6 +588,20 @@ bool IsLaptop() {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString SystemLanguageName() {
|
||||||
|
#if QT_VERSION >= 0x040800
|
||||||
|
QString system_language = QLocale::system().uiLanguages().empty() ?
|
||||||
|
QLocale::system().name() : QLocale::system().uiLanguages().first();
|
||||||
|
// uiLanguages returns strings with "-" as separators for language/region;
|
||||||
|
// however QTranslator needs "_" separators
|
||||||
|
system_language.replace("-", "_");
|
||||||
|
#else
|
||||||
|
QString system_language = QLocale::system().name();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return system_language;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Utilities
|
} // namespace Utilities
|
||||||
|
|
||||||
|
|
||||||
|
@ -138,6 +138,8 @@ namespace Utilities {
|
|||||||
|
|
||||||
// Returns true if this machine has a battery.
|
// Returns true if this machine has a battery.
|
||||||
bool IsLaptop();
|
bool IsLaptop();
|
||||||
|
|
||||||
|
QString SystemLanguageName();
|
||||||
}
|
}
|
||||||
|
|
||||||
class ScopedWCharArray {
|
class ScopedWCharArray {
|
||||||
|
25
src/main.cpp
@ -110,7 +110,7 @@ using boost::scoped_ptr;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void LoadTranslation(const QString& prefix, const QString& path,
|
void LoadTranslation(const QString& prefix, const QString& path,
|
||||||
const QString& override_language = QString()) {
|
const QString& language) {
|
||||||
#if QT_VERSION < 0x040700
|
#if QT_VERSION < 0x040700
|
||||||
// QTranslator::load will try to open and read "clementine" if it exists,
|
// QTranslator::load will try to open and read "clementine" if it exists,
|
||||||
// without checking if it's a file first.
|
// without checking if it's a file first.
|
||||||
@ -120,19 +120,6 @@ void LoadTranslation(const QString& prefix, const QString& path,
|
|||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if QT_VERSION >= 0x040800
|
|
||||||
QString system_language = QLocale::system().uiLanguages().empty() ?
|
|
||||||
QLocale::system().name() : QLocale::system().uiLanguages().first();
|
|
||||||
// uiLanguages returns strings with "-" as separators for language/region;
|
|
||||||
// however QTranslator needs "_" separators
|
|
||||||
system_language.replace("-", "_");
|
|
||||||
#else
|
|
||||||
QString system_language = QLocale::system().name();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QString language = override_language.isEmpty() ?
|
|
||||||
system_language : override_language;
|
|
||||||
|
|
||||||
QTranslator* t = new PoTranslator;
|
QTranslator* t = new PoTranslator;
|
||||||
if (t->load(prefix + "_" + language, path))
|
if (t->load(prefix + "_" + language, path))
|
||||||
QCoreApplication::installTranslator(t);
|
QCoreApplication::installTranslator(t);
|
||||||
@ -389,13 +376,16 @@ int main(int argc, char *argv[]) {
|
|||||||
QSslCertificate::fromPath(":/grooveshark-valicert-ca.pem", QSsl::Pem));
|
QSslCertificate::fromPath(":/grooveshark-valicert-ca.pem", QSsl::Pem));
|
||||||
|
|
||||||
// Has the user forced a different language?
|
// Has the user forced a different language?
|
||||||
QString language = options.language();
|
QString override_language = options.language();
|
||||||
if (language.isEmpty()) {
|
if (override_language.isEmpty()) {
|
||||||
QSettings s;
|
QSettings s;
|
||||||
s.beginGroup("General");
|
s.beginGroup("General");
|
||||||
language = s.value("language").toString();
|
override_language = s.value("language").toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const QString language = override_language.isEmpty() ?
|
||||||
|
Utilities::SystemLanguageName() : override_language;
|
||||||
|
|
||||||
// Translations
|
// Translations
|
||||||
LoadTranslation("qt", QLibraryInfo::location(QLibraryInfo::TranslationsPath), language);
|
LoadTranslation("qt", QLibraryInfo::location(QLibraryInfo::TranslationsPath), language);
|
||||||
LoadTranslation("clementine", ":/translations", language);
|
LoadTranslation("clementine", ":/translations", language);
|
||||||
@ -417,6 +407,7 @@ int main(int argc, char *argv[]) {
|
|||||||
QtConcurrent::run(&ParseAProto);
|
QtConcurrent::run(&ParseAProto);
|
||||||
|
|
||||||
Application app;
|
Application app;
|
||||||
|
app.set_language_name(language);
|
||||||
|
|
||||||
Echonest::Config::instance()->setAPIKey("DFLFLJBUF4EGTXHIG");
|
Echonest::Config::instance()->setAPIKey("DFLFLJBUF4EGTXHIG");
|
||||||
Echonest::Config::instance()->setNetworkAccessManager(new NetworkAccessManager);
|
Echonest::Config::instance()->setNetworkAccessManager(new NetworkAccessManager);
|
||||||
|
@ -183,8 +183,10 @@ void NetworkRemote::AcceptConnection() {
|
|||||||
|
|
||||||
bool NetworkRemote::IpIsPrivate(const QHostAddress& address) {
|
bool NetworkRemote::IpIsPrivate(const QHostAddress& address) {
|
||||||
return
|
return
|
||||||
|
// Localhost v4
|
||||||
|
address.isInSubnet(QHostAddress::parseSubnet("127.0.0.0/8")) ||
|
||||||
// Link Local v4
|
// Link Local v4
|
||||||
address.isInSubnet(QHostAddress::parseSubnet("127.0.0.1/8")) ||
|
address.isInSubnet(QHostAddress::parseSubnet("169.254.1.0/16")) ||
|
||||||
// Link Local v6
|
// Link Local v6
|
||||||
address.isInSubnet(QHostAddress::parseSubnet("::1/128")) ||
|
address.isInSubnet(QHostAddress::parseSubnet("::1/128")) ||
|
||||||
address.isInSubnet(QHostAddress::parseSubnet("fe80::/10")) ||
|
address.isInSubnet(QHostAddress::parseSubnet("fe80::/10")) ||
|
||||||
@ -196,7 +198,7 @@ bool NetworkRemote::IpIsPrivate(const QHostAddress& address) {
|
|||||||
address.isInSubnet(QHostAddress::parseSubnet("fc00::/7"));
|
address.isInSubnet(QHostAddress::parseSubnet("fc00::/7"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkRemote::CreateRemoteClient(QTcpSocket *client_socket) {
|
void NetworkRemote::CreateRemoteClient(QTcpSocket* client_socket) {
|
||||||
if (client_socket) {
|
if (client_socket) {
|
||||||
// Add the client to the list
|
// Add the client to the list
|
||||||
RemoteClient* client = new RemoteClient(app_, client_socket);
|
RemoteClient* client = new RemoteClient(app_, client_socket);
|
||||||
|
@ -21,44 +21,48 @@
|
|||||||
#include "networkremote/networkremote.h"
|
#include "networkremote/networkremote.h"
|
||||||
#include "networkremote/networkremotehelper.h"
|
#include "networkremote/networkremotehelper.h"
|
||||||
|
|
||||||
|
#include <QDesktopServices>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
#include <QHostInfo>
|
#include <QHostInfo>
|
||||||
#include <QNetworkInterface>
|
#include <QNetworkInterface>
|
||||||
|
|
||||||
|
const char* NetworkRemoteSettingsPage::kPlayStoreUrl =
|
||||||
|
"https://play.google.com/store/apps/details?id=de.qspool.clementineremote";
|
||||||
|
|
||||||
NetworkRemoteSettingsPage::NetworkRemoteSettingsPage(SettingsDialog* dialog)
|
NetworkRemoteSettingsPage::NetworkRemoteSettingsPage(SettingsDialog* dialog)
|
||||||
: SettingsPage(dialog),
|
: SettingsPage(dialog),
|
||||||
ui_(new Ui_NetworkRemoteSettingsPage)
|
ui_(new Ui_NetworkRemoteSettingsPage)
|
||||||
{
|
{
|
||||||
ui_->setupUi(this);
|
ui_->setupUi(this);
|
||||||
setWindowIcon(IconLoader::Load("ipodtouchicon"));
|
setWindowIcon(IconLoader::Load("ipodtouchicon"));
|
||||||
|
|
||||||
|
ui_->play_store->installEventFilter(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkRemoteSettingsPage::~NetworkRemoteSettingsPage() {
|
NetworkRemoteSettingsPage::~NetworkRemoteSettingsPage() {
|
||||||
delete ui_;
|
delete ui_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool NetworkRemoteSettingsPage::eventFilter(QObject* object, QEvent* event) {
|
||||||
|
if (object == ui_->play_store &&
|
||||||
|
event->type() == QEvent::MouseButtonRelease) {
|
||||||
|
QDesktopServices::openUrl(QUrl(kPlayStoreUrl));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SettingsPage::eventFilter(object, event);
|
||||||
|
}
|
||||||
|
|
||||||
void NetworkRemoteSettingsPage::Load() {
|
void NetworkRemoteSettingsPage::Load() {
|
||||||
QSettings s;
|
QSettings s;
|
||||||
int port;
|
|
||||||
|
|
||||||
s.beginGroup(NetworkRemote::kSettingsGroup);
|
s.beginGroup(NetworkRemote::kSettingsGroup);
|
||||||
|
|
||||||
port = s.value("port").toInt();
|
|
||||||
if (port == 0) {
|
|
||||||
ui_->remote_port->setValue(NetworkRemote::kDefaultServerPort);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ui_->remote_port->setValue(s.value("port").toInt());
|
|
||||||
}
|
|
||||||
|
|
||||||
ui_->use_remote->setChecked(s.value("use_remote").toBool());
|
ui_->use_remote->setChecked(s.value("use_remote").toBool());
|
||||||
if (s.contains("only_non_public_ip")) {
|
ui_->remote_port->setValue(
|
||||||
ui_->only_non_public_ip->setChecked(s.value("only_non_public_ip").toBool());
|
s.value("port", NetworkRemote::kDefaultServerPort).toInt());
|
||||||
} else {
|
ui_->only_non_public_ip->setChecked(
|
||||||
// Default yes
|
s.value("only_non_public_ip", true).toBool());
|
||||||
ui_->only_non_public_ip->setChecked(true);
|
|
||||||
s.setValue("only_non_public_ip", true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Auth Code, 5 digits
|
// Auth Code, 5 digits
|
||||||
ui_->use_auth_code->setChecked(s.value("use_auth_code", false).toBool());
|
ui_->use_auth_code->setChecked(s.value("use_auth_code", false).toBool());
|
||||||
@ -68,9 +72,6 @@ void NetworkRemoteSettingsPage::Load() {
|
|||||||
|
|
||||||
s.endGroup();
|
s.endGroup();
|
||||||
|
|
||||||
QPixmap android_qr_code(":clementine_remote_qr.png");
|
|
||||||
ui_->android_app_qr->setPixmap(android_qr_code);
|
|
||||||
|
|
||||||
// Get local ip addresses
|
// Get local ip addresses
|
||||||
QString ip_addresses;
|
QString ip_addresses;
|
||||||
QList<QHostAddress> addresses = QNetworkInterface::allAddresses();
|
QList<QHostAddress> addresses = QNetworkInterface::allAddresses();
|
||||||
@ -80,12 +81,26 @@ void NetworkRemoteSettingsPage::Load() {
|
|||||||
!address.isInSubnet(QHostAddress::parseSubnet("127.0.0.1/8"))) {
|
!address.isInSubnet(QHostAddress::parseSubnet("127.0.0.1/8"))) {
|
||||||
qLog(Debug) << "IP:" << address.toString();
|
qLog(Debug) << "IP:" << address.toString();
|
||||||
if (!ip_addresses.isEmpty()) {
|
if (!ip_addresses.isEmpty()) {
|
||||||
ip_addresses.append("; ");
|
ip_addresses.append(", ");
|
||||||
}
|
}
|
||||||
ip_addresses.append(address.toString());
|
ip_addresses.append(address.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ui_->ip_address->setText(ip_addresses);
|
ui_->ip_address->setText(ip_addresses);
|
||||||
|
|
||||||
|
// Get the right play store badge for this language.
|
||||||
|
QString language = dialog()->app()->language_name();
|
||||||
|
const int underscore = language.indexOf('_');
|
||||||
|
if (underscore != -1) {
|
||||||
|
language = language.left(underscore);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString badge_filename = ":/playstore/" + language + "_generic_rgb_wo_45.png";
|
||||||
|
if (!QFile::exists(badge_filename)) {
|
||||||
|
badge_filename = ":/playstore/en_generic_rgb_wo_45.png";
|
||||||
|
}
|
||||||
|
|
||||||
|
ui_->play_store->setPixmap(QPixmap(badge_filename));
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkRemoteSettingsPage::Save() {
|
void NetworkRemoteSettingsPage::Save() {
|
||||||
|
@ -32,7 +32,12 @@ public:
|
|||||||
void Load();
|
void Load();
|
||||||
void Save();
|
void Save();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool eventFilter(QObject* object, QEvent* event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static const char* kPlayStoreUrl;
|
||||||
|
|
||||||
Ui_NetworkRemoteSettingsPage* ui_;
|
Ui_NetworkRemoteSettingsPage* ui_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -6,217 +6,170 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>475</width>
|
<width>884</width>
|
||||||
<height>300</height>
|
<height>587</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Network Remote</string>
|
<string>Network Remote</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="use_remote">
|
<widget class="QCheckBox" name="use_remote">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Use Remotecontrol</string>
|
<string>Use a network remote control</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QWidget" name="use_remote_container" native="true">
|
<widget class="QGroupBox" name="use_remote_container_2">
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
<property name="title">
|
||||||
<property name="leftMargin">
|
<string>Settings</string>
|
||||||
<number>24</number>
|
</property>
|
||||||
</property>
|
<layout class="QFormLayout" name="formLayout">
|
||||||
<item>
|
<item row="0" column="0">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
<widget class="QLabel" name="label_remote_port">
|
||||||
<item>
|
<property name="minimumSize">
|
||||||
<widget class="QLabel" name="label_remote_port">
|
<size>
|
||||||
<property name="minimumSize">
|
<width>171</width>
|
||||||
<size>
|
<height>0</height>
|
||||||
<width>171</width>
|
</size>
|
||||||
<height>0</height>
|
</property>
|
||||||
</size>
|
<property name="layoutDirection">
|
||||||
</property>
|
<enum>Qt::LeftToRight</enum>
|
||||||
<property name="layoutDirection">
|
</property>
|
||||||
<enum>Qt::LeftToRight</enum>
|
<property name="text">
|
||||||
</property>
|
<string>Port</string>
|
||||||
<property name="text">
|
</property>
|
||||||
<string>Port</string>
|
<property name="alignment">
|
||||||
</property>
|
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||||
<property name="alignment">
|
</property>
|
||||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
</widget>
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QSpinBox" name="remote_port">
|
|
||||||
<property name="maximum">
|
|
||||||
<number>65535</number>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<number>8080</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item row="0" column="1">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<widget class="QSpinBox" name="remote_port">
|
||||||
<item>
|
<property name="maximum">
|
||||||
<widget class="QCheckBox" name="only_non_public_ip">
|
<number>65535</number>
|
||||||
<property name="toolTip">
|
</property>
|
||||||
<string>Only accept connections from clients within the ip ranges:
|
<property name="value">
|
||||||
|
<number>8080</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" colspan="2">
|
||||||
|
<widget class="QCheckBox" name="only_non_public_ip">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Only accept connections from clients within the ip ranges:
|
||||||
10.x.x.x
|
10.x.x.x
|
||||||
172.16.0.0 - 172.31.255.255
|
172.16.0.0 - 172.31.255.255
|
||||||
192.168.x.x</string>
|
192.168.x.x</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Accept non public clients only</string>
|
<string>Only allow connections from the local network</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="checked">
|
<property name="checked">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item row="2" column="0">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<widget class="QCheckBox" name="use_auth_code">
|
||||||
<item>
|
<property name="toolTip">
|
||||||
<widget class="QCheckBox" name="use_auth_code">
|
<string>A client can connect only, if the correct code was entered.</string>
|
||||||
<property name="toolTip">
|
</property>
|
||||||
<string>A client can connect only, if the correct code was entered.</string>
|
<property name="text">
|
||||||
</property>
|
<string>Require authentication code</string>
|
||||||
<property name="text">
|
</property>
|
||||||
<string>Use authentication code</string>
|
</widget>
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QSpinBox" name="auth_code">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="suffix">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>99999</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item row="2" column="1">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
<widget class="QSpinBox" name="auth_code">
|
||||||
<item>
|
<property name="enabled">
|
||||||
<widget class="QCheckBox" name="allow_downloads">
|
<bool>false</bool>
|
||||||
<property name="toolTip">
|
</property>
|
||||||
<string>Allow a client to download music from this computer.</string>
|
<property name="suffix">
|
||||||
</property>
|
<string/>
|
||||||
<property name="text">
|
</property>
|
||||||
<string>Allow downloads</string>
|
<property name="maximum">
|
||||||
</property>
|
<number>99999</number>
|
||||||
</widget>
|
</property>
|
||||||
</item>
|
</widget>
|
||||||
</layout>
|
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item row="3" column="0" colspan="2">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
<widget class="QCheckBox" name="allow_downloads">
|
||||||
<item>
|
<property name="toolTip">
|
||||||
<widget class="QLabel" name="label_2">
|
<string>Allow a client to download music from this computer.</string>
|
||||||
<property name="toolTip">
|
</property>
|
||||||
<string>Enter this IP in the App to connect to Clementine.</string>
|
<property name="text">
|
||||||
</property>
|
<string>Allow downloads</string>
|
||||||
<property name="text">
|
</property>
|
||||||
<string>Your IP address:</string>
|
</widget>
|
||||||
</property>
|
</item>
|
||||||
</widget>
|
<item row="4" column="0">
|
||||||
</item>
|
<widget class="QLabel" name="label_2">
|
||||||
<item>
|
<property name="toolTip">
|
||||||
<widget class="QLabel" name="ip_address">
|
<string>Enter this IP in the App to connect to Clementine.</string>
|
||||||
<property name="text">
|
</property>
|
||||||
<string>127.0.0.1</string>
|
<property name="text">
|
||||||
</property>
|
<string>Your IP address:</string>
|
||||||
</widget>
|
</property>
|
||||||
</item>
|
</widget>
|
||||||
</layout>
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QLabel" name="ip_address">
|
||||||
|
<property name="text">
|
||||||
|
<string>127.0.0.1</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QGroupBox" name="groupBox">
|
||||||
<property name="font">
|
<property name="title">
|
||||||
<font>
|
<string>Download the Android app</string>
|
||||||
<pointsize>15</pointsize>
|
|
||||||
<weight>75</weight>
|
|
||||||
<bold>true</bold>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string><a href="https://play.google.com/store/apps/details?id=de.qspool.clementineremote">Get the Android App now!</a></string>
|
|
||||||
</property>
|
|
||||||
<property name="textFormat">
|
|
||||||
<enum>Qt::RichText</enum>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignCenter</set>
|
|
||||||
</property>
|
|
||||||
<property name="openExternalLinks">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<property name="textInteractionFlags">
|
|
||||||
<set>Qt::LinksAccessibleByMouse</set>
|
|
||||||
</property>
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="play_store">
|
||||||
|
<property name="cursor">
|
||||||
|
<cursorShape>PointingHandCursor</cursorShape>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="android_app_qr">
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../../data/data.qrc">:/clementine_remote_qr.png</pixmap>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="android_app_qr">
|
<spacer name="verticalSpacer">
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="verticalSpacer_5">
|
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizeHint" stdset="0">
|
<property name="sizeHint" stdset="0">
|
||||||
<size>
|
<size>
|
||||||
<width>20</width>
|
<width>20</width>
|
||||||
<height>36</height>
|
<height>98</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources>
|
||||||
|
<include location="../../data/data.qrc"/>
|
||||||
|
</resources>
|
||||||
<connections>
|
<connections>
|
||||||
<connection>
|
|
||||||
<sender>use_remote</sender>
|
|
||||||
<signal>toggled(bool)</signal>
|
|
||||||
<receiver>use_remote_container</receiver>
|
|
||||||
<slot>setEnabled(bool)</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>199</x>
|
|
||||||
<y>19</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>199</x>
|
|
||||||
<y>60</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
<connection>
|
||||||
<sender>use_auth_code</sender>
|
<sender>use_auth_code</sender>
|
||||||
<signal>toggled(bool)</signal>
|
<signal>toggled(bool)</signal>
|
||||||
@ -233,5 +186,21 @@
|
|||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>use_remote</sender>
|
||||||
|
<signal>toggled(bool)</signal>
|
||||||
|
<receiver>use_remote_container_2</receiver>
|
||||||
|
<slot>setEnabled(bool)</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>59</x>
|
||||||
|
<y>22</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>57</x>
|
||||||
|
<y>43</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
</connections>
|
</connections>
|
||||||
</ui>
|
</ui>
|
||||||
|