Don't connect new devices automatically, put them in a list model. Add icons for ipods, android phones and USB memory sticks.

This commit is contained in:
David Sansome 2010-07-03 21:05:55 +00:00
parent d3e3d04fe1
commit 6654182032
96 changed files with 518 additions and 176 deletions

View File

@ -189,5 +189,60 @@
<file>icons/22x22/edit-delete.png</file>
<file>icons/32x32/edit-delete.png</file>
<file>icons/48x48/edit-delete.png</file>
<file>schema-14.sql</file>
<file>icons/22x22/multimedia-player-ipod-mini-blue.png</file>
<file>icons/22x22/multimedia-player-ipod-mini-gold.png</file>
<file>icons/22x22/multimedia-player-ipod-mini-green.png</file>
<file>icons/22x22/multimedia-player-ipod-mini-pink.png</file>
<file>icons/22x22/multimedia-player-ipod-mini-silver.png</file>
<file>icons/22x22/multimedia-player-ipod-nano-black.png</file>
<file>icons/22x22/multimedia-player-ipod-nano-white.png</file>
<file>icons/22x22/multimedia-player-ipod-shuffle.png</file>
<file>icons/22x22/multimedia-player-ipod-standard-color.png</file>
<file>icons/22x22/multimedia-player-ipod-standard-monochrome.png</file>
<file>icons/22x22/multimedia-player-ipod-U2-color.png</file>
<file>icons/22x22/multimedia-player-ipod-U2-monochrome.png</file>
<file>icons/32x32/multimedia-player-ipod-mini-blue.png</file>
<file>icons/32x32/multimedia-player-ipod-mini-gold.png</file>
<file>icons/32x32/multimedia-player-ipod-mini-green.png</file>
<file>icons/32x32/multimedia-player-ipod-mini-pink.png</file>
<file>icons/32x32/multimedia-player-ipod-mini-silver.png</file>
<file>icons/32x32/multimedia-player-ipod-nano-black.png</file>
<file>icons/32x32/multimedia-player-ipod-nano-white.png</file>
<file>icons/32x32/multimedia-player-ipod-shuffle.png</file>
<file>icons/32x32/multimedia-player-ipod-standard-color.png</file>
<file>icons/32x32/multimedia-player-ipod-standard-monochrome.png</file>
<file>icons/32x32/multimedia-player-ipod-U2-color.png</file>
<file>icons/32x32/multimedia-player-ipod-U2-monochrome.png</file>
<file>icons/48x48/multimedia-player-ipod-mini-blue.png</file>
<file>icons/48x48/multimedia-player-ipod-mini-gold.png</file>
<file>icons/48x48/multimedia-player-ipod-mini-green.png</file>
<file>icons/48x48/multimedia-player-ipod-mini-pink.png</file>
<file>icons/48x48/multimedia-player-ipod-mini-silver.png</file>
<file>icons/48x48/multimedia-player-ipod-nano-black.png</file>
<file>icons/48x48/multimedia-player-ipod-nano-white.png</file>
<file>icons/48x48/multimedia-player-ipod-shuffle.png</file>
<file>icons/48x48/multimedia-player-ipod-standard-color.png</file>
<file>icons/48x48/multimedia-player-ipod-standard-monochrome.png</file>
<file>icons/48x48/multimedia-player-ipod-U2-color.png</file>
<file>icons/48x48/multimedia-player-ipod-U2-monochrome.png</file>
<file>icons/22x22/phone-google-nexus-one.png</file>
<file>icons/22x22/phone-htc-g1-white.png</file>
<file>icons/22x22/phone-nokia-n900.png</file>
<file>icons/22x22/phone-palm-pre.png</file>
<file>icons/32x32/phone-google-nexus-one.png</file>
<file>icons/32x32/phone-htc-g1-white.png</file>
<file>icons/32x32/phone-nokia-n900.png</file>
<file>icons/32x32/phone-palm-pre.png</file>
<file>icons/48x48/phone-google-nexus-one.png</file>
<file>icons/48x48/phone-htc-g1-white.png</file>
<file>icons/48x48/phone-nokia-n900.png</file>
<file>icons/48x48/phone-palm-pre.png</file>
<file>icons/22x22/phone.png</file>
<file>icons/32x32/phone.png</file>
<file>icons/48x48/phone.png</file>
<file>icons/22x22/drive-removable-media-usb-pendrive.png</file>
<file>icons/32x32/drive-removable-media-usb-pendrive.png</file>
<file>icons/48x48/drive-removable-media-usb-pendrive.png</file>
</qresource>
</RCC>

Binary file not shown.

After

Width:  |  Height:  |  Size: 806 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 737 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 702 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 702 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 686 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 720 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 614 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 944 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 892 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 939 B

BIN
data/icons/22x22/phone.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 600 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
data/icons/32x32/phone.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 972 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
data/icons/48x48/phone.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

8
data/schema-14.sql Normal file
View File

@ -0,0 +1,8 @@
CREATE TABLE devices (
unique_id TEXT NOT NULL,
friendly_name TEXT,
size INTEGER,
icon TEXT
);
UPDATE schema_version SET version=14;

View File

@ -55,6 +55,7 @@ set(SOURCES
devices/connecteddevice.cpp
devices/devicelister.cpp
devices/devicemanager.cpp
devices/deviceview.cpp
devices/filesystemdevice.cpp
engines/enginebase.cpp
@ -172,6 +173,7 @@ set(HEADERS
devices/connecteddevice.h
devices/devicelister.h
devices/devicemanager.h
devices/deviceview.h
devices/filesystemdevice.h
engines/enginebase.h

View File

@ -28,7 +28,7 @@
#include <QVariant>
const char* Database::kDatabaseFilename = "clementine.db";
const int Database::kSchemaVersion = 13;
const int Database::kSchemaVersion = 14;
int Database::sNextConnectionId = 1;
QMutex Database::sNextConnectionIdMutex;

View File

@ -21,6 +21,10 @@
namespace Utilities {
static QString tr(const char* str) {
return QCoreApplication::translate("", str);
}
QString PrettyTime(int seconds) {
// last.fm sometimes gets the track length wrong, so you end up with
// negative times.
@ -39,10 +43,6 @@ QString PrettyTime(int seconds) {
return ret;
}
static QString tr(const char* str) {
return QCoreApplication::translate("", str);
}
QString WordyTime(quint64 seconds) {
quint64 days = seconds / (60*60*24);
@ -56,4 +56,20 @@ QString WordyTime(quint64 seconds) {
return parts.join(" ");
}
QString PrettySize(quint64 bytes) {
QString ret;
if (bytes > 0) {
if (bytes <= 1000)
ret = QString::number(bytes) + " bytes";
else if (bytes <= 1000*1000)
ret.sprintf("%.1f KB", float(bytes) / 1000);
else if (bytes <= 1000*1000*1000)
ret.sprintf("%.1f MB", float(bytes) / (1000*1000));
else
ret.sprintf("%.1f GB", float(bytes) / (1000*1000*1000));
}
return ret;
}
} // namespace

View File

@ -21,6 +21,7 @@
namespace Utilities {
QString PrettyTime(int seconds);
QString PrettySize(quint64 bytes);
QString WordyTime(quint64 seconds);
}

View File

@ -104,6 +104,9 @@ QVariant DeviceKitLister::DeviceInfo(const QString& id, int field) {
return QString("%1 %2").arg(data.drive_vendor, data.drive_model);
return data.drive_serial;
case Field_Icon:
return data.device_presentation_icon_name;
case Field_Manufacturer:
return data.drive_vendor;

View File

@ -32,6 +32,7 @@ public:
enum Field {
Field_UniqueID = 0,
Field_FriendlyName,
Field_Icon,
Field_Manufacturer,
Field_Model,
Field_Capacity,

View File

@ -17,9 +17,22 @@
#include "connecteddevice.h"
#include "devicemanager.h"
#include "devicekitlister.h"
#include "core/utilities.h"
#include "ui/iconloader.h"
DeviceManager::DeviceManager(TaskManager* task_manager, QObject *parent)
: QObject(parent),
#include <QIcon>
DeviceManager::DeviceInfo::DeviceInfo()
: database_id_(-1),
lister_(NULL)
{
}
DeviceManager::DeviceManager(BackgroundThread<Database>* database,
TaskManager* task_manager, QObject *parent)
: QAbstractListModel(parent),
database_(database),
task_manager_(task_manager)
{
#ifdef Q_WS_X11
@ -31,16 +44,52 @@ DeviceManager::~DeviceManager() {
qDeleteAll(listers_);
}
int DeviceManager::rowCount(const QModelIndex&) const {
return devices_.count();
}
QVariant DeviceManager::data(const QModelIndex& index, int role) const {
if (!index.isValid() || index.column() != 0)
return QVariant();
const DeviceInfo& info = devices_[index.row()];
switch (role) {
case Qt::DisplayRole: {
QString text = info.friendly_name_.isEmpty() ? info.unique_id_ : info.friendly_name_;
if (info.size_)
text = text + QString(" (%1)").arg(Utilities::PrettySize(info.size_));
return text;
}
case Qt::DecorationRole: {
bool connected = info.lister_;
return info.icon_.pixmap(22, connected ? QIcon::Normal : QIcon::Disabled);
}
default:
return QVariant();
}
}
void DeviceManager::AddLister(DeviceLister *lister) {
listers_ << lister;
connect(lister, SIGNAL(DeviceAdded(QString)), SLOT(DeviceAdded(QString)));
connect(lister, SIGNAL(DeviceRemoved(QString)), SLOT(DeviceRemoved(QString)));
connect(lister, SIGNAL(DeviceChanged(QString)), SLOT(DeviceChanged(QString)));
connect(lister, SIGNAL(DeviceAdded(QString)), SLOT(PhysicalDeviceAdded(QString)));
connect(lister, SIGNAL(DeviceRemoved(QString)), SLOT(PhysicalDeviceRemoved(QString)));
connect(lister, SIGNAL(DeviceChanged(QString)), SLOT(PhysicalDeviceChanged(QString)));
lister->Start();
}
void DeviceManager::DeviceAdded(const QString &id) {
int DeviceManager::FindDeviceById(const QString &id) const {
for (int i=0 ; i<devices_.count() ; ++i) {
if (devices_[i].unique_id_ == id)
return i;
}
return -1;
}
void DeviceManager::PhysicalDeviceAdded(const QString &id) {
DeviceLister* lister = qobject_cast<DeviceLister*>(sender());
qDebug() << "Device added:" << id;
@ -48,28 +97,74 @@ void DeviceManager::DeviceAdded(const QString &id) {
qDebug() << i << lister->DeviceInfo(id, i);
}
ConnectedDevice* device = lister->Connect(id, this);
devices_ << device;
}
// Do we have this device already?
int i = FindDeviceById(id);
if (i == -1) {
DeviceInfo info;
info.lister_ = lister;
info.unique_id_ = id;
info.friendly_name_ = lister->DeviceInfo(id, DeviceLister::Field_FriendlyName).toString();
info.size_ = lister->DeviceInfo(id, DeviceLister::Field_Capacity).toLongLong();
void DeviceManager::DeviceRemoved(const QString &id) {
DeviceLister* lister = qobject_cast<DeviceLister*>(sender());
// Try to load the icon with that exact name first
QString icon_name = lister->DeviceInfo(id, DeviceLister::Field_Icon).toString();
info.icon_ = IconLoader::Load(icon_name);
qDebug() << "Device removed:" << id;
foreach (ConnectedDevice* device, devices_) {
if (device->lister() == lister && device->unique_id() == id) {
delete device;
devices_.removeAll(device);
break;
// If that failed than try to guess if it's a phone or ipod. Fall back on
// a usb memory stick icon.
if (info.icon_.isNull()) {
if (icon_name.contains("phone"))
info.icon_ = IconLoader::Load("phone");
else if (icon_name.contains("ipod") || icon_name.contains("apple"))
info.icon_ = IconLoader::Load("multimedia-player-ipod-standard-monochrome");
else
info.icon_ = IconLoader::Load("drive-removable-media-usb-pendrive");
}
beginInsertRows(QModelIndex(), devices_.count(), devices_.count());
devices_ << info;
endInsertRows();
} else {
DeviceInfo& info = devices_[i];
// TODO: Make a ConnectedDevice
}
}
void DeviceManager::DeviceChanged(const QString &id) {
void DeviceManager::PhysicalDeviceRemoved(const QString &id) {
DeviceLister* lister = qobject_cast<DeviceLister*>(sender());
qDebug() << "Device removed:" << id;
int i = FindDeviceById(id);
if (i == -1) {
// Shouldn't happen
return;
}
DeviceInfo& info = devices_[i];
if (info.database_id_ != -1) {
// Keep the structure around, but just "disconnect" it
info.lister_ = NULL;
info.device_.reset();
emit dataChanged(index(i, 0), index(i, 0));
} else {
// Remove the item from the model
beginRemoveRows(QModelIndex(), i, i);
devices_.removeAt(i);
endRemoveRows();
}
}
void DeviceManager::PhysicalDeviceChanged(const QString &id) {
DeviceLister* lister = qobject_cast<DeviceLister*>(sender());
qDebug() << "Device changed:" << id;
for (int i=0 ; i<DeviceKitLister::LastField ; ++i) {
qDebug() << i << lister->DeviceInfo(id, i);
int i = FindDeviceById(id);
if (i == -1) {
// Shouldn't happen
return;
}
// TODO
}

View File

@ -17,34 +17,70 @@
#ifndef DEVICEMANAGER_H
#define DEVICEMANAGER_H
#include <QObject>
#include "core/backgroundthread.h"
#include <QAbstractListModel>
#include <QIcon>
#include <boost/shared_ptr.hpp>
class ConnectedDevice;
class Database;
class DeviceLister;
class TaskManager;
class DeviceManager : public QObject {
class DeviceManager : public QAbstractListModel {
Q_OBJECT
public:
DeviceManager(TaskManager* task_manager, QObject* parent = 0);
DeviceManager(BackgroundThread<Database>* database, TaskManager* task_manager,
QObject* parent = 0);
~DeviceManager();
BackgroundThread<Database>* database() const { return database_; }
TaskManager* task_manager() const { return task_manager_; }
// QAbstractListModel
int rowCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
private slots:
void DeviceAdded(const QString& id);
void DeviceRemoved(const QString& id);
void DeviceChanged(const QString& id);
void PhysicalDeviceAdded(const QString& id);
void PhysicalDeviceRemoved(const QString& id);
void PhysicalDeviceChanged(const QString& id);
private:
void AddLister(DeviceLister* lister);
int FindDeviceById(const QString& id) const;
private:
// Devices can be in three different states:
// 1) Remembered in the database but not physically connected at the moment.
// database_id valid, lister null, device null
// 2) Physically connected but the user hasn't "connected" it to Clementine
// yet.
// database_id == -1, lister valid, device null
// 3) Physically connected and connected to Clementine
// database_id valid, lister valid, device valid
// Devices in all states will have a unique_id.
struct DeviceInfo {
DeviceInfo();
int database_id_; // -1 if not remembered in the database
DeviceLister* lister_; // NULL if not physically connected
boost::shared_ptr<ConnectedDevice> device_; // NULL if not connected to clementine
QString unique_id_;
QString friendly_name_;
quint64 size_;
QIcon icon_;
};
BackgroundThread<Database>* database_;
TaskManager* task_manager_;
QList<DeviceLister*> listers_;
QList<ConnectedDevice*> devices_;
QList<DeviceInfo> devices_;
};
#endif // DEVICEMANAGER_H

View File

@ -0,0 +1,25 @@
/* This file is part of Clementine.
Clementine is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Clementine is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Clementine. If not, see <http://www.gnu.org/licenses/>.
*/
#include "deviceview.h"
#include <QMenu>
DeviceView::DeviceView(QWidget* parent)
: QTreeView(parent),
menu_(new QMenu(this))
{
}

36
src/devices/deviceview.h Normal file
View File

@ -0,0 +1,36 @@
/* This file is part of Clementine.
Clementine is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Clementine is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Clementine. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef DEVICEVIEW_H
#define DEVICEVIEW_H
#include <QTreeView>
class QAction;
class QMenu;
class DeviceView : public QTreeView {
Q_OBJECT
public:
DeviceView(QWidget* parent = 0);
private:
QMenu* menu_;
QAction* connect_action_;
};
#endif // DEVICEVIEW_H

View File

@ -171,19 +171,10 @@ QString LengthItemDelegate::displayText(const QVariant& value, const QLocale&) c
QString SizeItemDelegate::displayText(const QVariant& value, const QLocale&) const {
bool ok = false;
int bytes = value.toInt(&ok);
QString ret;
if (ok && bytes > 0) {
if (bytes <= 1024)
ret.sprintf("%d bytes", bytes);
else if (bytes <= 1024*1024)
ret.sprintf("%.1f KB", float(bytes) / 1024);
else if (bytes <= 1024*1024*1024)
ret.sprintf("%.1f MB", float(bytes) / (1024*1024));
else
ret.sprintf("%.1f GB", float(bytes) / (1024*1024*1024));
}
return ret;
if (ok)
return Utilities::PrettySize(bytes);
return QString();
}
QString DateItemDelegate::displayText(const QVariant &value, const QLocale &locale) const {

View File

@ -458,6 +458,9 @@ msgstr ""
msgid "Details..."
msgstr ""
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr ""

View File

@ -459,6 +459,9 @@ msgstr "Cíl"
msgid "Details..."
msgstr "Detaily..."
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr "Složka"
@ -536,8 +539,8 @@ msgstr ""
msgid ""
"Enter an <b>artist</b> or <b>tag</b> to start listening to Last.fm radio."
msgstr ""
"Zadejte <b>umělce</b> nebo <b>značku</b> pro spuštění poslouchání rádia "
"Last.fm."
"Zadejte <b>umělce</b> nebo <b>značku</b> pro spuštění poslouchání rádia Last."
"fm."
msgid "Enter search terms here"
msgstr "Zde zadejte klíčová slova"
@ -1408,8 +1411,7 @@ msgid "There was a problem fetching the metadata from Magnatune"
msgstr ""
msgid "These folders will be scanned for music to make up your library"
msgstr ""
"Tyto složky budou prohledány a nalezená hudba bude přidána do knihovny"
msgstr "Tyto složky budou prohledány a nalezená hudba bude přidána do knihovny"
msgid "Third level"
msgstr "Třetí úroveň"
@ -1546,9 +1548,8 @@ msgid ""
msgstr ""
msgid ""
"You can scrobble tracks for free, but only <span style=\" font-"
"weight:600;\">paid subscribers</span> can stream Last.fm radio from "
"Clementine."
"You can scrobble tracks for free, but only <span style=\" font-weight:600;"
"\">paid subscribers</span> can stream Last.fm radio from Clementine."
msgstr ""
msgid ""
@ -1606,11 +1607,9 @@ msgstr "stopa %1"
#~ msgid "Show section"
#~ msgstr "Zobrazit skeci"
#, qt-format
#~ msgid "%1's Neighborhood"
#~ msgstr "Sousedství uživatele %1"
#, qt-format
#~ msgid "%1's Library"
#~ msgstr "Knihovna uživatele %1"

View File

@ -459,6 +459,9 @@ msgstr ""
msgid "Details..."
msgstr ""
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr ""

View File

@ -460,6 +460,9 @@ msgstr "Ziel"
msgid "Details..."
msgstr "Details..."
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr "Ordner"
@ -1406,8 +1409,7 @@ msgstr "Ordner %1 ist ungültig"
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
"Die Wiedergabeliste \"%1\" ist leer oder konnte nicht geladen werden."
msgstr "Die Wiedergabeliste \"%1\" ist leer oder konnte nicht geladen werden."
msgid "There was a problem fetching the metadata from Magnatune"
msgstr "Fehler. Metadaten konnten nicht von Magnatune geholt werden"
@ -1550,9 +1552,8 @@ msgid ""
msgstr "Sie können ohne Benutzerkonto Musik von Magnatune hören. Um die"
msgid ""
"You can scrobble tracks for free, but only <span style=\" font-"
"weight:600;\">paid subscribers</span> can stream Last.fm radio from "
"Clementine."
"You can scrobble tracks for free, but only <span style=\" font-weight:600;"
"\">paid subscribers</span> can stream Last.fm radio from Clementine."
msgstr ""
"Sie können die Musik kostenlos 'scrobblen' aber nur <span style=\" font-"
"weight:600;\">zahlende Last.fm-Kunden</span> können Last.fm-Radio mit "
@ -1607,7 +1608,6 @@ msgstr "%n Stücke entfernen"
msgid "track %1"
msgstr "Stück %1"
#, qt-format
#~ msgid "%1's Library"
#~ msgstr "%1s Musiksammlung"
@ -1648,8 +1648,8 @@ msgstr "Stück %1"
#~ "Note that you must be a <span style=\" font-weight:600;\">paid "
#~ "subscriber</span> to listen to Last.fm radio from within Clementine."
#~ msgstr ""
#~ "Sie müssen zahlender Last.fm Kunde sein um Last.fm über Clementine hören zu "
#~ "können"
#~ "Sie müssen zahlender Last.fm Kunde sein um Last.fm über Clementine hören "
#~ "zu können"
#~ msgid "Music (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma)"
#~ msgstr "Musik (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma)"

View File

@ -90,8 +90,8 @@ msgid ""
"<p>If you surround sections of text that contain a token with curly-braces, "
"that section will be hidden if the token is empty.</p>"
msgstr ""
"<p>Λέξεις που αρχίζουν με %, για παράδειγμα:%καλλιτέχνης %άλμπουμ "
"%τίτλος</p>\n"
"<p>Λέξεις που αρχίζουν με %, για παράδειγμα:%καλλιτέχνης %άλμπουμ %τίτλος</"
"p>\n"
"\n"
"<p>Αν κλείσεις ένα κείμενο που περιέχει λέξη με % σε άγκιστρα ({}), το "
"τμήμα αυτό δεν θα είναι ορατό η λέξη λείπει</p>"
@ -468,6 +468,9 @@ msgstr "Προορισμός"
msgid "Details..."
msgstr "Λεπτομέρειες..."
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr "Κατάλογος"
@ -859,8 +862,7 @@ msgid "Loading tracks"
msgstr "Φόρτωση κομματιών"
msgid "Loads files/URLs, replacing current playlist"
msgstr ""
"Φορτώνει αρχεία/URLs, αντικαθιστώντας την τρέχουσα λίστα αναπαραγωγής"
msgstr "Φορτώνει αρχεία/URLs, αντικαθιστώντας την τρέχουσα λίστα αναπαραγωγής"
msgid "Love"
msgstr "Αγάπη"
@ -908,8 +910,7 @@ msgid "Music"
msgstr "Μουσική"
msgid "Music (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgstr ""
"Μουσική (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgstr "Μουσική (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgid "Music Library"
msgstr "Μουσική βιβλιοθήκη"
@ -1422,8 +1423,7 @@ msgstr ""
"Υπήρξε κάποιο σφάλμα κατά την μεταφορά των μετα-δεδομένων από το Magnatune"
msgid "These folders will be scanned for music to make up your library"
msgstr ""
"Οι φάκελοι αυτοί θα σαρωθούν για μουσικά αρχεία για την βιβλιοθήκη σας"
msgstr "Οι φάκελοι αυτοί θα σαρωθούν για μουσικά αρχεία για την βιβλιοθήκη σας"
msgid "Third level"
msgstr "Τρίτο επίπεδο"
@ -1563,9 +1563,8 @@ msgstr ""
"αγορά μιας συνδρομής αφαιρεί το μήνυμα από το τέλος κάθε κομματιού."
msgid ""
"You can scrobble tracks for free, but only <span style=\" font-"
"weight:600;\">paid subscribers</span> can stream Last.fm radio from "
"Clementine."
"You can scrobble tracks for free, but only <span style=\" font-weight:600;"
"\">paid subscribers</span> can stream Last.fm radio from Clementine."
msgstr ""
"Μπορείτε να κάνετε \"scroble\" δωρεάν, αλλά μόνο <span style=\" font-"
"weight:600;\">οι συνδρομητές επί πληρωμή</span> μπορούν να έχουν ροή από το "
@ -1624,11 +1623,9 @@ msgstr "αφαίρεση %n τραγουδιών"
msgid "track %1"
msgstr "κομμάτι %1"
#, qt-format
#~ msgid "%1's Neighborhood"
#~ msgstr "%1's Συνοικιακά"
#, qt-format
#~ msgid "%1's Library"
#~ msgstr "%1's Βιβλιοθήκη"
@ -1657,8 +1654,8 @@ msgstr "κομμάτι %1"
#~ "Note that you must be a <span style=\" font-weight:600;\">paid "
#~ "subscriber</span> to listen to Last.fm radio from within Clementine."
#~ msgstr ""
#~ "Σημείωσε πως πρέπει να είσαι <span style=\" font-"
#~ "weight:600;\">συνδρομητής</span> για να ακούσεις Last.fm από το Clementine."
#~ "Σημείωσε πως πρέπει να είσαι <span style=\" font-weight:600;"
#~ "\">συνδρομητής</span> για να ακούσεις Last.fm από το Clementine."
#~ msgid "Fadeout"
#~ msgstr "Ομαλό σβήσιμο"

View File

@ -460,6 +460,9 @@ msgstr "Destination"
msgid "Details..."
msgstr "Details..."
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr "Directory"

View File

@ -458,6 +458,9 @@ msgstr ""
msgid "Details..."
msgstr ""
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr ""

View File

@ -327,8 +327,7 @@ msgid "Closing this window will cancel the download."
msgstr "Cerrando esta ventana se cancelara la descarga."
msgid "Closing this window will stop searching for album covers."
msgstr ""
"Cerrando esta ventana se dejara de buscar las caratulas de los álbumes"
msgstr "Cerrando esta ventana se dejara de buscar las caratulas de los álbumes"
msgid "Club"
msgstr "Club"
@ -463,6 +462,9 @@ msgstr "Destino"
msgid "Details..."
msgstr "Detalles..."
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr "Directorio"
@ -541,8 +543,8 @@ msgstr "Ingrese un nuevo nombre para esta lista de reproducción"
msgid ""
"Enter an <b>artist</b> or <b>tag</b> to start listening to Last.fm radio."
msgstr ""
"Ingrese un <b>artista</b> o <b>etiqueta</b> para escuchar la radio de "
"Last.fm."
"Ingrese un <b>artista</b> o <b>etiqueta</b> para escuchar la radio de Last."
"fm."
msgid "Enter search terms here"
msgstr "Introduzca aquí los términos de búsqueda"
@ -728,8 +730,8 @@ msgstr "Ignorar el \"The\" en los nombres de los artistas"
msgid ""
"Images (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm *.tiff)"
msgstr ""
"Imágenes (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm "
"*.tiff)"
"Imágenes (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm *."
"tiff)"
msgid "Include album art in the notification"
msgstr "Incluir carátula en la notificación"
@ -811,8 +813,7 @@ msgid "Last.fm Tag Radio: %1"
msgstr "Radio en Last.fm de la Etiqueta %1"
msgid "Last.fm is currently busy, please try again in a few minutes"
msgstr ""
"Last.fm está actualmente saturado, intente nuevamente en unos minutos"
msgstr "Last.fm está actualmente saturado, intente nuevamente en unos minutos"
msgid "Last.fm password"
msgstr "Contraseña"
@ -1559,9 +1560,8 @@ msgid ""
msgstr ""
msgid ""
"You can scrobble tracks for free, but only <span style=\" font-"
"weight:600;\">paid subscribers</span> can stream Last.fm radio from "
"Clementine."
"You can scrobble tracks for free, but only <span style=\" font-weight:600;"
"\">paid subscribers</span> can stream Last.fm radio from Clementine."
msgstr ""
msgid ""
@ -1619,11 +1619,9 @@ msgstr "Pista %1"
#~ msgid "Show section"
#~ msgstr "Mostrar columna"
#, qt-format
#~ msgid "%1's Neighborhood"
#~ msgstr "Vecinos de %1"
#, qt-format
#~ msgid "%1's Library"
#~ msgstr "Colección de %1"
@ -1706,8 +1704,8 @@ msgstr "Pista %1"
#~ msgstr "Acceso por defecto:"
#~ msgid ""
#~ "You are about to reset to global shortcuts default values. Are you sure you "
#~ "want to continue?"
#~ "You are about to reset to global shortcuts default values. Are you sure "
#~ "you want to continue?"
#~ msgstr ""
#~ "Estas por reinicar las teclas rapidas a sus valores por defecto. Estás "
#~ "seguro que deseas continuar?"
@ -1722,8 +1720,9 @@ msgstr "Pista %1"
#~ "Note that you must be a <span style=\" font-weight:600;\">paid "
#~ "subscriber</span> to listen to Last.fm radio from within Clementine."
#~ msgstr ""
#~ "Recuerda que tienes que ser un <span style=\" font-weight:600;\">Suscriptor "
#~ "de Paga</span> para poder escuchar la radio de Last.fm desde Clementine."
#~ "Recuerda que tienes que ser un <span style=\" font-weight:600;"
#~ "\">Suscriptor de Paga</span> para poder escuchar la radio de Last.fm "
#~ "desde Clementine."
#~ msgid "Music (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma)"
#~ msgstr "Música (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma)"

View File

@ -458,6 +458,9 @@ msgstr "Kohde"
msgid "Details..."
msgstr "Tiedot..."
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr "Kansio"
@ -1543,9 +1546,8 @@ msgid ""
msgstr ""
msgid ""
"You can scrobble tracks for free, but only <span style=\" font-"
"weight:600;\">paid subscribers</span> can stream Last.fm radio from "
"Clementine."
"You can scrobble tracks for free, but only <span style=\" font-weight:600;"
"\">paid subscribers</span> can stream Last.fm radio from Clementine."
msgstr ""
msgid ""

View File

@ -459,6 +459,9 @@ msgstr ""
msgid "Details..."
msgstr ""
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr ""
@ -817,8 +820,8 @@ msgstr "Nom d'utilisateur"
msgid "Leave blank for the default. Examples: \"/dev/dsp\", \"front\", etc."
msgstr ""
"Laisser vide pour les paramètres par défaut. Exemples : \"/dev/dsp\", "
"\"front\", etc."
"Laisser vide pour les paramètres par défaut. Exemples : \"/dev/dsp\", \"front"
"\", etc."
msgid "Length"
msgstr "Durée"
@ -1553,9 +1556,8 @@ msgid ""
msgstr ""
msgid ""
"You can scrobble tracks for free, but only <span style=\" font-"
"weight:600;\">paid subscribers</span> can stream Last.fm radio from "
"Clementine."
"You can scrobble tracks for free, but only <span style=\" font-weight:600;"
"\">paid subscribers</span> can stream Last.fm radio from Clementine."
msgstr ""
msgid ""
@ -1613,11 +1615,9 @@ msgstr "piste %1"
#~ msgid "Show section"
#~ msgstr "Montrer la colonne"
#, qt-format
#~ msgid "%1's Neighborhood"
#~ msgstr "Voisinnage de %1"
#, qt-format
#~ msgid "%1's Library"
#~ msgstr "Bibliothèque de %1"
@ -1646,8 +1646,8 @@ msgstr "piste %1"
#~ "Note that you must be a <span style=\" font-weight:600;\">paid "
#~ "subscriber</span> to listen to Last.fm radio from within Clementine."
#~ msgstr ""
#~ "N'oubliez pas que vous devez être <span style=\" font-weight:600;\">abonné "
#~ "(payant)</span> pour écouter la radio Last.fm avec Clementine."
#~ "N'oubliez pas que vous devez être <span style=\" font-weight:600;"
#~ "\">abonné (payant)</span> pour écouter la radio Last.fm avec Clementine."
#~ msgid "Fadeout"
#~ msgstr "Fondu final"

View File

@ -458,6 +458,9 @@ msgstr ""
msgid "Details..."
msgstr ""
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr ""

View File

@ -461,6 +461,9 @@ msgstr "Destinazione"
msgid "Details..."
msgstr "Dettagli..."
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr "Cartella"
@ -725,8 +728,8 @@ msgstr "Ignora \"The\" nei nomi degli artisti"
msgid ""
"Images (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm *.tiff)"
msgstr ""
"Immagini (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm "
"*.tiff)"
"Immagini (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm *."
"tiff)"
msgid "Include album art in the notification"
msgstr "Includi copertina nella notifica"
@ -808,8 +811,7 @@ msgid "Last.fm Tag Radio: %1"
msgstr "Radio del tag di Last.fm: %1"
msgid "Last.fm is currently busy, please try again in a few minutes"
msgstr ""
"Al momento Last.fm non è disponibile, prova ancora tra qualche minuto"
msgstr "Al momento Last.fm non è disponibile, prova ancora tra qualche minuto"
msgid "Last.fm password"
msgstr "Password Last.fm"
@ -904,8 +906,7 @@ msgid "Music"
msgstr "Musica"
msgid "Music (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgstr ""
"Musica (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgstr "Musica (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgid "Music Library"
msgstr "Raccolta musicale"
@ -1561,9 +1562,8 @@ msgstr ""
"traccia."
msgid ""
"You can scrobble tracks for free, but only <span style=\" font-"
"weight:600;\">paid subscribers</span> can stream Last.fm radio from "
"Clementine."
"You can scrobble tracks for free, but only <span style=\" font-weight:600;"
"\">paid subscribers</span> can stream Last.fm radio from Clementine."
msgstr ""
msgid ""
@ -1658,8 +1658,9 @@ msgstr "traccia %1"
#~ "Note that you must be a <span style=\" font-weight:600;\">paid "
#~ "subscriber</span> to listen to Last.fm radio from within Clementine."
#~ msgstr ""
#~ "Nota che è necessario essere un <span style=\" font-weight:600;\">abbonato a "
#~ "pagamento</span> per ascoltare una radio Last.fm da Clementine."
#~ "Nota che è necessario essere un <span style=\" font-weight:600;"
#~ "\">abbonato a pagamento</span> per ascoltare una radio Last.fm da "
#~ "Clementine."
#~ msgid "Configure global shortcuts..."
#~ msgstr "Configura le scorciatoie globali..."

View File

@ -458,6 +458,9 @@ msgstr ""
msgid "Details..."
msgstr ""
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr ""

View File

@ -458,6 +458,9 @@ msgstr ""
msgid "Details..."
msgstr ""
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr ""

View File

@ -458,6 +458,9 @@ msgstr "Destinacion"
msgid "Details..."
msgstr "Detalhs..."
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr "Dorsièr"

View File

@ -459,6 +459,9 @@ msgstr ""
msgid "Details..."
msgstr ""
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr ""

View File

@ -465,6 +465,9 @@ msgstr "Destino"
msgid "Details..."
msgstr "Detalhes..."
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr "Directoria"
@ -904,8 +907,7 @@ msgid "Music"
msgstr "Música"
msgid "Music (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgstr ""
"Música (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgstr "Música (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgid "Music Library"
msgstr "Biblioteca de Música"
@ -1556,13 +1558,12 @@ msgstr ""
"serviço, a mensagem no final de cada faixa será removida."
msgid ""
"You can scrobble tracks for free, but only <span style=\" font-"
"weight:600;\">paid subscribers</span> can stream Last.fm radio from "
"Clementine."
"You can scrobble tracks for free, but only <span style=\" font-weight:600;"
"\">paid subscribers</span> can stream Last.fm radio from Clementine."
msgstr ""
"Você pode actualizar/memorizar as faixas gratuitamente, mas apenas os <span "
"style=\" font-weight:600;\">assinantes</span> conseguem ouvir as rádios "
"Last.fm através do Clementine."
"style=\" font-weight:600;\">assinantes</span> conseguem ouvir as rádios Last."
"fm através do Clementine."
msgid ""
"You need to launch System Preferences and turn on \"<span style=\" font-"
@ -1616,11 +1617,9 @@ msgstr "remover %n canções"
msgid "track %1"
msgstr "faixa %1"
#, qt-format
#~ msgid "%1's Neighborhood"
#~ msgstr "Vizinhos da %1's"
#, qt-format
#~ msgid "%1's Library"
#~ msgstr "Biblioteca da %1's"
@ -1652,8 +1651,8 @@ msgstr "faixa %1"
#~ "Note that you must be a <span style=\" font-weight:600;\">paid "
#~ "subscriber</span> to listen to Last.fm radio from within Clementine."
#~ msgstr ""
#~ "Note que deverá ser <span style=\" font-weight:600;\"> um assinante </span> "
#~ "para ouvir as rádio Last.fm com o Clementine."
#~ "Note que deverá ser <span style=\" font-weight:600;\"> um assinante </"
#~ "span> para ouvir as rádio Last.fm com o Clementine."
#~ msgid "Music (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma)"
#~ msgstr "Música (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma)"

View File

@ -463,6 +463,9 @@ msgstr "Destino"
msgid "Details..."
msgstr "Detalhes..."
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr "Diretório"
@ -904,8 +907,7 @@ msgid "Music"
msgstr "Música"
msgid "Music (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgstr ""
"Música (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgstr "Música (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgid "Music Library"
msgstr "Biblioteca de Músicas"
@ -1557,9 +1559,8 @@ msgstr ""
"uma assinatura as mensagens no final de cada faixa serão removidas."
msgid ""
"You can scrobble tracks for free, but only <span style=\" font-"
"weight:600;\">paid subscribers</span> can stream Last.fm radio from "
"Clementine."
"You can scrobble tracks for free, but only <span style=\" font-weight:600;"
"\">paid subscribers</span> can stream Last.fm radio from Clementine."
msgstr ""
"Você pode obter os nomes das faixas de graça, mas apenas <span style=\" font-"
"weight:600;\">assinantes</span> podem ouvir rádio da Last.fm do Clementine."
@ -1570,8 +1571,8 @@ msgid ""
"shortcuts in Clementine."
msgstr ""
"Você precisa acessar as Preferências de Sistema e habilitar a opção \"<span "
"style=\" font-style:italic;\">Ativar acesso por dispositivos "
"assistidos</span>\" para utilizar os atalhos globais no Clementine."
"style=\" font-style:italic;\">Ativar acesso por dispositivos assistidos</"
"span>\" para utilizar os atalhos globais no Clementine."
msgid "Your Last.fm credentials were incorrect"
msgstr "Suas credencias do Last.fm estavam incorretas"
@ -1626,8 +1627,8 @@ msgstr "faixa %1"
#~ "Note that you must be a <span style=\" font-weight:600;\">paid "
#~ "subscriber</span> to listen to Last.fm radio from within Clementine."
#~ msgstr ""
#~ "Nota: Você deve ser um <span style=\" fonte-weight:600;\">assinante</span> "
#~ "para ouvir a rádio Last.fm do Clementine."
#~ "Nota: Você deve ser um <span style=\" fonte-weight:600;\">assinante</"
#~ "span> para ouvir a rádio Last.fm do Clementine."
#~ msgid "Music (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma)"
#~ msgstr "Música (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma)"

View File

@ -458,6 +458,9 @@ msgstr ""
msgid "Details..."
msgstr ""
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr ""

View File

@ -459,6 +459,9 @@ msgstr "Назначение"
msgid "Details..."
msgstr "Подробнее..."
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr "Директория"
@ -535,8 +538,7 @@ msgstr "Введите новое имя для этого списка восп
msgid ""
"Enter an <b>artist</b> or <b>tag</b> to start listening to Last.fm radio."
msgstr ""
"Укажите <b>исполнителя</b> или <b>тег</b> чтобы слушать радио Last.fm."
msgstr "Укажите <b>исполнителя</b> или <b>тег</b> чтобы слушать радио Last.fm."
msgid "Enter search terms here"
msgstr "Введите выражение для поиска"
@ -722,8 +724,8 @@ msgstr "Игнорировать \"The\" в имени исполнителя"
msgid ""
"Images (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm *.tiff)"
msgstr ""
"Изображения (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm "
"*.tiff)"
"Изображения (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm *."
"tiff)"
msgid "Include album art in the notification"
msgstr "Показывать обложку альбома в уведомлении"
@ -899,8 +901,7 @@ msgid "Music"
msgstr "Музыка"
msgid "Music (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgstr ""
"музыка (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgstr "музыка (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgid "Music Library"
msgstr "Музыкальная коллекция"
@ -1550,9 +1551,8 @@ msgid ""
msgstr ""
msgid ""
"You can scrobble tracks for free, but only <span style=\" font-"
"weight:600;\">paid subscribers</span> can stream Last.fm radio from "
"Clementine."
"You can scrobble tracks for free, but only <span style=\" font-weight:600;"
"\">paid subscribers</span> can stream Last.fm radio from Clementine."
msgstr ""
"Вы можете скробблить композиции свободно, но только <span style=\" font-"
"weight:600;\">платные подписчики</span> могут слушать радио Last.fm из "
@ -1635,9 +1635,8 @@ msgstr "композиция %1"
#~ "Note that you must be a <span style=\" font-weight:600;\">paid "
#~ "subscriber</span> to listen to Last.fm radio from within Clementine."
#~ msgstr ""
#~ "Обратите внимание, что вы должны быть <span style=\"font-"
#~ "weight:600;\">платным подписчиком</span> ,чтобы слушать радио Last.fm из "
#~ "Clementine."
#~ "Обратите внимание, что вы должны быть <span style=\"font-weight:600;"
#~ "\">платным подписчиком</span> ,чтобы слушать радио Last.fm из Clementine."
#~ msgid "Fadeout"
#~ msgstr "Затихание"
@ -1654,11 +1653,9 @@ msgstr "композиция %1"
#~ msgid "Don't show notifications"
#~ msgstr "Не показывать"
#, qt-format
#~ msgid "%1's Neighborhood"
#~ msgstr "Соседи %1"
#, qt-format
#~ msgid "%1's Library"
#~ msgstr "Коллекция %1"

View File

@ -465,6 +465,9 @@ msgstr "Cieľ"
msgid "Details..."
msgstr "Podrobnosti..."
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr "Priečinok"
@ -1554,13 +1557,11 @@ msgstr ""
"správy na konci každej skladby."
msgid ""
"You can scrobble tracks for free, but only <span style=\" font-"
"weight:600;\">paid subscribers</span> can stream Last.fm radio from "
"Clementine."
"You can scrobble tracks for free, but only <span style=\" font-weight:600;"
"\">paid subscribers</span> can stream Last.fm radio from Clementine."
msgstr ""
"Môžte skrobblovať skladby zadarmo, ale len <span style=\" font-"
"weight:600;\">platiaci predplatitelia</span> môžu streamovať Last.fm rádio z "
"Clementine."
"Môžte skrobblovať skladby zadarmo, ale len <span style=\" font-weight:600;"
"\">platiaci predplatitelia</span> môžu streamovať Last.fm rádio z Clementine."
msgid ""
"You need to launch System Preferences and turn on \"<span style=\" font-"
@ -1620,11 +1621,9 @@ msgstr "skladba %1"
#~ msgid "Show section"
#~ msgstr "Zobraziť stĺpec"
#, qt-format
#~ msgid "%1's Neighborhood"
#~ msgstr "%1 susedia"
#, qt-format
#~ msgid "%1's Library"
#~ msgstr "%1 zbierka"
@ -1704,8 +1703,8 @@ msgstr "skladba %1"
#~ msgstr "Pôvodný kľúč"
#~ msgid ""
#~ "You are about to reset to global shortcuts default values. Are you sure you "
#~ "want to continue?"
#~ "You are about to reset to global shortcuts default values. Are you sure "
#~ "you want to continue?"
#~ msgstr ""
#~ "Pokúšate sa zresetovať pôvodné globálne skratky. Ste si istý, že chcete "
#~ "pokračovať?"

View File

@ -460,6 +460,9 @@ msgstr "Mål"
msgid "Details..."
msgstr "Detaljer..."
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr "Katalog"

View File

@ -458,6 +458,9 @@ msgstr ""
msgid "Details..."
msgstr "Detaylar..."
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr ""

View File

@ -449,6 +449,9 @@ msgstr ""
msgid "Details..."
msgstr ""
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr ""

View File

@ -464,6 +464,9 @@ msgstr "Призначення"
msgid "Details..."
msgstr "Детальніше..."
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr "Каталог"
@ -727,8 +730,8 @@ msgstr "Ігнорувати «The» в іменах виконавців"
msgid ""
"Images (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm *.tiff)"
msgstr ""
"Зображення (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm "
"*.tiff)"
"Зображення (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm *."
"tiff)"
msgid "Include album art in the notification"
msgstr "Показувати обкладинку в повідомлені"
@ -903,8 +906,7 @@ msgid "Music"
msgstr "Музика"
msgid "Music (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgstr ""
"Музика (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgstr "Музика (*.mp3 *.ogg *.flac *.mpc *.m4a *.aac *.wma *.mp4 *.spx *.wav)"
msgid "Music Library"
msgstr "Фонотека"
@ -1555,13 +1557,12 @@ msgstr ""
"Набуття членства дає змогу вилучати повідомлення в кінці кожної композиції."
msgid ""
"You can scrobble tracks for free, but only <span style=\" font-"
"weight:600;\">paid subscribers</span> can stream Last.fm radio from "
"Clementine."
"You can scrobble tracks for free, but only <span style=\" font-weight:600;"
"\">paid subscribers</span> can stream Last.fm radio from Clementine."
msgstr ""
"Ви можете вільно скроббити доріжки, але лише <span style=\" font-"
"weight:600;\">платні передплатники</span> можуть слухати потокове радіо "
"Last.fm з Clementine."
"Ви можете вільно скроббити доріжки, але лише <span style=\" font-weight:600;"
"\">платні передплатники</span> можуть слухати потокове радіо Last.fm з "
"Clementine."
msgid ""
"You need to launch System Preferences and turn on \"<span style=\" font-"
@ -1569,9 +1570,8 @@ msgid ""
"shortcuts in Clementine."
msgstr ""
"Потрібно запустити «Системні налаштування» та увімкнути параметр \"<span "
"style=\" font-style:italic;\">Увімкнути доступ для допоміжних "
"пристроїв</span>\", щоб використовувати глобальні комбінації клавіш в "
"Clementine."
"style=\" font-style:italic;\">Увімкнути доступ для допоміжних пристроїв</"
"span>\", щоб використовувати глобальні комбінації клавіш в Clementine."
msgid "Your Last.fm credentials were incorrect"
msgstr "Ваші облікові дані Last.fm неправильні"

View File

@ -458,6 +458,9 @@ msgstr ""
msgid "Details..."
msgstr ""
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr ""

View File

@ -458,6 +458,9 @@ msgstr ""
msgid "Details..."
msgstr ""
msgid "Devices"
msgstr ""
msgid "Directory"
msgstr ""

View File

@ -118,7 +118,7 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
player_(NULL),
library_(NULL),
global_shortcuts_(new GlobalShortcuts(this)),
devices_(new DeviceManager(task_manager_, this)),
devices_(NULL),
settings_dialog_(NULL),
add_stream_dialog_(new AddStreamDialog),
cover_manager_(NULL),
@ -150,6 +150,7 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
cover_manager_.reset(new AlbumCoverManager(network, library_->backend()));
settings_dialog_.reset(new SettingsDialog); // Needs RadioModel
radio_model_->SetSettingsDialog(settings_dialog_.get());
devices_ = new DeviceManager(database_, task_manager_, this),
// Initialise the UI
ui_->setupUi(this);
@ -195,6 +196,8 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
ui_->radio_view->SetModel(radio_model_);
ui_->devices_view->setModel(devices_);
organise_dialog_->AddDirectoryModel(library_->model()->directory_model());
cover_manager_->Init();

View File

@ -41,7 +41,7 @@
<enum>QTabWidget::North</enum>
</property>
<property name="currentIndex">
<number>2</number>
<number>3</number>
</property>
<property name="usesScrollButtons">
<bool>false</bool>
@ -125,6 +125,32 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="devices_tab">
<attribute name="title">
<string>Devices</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="DeviceView" name="devices_view">
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="allColumnsShowFocus">
<bool>true</bool>
</property>
<property name="headerHidden">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item>
@ -861,6 +887,11 @@
<header>widgets/nowplayingwidget.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>DeviceView</class>
<extends>QTreeView</extends>
<header>devices/deviceview.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="../../data/data.qrc"/>