Don't connect new devices automatically, put them in a list model. Add icons for ipods, android phones and USB memory sticks.
@ -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>
|
||||
|
BIN
data/icons/22x22/drive-removable-media-usb-pendrive.png
Normal file
After Width: | Height: | Size: 806 B |
BIN
data/icons/22x22/multimedia-player-ipod-U2-color.png
Normal file
After Width: | Height: | Size: 737 B |
BIN
data/icons/22x22/multimedia-player-ipod-U2-monochrome.png
Normal file
After Width: | Height: | Size: 679 B |
BIN
data/icons/22x22/multimedia-player-ipod-mini-blue.png
Normal file
After Width: | Height: | Size: 702 B |
BIN
data/icons/22x22/multimedia-player-ipod-mini-gold.png
Normal file
After Width: | Height: | Size: 702 B |
BIN
data/icons/22x22/multimedia-player-ipod-mini-green.png
Normal file
After Width: | Height: | Size: 700 B |
BIN
data/icons/22x22/multimedia-player-ipod-mini-pink.png
Normal file
After Width: | Height: | Size: 686 B |
BIN
data/icons/22x22/multimedia-player-ipod-mini-silver.png
Normal file
After Width: | Height: | Size: 655 B |
BIN
data/icons/22x22/multimedia-player-ipod-nano-black.png
Normal file
After Width: | Height: | Size: 562 B |
BIN
data/icons/22x22/multimedia-player-ipod-nano-white.png
Normal file
After Width: | Height: | Size: 582 B |
BIN
data/icons/22x22/multimedia-player-ipod-shuffle.png
Normal file
After Width: | Height: | Size: 521 B |
BIN
data/icons/22x22/multimedia-player-ipod-standard-color.png
Normal file
After Width: | Height: | Size: 720 B |
BIN
data/icons/22x22/multimedia-player-ipod-standard-monochrome.png
Normal file
After Width: | Height: | Size: 614 B |
BIN
data/icons/22x22/phone-google-nexus-one.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
data/icons/22x22/phone-htc-g1-white.png
Normal file
After Width: | Height: | Size: 944 B |
BIN
data/icons/22x22/phone-nokia-n900.png
Normal file
After Width: | Height: | Size: 892 B |
BIN
data/icons/22x22/phone-palm-pre.png
Normal file
After Width: | Height: | Size: 939 B |
BIN
data/icons/22x22/phone.png
Normal file
After Width: | Height: | Size: 600 B |
BIN
data/icons/32x32/drive-removable-media-usb-pendrive.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
data/icons/32x32/multimedia-player-ipod-U2-color.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
data/icons/32x32/multimedia-player-ipod-U2-monochrome.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
data/icons/32x32/multimedia-player-ipod-mini-blue.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
data/icons/32x32/multimedia-player-ipod-mini-gold.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
data/icons/32x32/multimedia-player-ipod-mini-green.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
data/icons/32x32/multimedia-player-ipod-mini-pink.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
data/icons/32x32/multimedia-player-ipod-mini-silver.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
data/icons/32x32/multimedia-player-ipod-nano-black.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
data/icons/32x32/multimedia-player-ipod-nano-white.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
data/icons/32x32/multimedia-player-ipod-shuffle.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
data/icons/32x32/multimedia-player-ipod-standard-color.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
data/icons/32x32/multimedia-player-ipod-standard-monochrome.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
data/icons/32x32/phone-google-nexus-one.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
data/icons/32x32/phone-htc-g1-white.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
data/icons/32x32/phone-nokia-n900.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
data/icons/32x32/phone-palm-pre.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
data/icons/32x32/phone.png
Normal file
After Width: | Height: | Size: 972 B |
BIN
data/icons/48x48/drive-removable-media-usb-pendrive.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
data/icons/48x48/multimedia-player-ipod-U2-color.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
data/icons/48x48/multimedia-player-ipod-U2-monochrome.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
data/icons/48x48/multimedia-player-ipod-mini-blue.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
data/icons/48x48/multimedia-player-ipod-mini-gold.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
data/icons/48x48/multimedia-player-ipod-mini-green.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
data/icons/48x48/multimedia-player-ipod-mini-pink.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
data/icons/48x48/multimedia-player-ipod-mini-silver.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
data/icons/48x48/multimedia-player-ipod-nano-black.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
data/icons/48x48/multimedia-player-ipod-nano-white.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
data/icons/48x48/multimedia-player-ipod-shuffle.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
data/icons/48x48/multimedia-player-ipod-standard-color.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
data/icons/48x48/multimedia-player-ipod-standard-monochrome.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
data/icons/48x48/phone-google-nexus-one.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
BIN
data/icons/48x48/phone-htc-g1-white.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
data/icons/48x48/phone-nokia-n900.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
data/icons/48x48/phone-palm-pre.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
data/icons/48x48/phone.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
8
data/schema-14.sql
Normal 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;
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -21,6 +21,7 @@
|
||||
|
||||
namespace Utilities {
|
||||
QString PrettyTime(int seconds);
|
||||
QString PrettySize(quint64 bytes);
|
||||
QString WordyTime(quint64 seconds);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -32,6 +32,7 @@ public:
|
||||
enum Field {
|
||||
Field_UniqueID = 0,
|
||||
Field_FriendlyName,
|
||||
Field_Icon,
|
||||
Field_Manufacturer,
|
||||
Field_Model,
|
||||
Field_Capacity,
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
25
src/devices/deviceview.cpp
Normal 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
@ -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
|
@ -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 {
|
||||
|
@ -458,6 +458,9 @@ msgstr ""
|
||||
msgid "Details..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Devices"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -459,6 +459,9 @@ msgstr ""
|
||||
msgid "Details..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Devices"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
|
@ -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)"
|
||||
|
@ -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 "Ομαλό σβήσιμο"
|
||||
|
@ -460,6 +460,9 @@ msgstr "Destination"
|
||||
msgid "Details..."
|
||||
msgstr "Details..."
|
||||
|
||||
msgid "Devices"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Directory"
|
||||
|
||||
|
@ -458,6 +458,9 @@ msgstr ""
|
||||
msgid "Details..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Devices"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
|
@ -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)"
|
||||
|
@ -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 ""
|
||||
|
@ -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"
|
||||
|
@ -458,6 +458,9 @@ msgstr ""
|
||||
msgid "Details..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Devices"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
|
@ -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..."
|
||||
|
@ -458,6 +458,9 @@ msgstr ""
|
||||
msgid "Details..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Devices"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
|
@ -458,6 +458,9 @@ msgstr ""
|
||||
msgid "Details..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Devices"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
|
@ -458,6 +458,9 @@ msgstr "Destinacion"
|
||||
msgid "Details..."
|
||||
msgstr "Detalhs..."
|
||||
|
||||
msgid "Devices"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Dorsièr"
|
||||
|
||||
|
@ -459,6 +459,9 @@ msgstr ""
|
||||
msgid "Details..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Devices"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
|
@ -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)"
|
||||
|
@ -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)"
|
||||
|
@ -458,6 +458,9 @@ msgstr ""
|
||||
msgid "Details..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Devices"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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ť?"
|
||||
|
@ -460,6 +460,9 @@ msgstr "Mål"
|
||||
msgid "Details..."
|
||||
msgstr "Detaljer..."
|
||||
|
||||
msgid "Devices"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr "Katalog"
|
||||
|
||||
|
@ -458,6 +458,9 @@ msgstr ""
|
||||
msgid "Details..."
|
||||
msgstr "Detaylar..."
|
||||
|
||||
msgid "Devices"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
|
@ -449,6 +449,9 @@ msgstr ""
|
||||
msgid "Details..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Devices"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
|
@ -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 неправильні"
|
||||
|
@ -458,6 +458,9 @@ msgstr ""
|
||||
msgid "Details..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Devices"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
|
@ -458,6 +458,9 @@ msgstr ""
|
||||
msgid "Details..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Devices"
|
||||
msgstr ""
|
||||
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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"/>
|
||||
|