Initial support for MTP devices

This commit is contained in:
David Sansome 2010-08-14 15:57:05 +00:00
parent 9c4282c61c
commit 3f5e188045
47 changed files with 817 additions and 3 deletions

View File

@ -58,6 +58,7 @@ else(WIN32)
pkg_check_modules(IMOBILEDEVICE libimobiledevice-1.0)
pkg_check_modules(PLIST libplist)
pkg_check_modules(USBMUXD libusbmuxd)
pkg_check_modules(LIBMTP libmtp)
endif(WIN32)
find_library(LASTFM_LIBRARIES lastfm)

View File

@ -520,6 +520,18 @@ if(IMOBILEDEVICE_FOUND AND PLIST_FOUND)
list(APPEND HEADERS devices/ilister.h)
endif(IMOBILEDEVICE_FOUND AND PLIST_FOUND)
# mtp device
if(LIBMTP_FOUND)
set(HAVE_LIBMTP ON)
include_directories(${LIBMTP_INCLUDE_DIRS})
list(APPEND SOURCES devices/mtpdevice.cpp)
list(APPEND SOURCES devices/mtploader.cpp)
list(APPEND HEADERS devices/mtpdevice.h)
list(APPEND HEADERS devices/mtploader.h)
endif(LIBMTP_FOUND)
# Mac specific startup stuff
if(APPLE)
list(APPEND SOURCES core/mac_startup.mm)
@ -547,6 +559,10 @@ list(APPEND OTHER_SOURCES
devices/ilister.h
devices/imobiledeviceconnection.cpp
devices/imobiledeviceconnection.h
devices/mtpdevice.cpp
devices/mtpdevice.h
devices/mtploader.cpp
devices/mtploader.h
ui/macsystemtrayicon.h
ui/macsystemtrayicon.mm
widgets/osd_mac.mm
@ -617,6 +633,9 @@ if(HAVE_IMOBILEDEVICE)
link_directories(${USBMUXD_LIBRARY_DIRS})
endif(HAVE_IMOBILEDEVICE)
if(LIBMTP_FOUND)
target_link_libraries(clementine_lib ${LIBMTP_LIBRARIES})
endif(LIBMTP_FOUND)
if (APPLE)
target_link_libraries(clementine_lib

View File

@ -42,5 +42,6 @@
#cmakedefine HAVE_LIBGPOD
#cmakedefine HAVE_GIO
#cmakedefine HAVE_IMOBILEDEVICE
#cmakedefine HAVE_LIBMTP
#endif // CONFIG_H_IN

View File

@ -476,6 +476,40 @@ void Song::InitFromLastFM(const lastfm::Track& track) {
}
#endif
#ifdef HAVE_LIBMTP
void Song::InitFromMTP(const LIBMTP_track_t* track) {
d->valid_ = true;
d->title_ = QString::fromUtf8(track->title);
d->artist_ = QString::fromUtf8(track->artist);
d->album_ = QString::fromUtf8(track->album);
d->composer_ = QString::fromUtf8(track->composer);
d->genre_ = QString::fromUtf8(track->genre);
d->filename_ = QString::fromUtf8(track->filename);
d->track_ = track->tracknumber;
d->length_ = track->duration / 1000;
d->samplerate_ = track->samplerate;
d->bitrate_ = track->bitrate;
d->filesize_ = track->filesize;
d->mtime_ = track->modificationdate;
d->ctime_ = track->modificationdate;
switch (track->filetype) {
case LIBMTP_FILETYPE_WAV: d->filetype_ = Type_Wav; break;
case LIBMTP_FILETYPE_MP3: d->filetype_ = Type_Mpeg; break;
case LIBMTP_FILETYPE_WMA: d->filetype_ = Type_Asf; break;
case LIBMTP_FILETYPE_OGG: d->filetype_ = Type_OggVorbis; break;
case LIBMTP_FILETYPE_MP4: d->filetype_ = Type_Mp4; break;
case LIBMTP_FILETYPE_AAC: d->filetype_ = Type_Mp4; break;
case LIBMTP_FILETYPE_FLAC: d->filetype_ = Type_OggFlac; break;
case LIBMTP_FILETYPE_MP2: d->filetype_ = Type_Mpeg; break;
case LIBMTP_FILETYPE_M4A: d->filetype_ = Type_Mp4; break;
default: d->filetype_ = Type_Unknown; break;
}
}
#endif
void Song::MergeFromSimpleMetaBundle(const Engine::SimpleMetaBundle &bundle) {
d->valid_ = true;

View File

@ -33,6 +33,10 @@
# include <gpod/itdb.h>
#endif
#ifdef HAVE_LIBMTP
# include <libmtp.h>
#endif
class SqlRow;
namespace lastfm {
@ -110,6 +114,10 @@ class Song {
void ToItdb(Itdb_Track* track) const;
#endif
#ifdef HAVE_LIBMTP
void InitFromMTP(const LIBMTP_track_t* track);
#endif
static QString Decode(const TagLib::String& tag, const QTextCodec* codec);
static QString Decode(const QString& tag, const QTextCodec* codec);

View File

@ -51,7 +51,7 @@ public:
virtual void FinishCopy(bool success);
virtual void FinishDelete(bool success);
void Eject();
virtual void Eject();
signals:
void TaskStarted(int id);

View File

@ -38,6 +38,9 @@
# include "afcdevice.h"
# include "ilister.h"
#endif
#ifdef HAVE_LIBMTP
# include "mtpdevice.h"
#endif
#include <QIcon>
#include <QMessageBox>
@ -173,6 +176,10 @@ DeviceManager::DeviceManager(BackgroundThread<Database>* database,
#ifdef HAVE_LIBGPOD
AddDeviceClass<GPodDevice>();
#endif
#ifdef HAVE_LIBMTP
AddDeviceClass<MtpDevice>();
#endif
}
DeviceManager::~DeviceManager() {
@ -470,6 +477,7 @@ boost::shared_ptr<ConnectedDevice> DeviceManager::Connect(int row) {
// Find a device class for this URL's scheme
if (device_classes_.contains(url.scheme())) {
device_url = url;
break;
}
}

View File

@ -121,9 +121,12 @@ QList<QUrl> GioLister::MakeDeviceUrls(const QString &id) {
uri = mounts_[id].uri;
}
// gphoto2 gives invalid hostnames with []:, characters in
uri.replace(QRegExp("//\\[usb:(\\d+),(\\d+)\\]"), "//usb-\\1-\\2");
QList<QUrl> ret;
ret << MakeUrlFromLocalPath(mount_point);
ret << uri;
ret << MakeUrlFromLocalPath(mount_point);
return ret;
}

View File

@ -31,7 +31,7 @@ GPodDevice::GPodDevice(
int database_id, bool first_time)
: ConnectedDevice(url, lister, unique_id, manager, database_id, first_time),
loader_thread_(new QThread(this)),
loader_(),
loader_(NULL),
db_(NULL)
{
}

72
src/devices/mtpdevice.cpp Normal file
View File

@ -0,0 +1,72 @@
/* 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 "devicemanager.h"
#include "mtpdevice.h"
#include "mtploader.h"
#include "library/librarybackend.h"
#include "library/librarymodel.h"
#include <libmtp.h>
bool MtpDevice::sInitialisedLibMTP = false;
MtpDevice::MtpDevice(const QUrl& url, DeviceLister* lister,
const QString& unique_id, DeviceManager* manager,
int database_id, bool first_time)
: ConnectedDevice(url, lister, unique_id, manager, database_id, first_time),
loader_thread_(new QThread(this)),
loader_(NULL)
{
if (!sInitialisedLibMTP) {
LIBMTP_Init();
sInitialisedLibMTP = true;
}
}
void MtpDevice::Init() {
InitBackendDirectory("/", first_time_, false);
model_->Init();
loader_ = new MtpLoader(url_.host(), manager_->task_manager(), backend_,
shared_from_this());
loader_->moveToThread(loader_thread_);
connect(loader_, SIGNAL(Error(QString)), SIGNAL(Error(QString)));
connect(loader_, SIGNAL(TaskStarted(int)), SIGNAL(TaskStarted(int)));
connect(loader_, SIGNAL(LoadFinished()), SLOT(LoadFinished()));
connect(loader_thread_, SIGNAL(started()), loader_, SLOT(LoadDatabase()));
loader_thread_->start();
}
void MtpDevice::LoadFinished() {
QMutexLocker l(&db_mutex_);
db_wait_cond_.wakeAll();
loader_->deleteLater();
loader_ = NULL;
}
bool MtpDevice::CopyToStorage(
const QString& source, const QString& destination, const Song& metadata,
bool overwrite, bool remove_original)
{
return false;
}
bool MtpDevice::DeleteFromStorage(const Song& metadata) {
return false;
}

56
src/devices/mtpdevice.h Normal file
View File

@ -0,0 +1,56 @@
/* 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 MTPDEVICE_H
#define MTPDEVICE_H
#include "connecteddevice.h"
#include <QMutex>
#include <QWaitCondition>
class MtpLoader;
class MtpDevice : public ConnectedDevice {
Q_OBJECT
public:
Q_INVOKABLE MtpDevice(const QUrl& url, DeviceLister* lister,
const QString& unique_id, DeviceManager* manager,
int database_id, bool first_time);
static QStringList url_schemes() { return QStringList() << "mtp" << "gphoto2"; }
void Init();
bool CopyToStorage(const QString& source, const QString& destination,
const Song& metadata, bool overwrite, bool remove_original);
bool DeleteFromStorage(const Song& metadata);
private slots:
void LoadFinished();
private:
static bool sInitialisedLibMTP;
QThread* loader_thread_;
MtpLoader* loader_;
QWaitCondition db_wait_cond_;
QMutex db_mutex_;
};
#endif // MTPDEVICE_H

114
src/devices/mtploader.cpp Normal file
View File

@ -0,0 +1,114 @@
/* 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 "connecteddevice.h"
#include "mtploader.h"
#include "core/song.h"
#include "core/taskmanager.h"
#include "library/librarybackend.h"
#include <libmtp.h>
MtpLoader::MtpLoader(const QString& hostname, TaskManager* task_manager,
LibraryBackend* backend, boost::shared_ptr<ConnectedDevice> device)
: QObject(NULL),
device_(device),
hostname_(hostname),
task_manager_(task_manager),
backend_(backend)
{
original_thread_ = thread();
}
MtpLoader::~MtpLoader() {
}
void MtpLoader::LoadDatabase() {
int task_id = task_manager_->StartTask(tr("Loading MTP device"));
emit TaskStarted(task_id);
TryLoad();
moveToThread(original_thread_);
task_manager_->SetTaskFinished(task_id);
emit LoadFinished();
}
bool MtpLoader::TryLoad() {
// Parse the URL
QRegExp host_re("^usb-(\\d+)-(\\d+)$");
if (host_re.indexIn(hostname_) == -1) {
emit Error(tr("Invalid MTP device: %1").arg(hostname_));
return false;
}
const unsigned int bus_location = host_re.cap(1).toInt();
const unsigned int device_num = host_re.cap(2).toInt();
// Get a list of devices from libmtp and figure out which one is ours
int count = 0;
LIBMTP_raw_device_t* raw_devices = NULL;
LIBMTP_error_number_t err = LIBMTP_Detect_Raw_Devices(&raw_devices, &count);
if (err != LIBMTP_ERROR_NONE) {
emit Error(tr("Error connecting MTP device"));
qWarning() << "MTP error:" << err;
return false;
}
LIBMTP_raw_device_t* raw_device = NULL;
for (int i=0 ; i<count ; ++i) {
if (raw_devices[i].bus_location == bus_location &&
raw_devices[i].devnum == device_num) {
raw_device = &raw_devices[i];
break;
}
}
if (!raw_device) {
emit Error(tr("MTP device not found"));
free(raw_devices);
return false;
}
// Connect to the device
LIBMTP_mtpdevice_t* device = LIBMTP_Open_Raw_Device(raw_device);
// Load the list of songs on the device
SongList songs;
LIBMTP_track_t* tracks = LIBMTP_Get_Tracklisting_With_Callback(device, NULL, NULL);
while (tracks) {
LIBMTP_track_t* track = tracks;
Song song;
song.InitFromMTP(track);
song.set_directory_id(1);
songs << song;
tracks = tracks->next;
LIBMTP_destroy_track_t(track);
}
// Need to remove all the existing songs in the database first
backend_->DeleteSongs(backend_->FindSongsInDirectory(1));
// Add the songs we've just loaded
backend_->AddOrUpdateSongs(songs);
free(raw_devices);
return true;
}

56
src/devices/mtploader.h Normal file
View File

@ -0,0 +1,56 @@
/* 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 MTPLOADER_H
#define MTPLOADER_H
#include <QObject>
#include <boost/shared_ptr.hpp>
class ConnectedDevice;
class LibraryBackend;
class TaskManager;
class MtpLoader : public QObject {
Q_OBJECT
public:
MtpLoader(const QString& hostname, TaskManager* task_manager,
LibraryBackend* backend, boost::shared_ptr<ConnectedDevice> device);
~MtpLoader();
public slots:
void LoadDatabase();
signals:
void Error(const QString& message);
void TaskStarted(int task_id);
void LoadFinished();
private:
bool TryLoad();
private:
boost::shared_ptr<ConnectedDevice> device_;
QThread* original_thread_;
QString hostname_;
TaskManager* task_manager_;
LibraryBackend* backend_;
};
#endif // MTPLOADER_H

View File

@ -634,6 +634,9 @@ msgstr ""
msgid "Error"
msgstr ""
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -842,6 +845,10 @@ msgstr ""
msgid "Invalid API key"
msgstr ""
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "صيغة غير متاحة"
@ -948,6 +955,9 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr ""
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -978,6 +988,9 @@ msgstr ""
msgid "MPC"
msgstr ""
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr ""

View File

@ -635,6 +635,9 @@ msgstr ""
msgid "Error"
msgstr ""
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -843,6 +846,10 @@ msgstr "Интернет"
msgid "Invalid API key"
msgstr ""
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr ""
@ -949,6 +956,9 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr ""
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -979,6 +989,9 @@ msgstr "MP4"
msgid "MPC"
msgstr ""
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr ""

View File

@ -648,6 +648,9 @@ msgstr "Equalitzador"
msgid "Error"
msgstr "Error"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -861,6 +864,10 @@ msgstr "Internet"
msgid "Invalid API key"
msgstr "Clau de l'API no vàlida"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Format invàlid"
@ -969,6 +976,9 @@ msgstr "Carrega la llista de reproducció..."
msgid "Loading Last.fm radio"
msgstr "Carregant la radio de Last.fm"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr "Carregant la base de dades de l'iPod"
@ -999,6 +1009,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -638,6 +638,9 @@ msgstr "Ekvalizér"
msgid "Error"
msgstr "Chyba"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -847,6 +850,10 @@ msgstr "Internet"
msgid "Invalid API key"
msgstr "Neplatný klíč API"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Neplatný formát"
@ -953,6 +960,9 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr "Načítám rádio Last.fm"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -983,6 +993,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -638,6 +638,9 @@ msgstr "Equalizer"
msgid "Error"
msgstr ""
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -848,6 +851,10 @@ msgstr ""
msgid "Invalid API key"
msgstr "Ugyldig API-nøgle"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Ugyldig format"
@ -954,6 +961,9 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr "Indlæser Last.fm-radio"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -984,6 +994,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr ""

View File

@ -648,6 +648,9 @@ msgstr "Equalizer"
msgid "Error"
msgstr "Fehler"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -861,6 +864,10 @@ msgstr "Internet"
msgid "Invalid API key"
msgstr "Ungültiger API-Schlüssel"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Ungültiges Format"
@ -969,6 +976,9 @@ msgstr "Wiedergabeliste laden..."
msgid "Loading Last.fm radio"
msgstr "Last.fm Radio wird geladen"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr "iPod-Datenbank wird geladen"
@ -999,6 +1009,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -650,6 +650,9 @@ msgstr "Ισοσταθμιστής"
msgid "Error"
msgstr "Σφάλμα"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -863,6 +866,10 @@ msgstr "Διαδίκτυο"
msgid "Invalid API key"
msgstr "Εσφαλμένο κλειδί API"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Εσφαλμένη διαμόρφωση"
@ -969,6 +976,9 @@ msgstr "Φόρτωση λίστας αναπαραγωγής..."
msgid "Loading Last.fm radio"
msgstr "Φόρτωμα Last.fm"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr "Φόρτωση της βάσης δεδομένων iPod"
@ -999,6 +1009,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -637,6 +637,9 @@ msgstr "Equalizer"
msgid "Error"
msgstr ""
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -846,6 +849,10 @@ msgstr "Internet"
msgid "Invalid API key"
msgstr "Invalid API key"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Invalid format"
@ -952,6 +959,9 @@ msgstr "Load playlist..."
msgid "Loading Last.fm radio"
msgstr "Loading Last.fm radio"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -982,6 +992,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr ""

View File

@ -635,6 +635,9 @@ msgstr "Equalizer"
msgid "Error"
msgstr ""
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -844,6 +847,10 @@ msgstr ""
msgid "Invalid API key"
msgstr "Invalid API key"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Invalid format"
@ -950,6 +957,9 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr "Loading Last.fm radio"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -980,6 +990,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr ""

View File

@ -650,6 +650,9 @@ msgstr "Ecualizador"
msgid "Error"
msgstr "Error"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -864,6 +867,10 @@ msgstr "Internet"
msgid "Invalid API key"
msgstr "Clave API inválida"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Formato inválido"
@ -972,6 +979,9 @@ msgstr "Cargar lista de reproducción"
msgid "Loading Last.fm radio"
msgstr "Cargando radio de Last.fm"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr "Cargando base de datos del iPod"
@ -1002,6 +1012,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -635,6 +635,9 @@ msgstr ""
msgid "Error"
msgstr "Virhe"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -844,6 +847,10 @@ msgstr "Internet"
msgid "Invalid API key"
msgstr ""
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr ""
@ -950,6 +957,9 @@ msgstr "Lataa soittolista..."
msgid "Loading Last.fm radio"
msgstr ""
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -980,6 +990,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -642,6 +642,9 @@ msgstr "Égaliseur"
msgid "Error"
msgstr "Erreur"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -853,6 +856,10 @@ msgstr "Internet"
msgid "Invalid API key"
msgstr "API key invalide"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Format invalide"
@ -963,6 +970,9 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr "Chargement de la radio Last.fm"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -993,6 +1003,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -634,6 +634,9 @@ msgstr ""
msgid "Error"
msgstr ""
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -843,6 +846,10 @@ msgstr ""
msgid "Invalid API key"
msgstr "Chave non válida da API"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Formato inválido"
@ -950,6 +957,9 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr "Carregando a rádio da Last.fm"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -980,6 +990,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr ""

View File

@ -645,6 +645,9 @@ msgstr "Hangszínszabályzó"
msgid "Error"
msgstr "Hiba"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -856,6 +859,10 @@ msgstr "Internet"
msgid "Invalid API key"
msgstr "Érvénytelen API kulcs"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Érvénytelen formátum"
@ -963,6 +970,9 @@ msgstr "Lejátszási lista betöltése..."
msgid "Loading Last.fm radio"
msgstr "Last.fm rádió betöltése"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr "iPod adatbázis betöltése"
@ -993,6 +1003,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -653,6 +653,9 @@ msgstr "Equalizzatore"
msgid "Error"
msgstr "Errore"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -868,6 +871,10 @@ msgstr "Internet"
msgid "Invalid API key"
msgstr "Chiave API non valida"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Formato non valido"
@ -976,6 +983,9 @@ msgstr "Carica la scaletta..."
msgid "Loading Last.fm radio"
msgstr "Caricamento radio Last.fm"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr "Caricamento database dell'iPod"
@ -1006,6 +1016,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -634,6 +634,9 @@ msgstr ""
msgid "Error"
msgstr ""
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -844,6 +847,10 @@ msgstr ""
msgid "Invalid API key"
msgstr ""
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr ""
@ -950,6 +957,9 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr ""
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -980,6 +990,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr ""

View File

@ -635,6 +635,9 @@ msgstr ""
msgid "Error"
msgstr ""
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -843,6 +846,10 @@ msgstr ""
msgid "Invalid API key"
msgstr ""
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr ""
@ -949,6 +956,9 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr ""
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -979,6 +989,9 @@ msgstr ""
msgid "MPC"
msgstr ""
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr ""

View File

@ -636,6 +636,9 @@ msgstr "Lydbalanse"
msgid "Error"
msgstr "Feil"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -846,6 +849,10 @@ msgstr "Internett"
msgid "Invalid API key"
msgstr "Ugyldig API-nøkkel"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Ugyldig format"
@ -952,6 +959,9 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr "Laster inn Last.fm radio"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -982,6 +992,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -645,6 +645,9 @@ msgstr "Equalizer"
msgid "Error"
msgstr "Fout"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -859,6 +862,10 @@ msgstr "Internet"
msgid "Invalid API key"
msgstr "Ongeldige API-sleutel"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Ongeldig formaat"
@ -966,6 +973,9 @@ msgstr "Afspeellijst laden..."
msgid "Loading Last.fm radio"
msgstr "Last.fm radio laden"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr "iPod database laden"
@ -996,6 +1006,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -634,6 +634,9 @@ msgstr "Egalizador"
msgid "Error"
msgstr ""
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -842,6 +845,10 @@ msgstr "Sus Internet"
msgid "Invalid API key"
msgstr "Clau API pas valabla"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Format incorrècte"
@ -948,6 +955,9 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr "Cargament de la ràdio Last.fm"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -978,6 +988,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr ""

View File

@ -641,6 +641,9 @@ msgstr "Korektor dźwięku"
msgid "Error"
msgstr "Błąd"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -850,6 +853,10 @@ msgstr "Internet"
msgid "Invalid API key"
msgstr "Zły klucz API"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Błędny format"
@ -958,6 +965,9 @@ msgstr "Wczytaj listę odtwarzania"
msgid "Loading Last.fm radio"
msgstr "Ładowanie radia Last.fm"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr "Wczytywanie bazy danych iPod-a"
@ -988,6 +998,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -646,6 +646,9 @@ msgstr "Equalizador"
msgid "Error"
msgstr "Erro"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -857,6 +860,10 @@ msgstr "Internet"
msgid "Invalid API key"
msgstr "Chave API inválida"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Formato inválido"
@ -964,6 +971,9 @@ msgstr "Carregar lista..."
msgid "Loading Last.fm radio"
msgstr "Carregando a rádio Last.fm"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr "Carregando base de dados iPod"
@ -994,6 +1004,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -641,6 +641,9 @@ msgstr "Equalizador"
msgid "Error"
msgstr "Erro"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -850,6 +853,10 @@ msgstr "Internet"
msgid "Invalid API key"
msgstr "Chave API inválida"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Formato inválido"
@ -958,6 +965,9 @@ msgstr "Carregar lista de reprodução..."
msgid "Loading Last.fm radio"
msgstr "Carregando rádio Last.fm"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -988,6 +998,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -634,6 +634,9 @@ msgstr "Egalizator"
msgid "Error"
msgstr ""
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -843,6 +846,10 @@ msgstr ""
msgid "Invalid API key"
msgstr "Cheie API invalidă"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Format invalid"
@ -949,6 +956,9 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr "Se încarcă radio Last.fm"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -979,6 +989,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr ""

View File

@ -642,6 +642,9 @@ msgstr "Эквалайзер"
msgid "Error"
msgstr "Ошибка"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -854,6 +857,10 @@ msgstr "Интернет"
msgid "Invalid API key"
msgstr "Неправильный ключ API"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Неверный формат"
@ -961,6 +968,9 @@ msgstr "Загрузить список воспроизведения..."
msgid "Loading Last.fm radio"
msgstr "Загрузка радио Last.fm"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr "Загружается база данных iPod"
@ -991,6 +1001,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -646,6 +646,9 @@ msgstr "Ekvalizér"
msgid "Error"
msgstr "Chyba"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -857,6 +860,10 @@ msgstr "Internet"
msgid "Invalid API key"
msgstr "Nefiunkčný API kľúč"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Nefunkčný formát"
@ -963,6 +970,9 @@ msgstr "Načítať playlist..."
msgid "Loading Last.fm radio"
msgstr "Načítava sa Last.fm rádio"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr "Načítava sa iPod databáza"
@ -993,6 +1003,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -644,6 +644,9 @@ msgstr "Izenačevalnik"
msgid "Error"
msgstr "Napaka"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -856,6 +859,10 @@ msgstr "Splet"
msgid "Invalid API key"
msgstr "Neveljaven API ključ"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Neveljavna vrsta"
@ -962,6 +969,9 @@ msgstr "Naloži predvajalni seznam..."
msgid "Loading Last.fm radio"
msgstr "Nalaganje Last.fm radia"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr "Nalagam iPod podatkovno bazo"
@ -992,6 +1002,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -638,6 +638,9 @@ msgstr "Еквилајзер"
msgid "Error"
msgstr "Грешка"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -847,6 +850,10 @@ msgstr "Интернет"
msgid "Invalid API key"
msgstr "Неисправан АПИ кључ"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Неисправан формат"
@ -954,6 +961,9 @@ msgstr "Учитај листу нумера"
msgid "Loading Last.fm radio"
msgstr "Учитавам ЛастФМ радио"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr "Учитавам Ајподову базу података"
@ -984,6 +994,9 @@ msgstr "MП4"
msgid "MPC"
msgstr "МПЦ"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Магнатјун"

View File

@ -641,6 +641,9 @@ msgstr "Equalizer"
msgid "Error"
msgstr "Fel"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -852,6 +855,10 @@ msgstr "Internet"
msgid "Invalid API key"
msgstr "Felaktig API-nyckel"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Ogiltigt format"
@ -958,6 +965,9 @@ msgstr "Läs in spellista..."
msgid "Loading Last.fm radio"
msgstr "Laddar Last.fm radio"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr "Läser in iPod-databas"
@ -988,6 +998,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -635,6 +635,9 @@ msgstr "Ekolayzır"
msgid "Error"
msgstr "Hata"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -845,6 +848,10 @@ msgstr "İnternet"
msgid "Invalid API key"
msgstr "Geçersiz API anahtarı"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Geçersiz biçim"
@ -953,6 +960,9 @@ msgstr "Çalma listesi yükle..."
msgid "Loading Last.fm radio"
msgstr "Last.fm radyosu yükleniyor"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr "iPod veritabanı yükleniyor"
@ -983,6 +993,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -625,6 +625,9 @@ msgstr ""
msgid "Error"
msgstr ""
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -833,6 +836,10 @@ msgstr ""
msgid "Invalid API key"
msgstr ""
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr ""
@ -939,6 +946,9 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr ""
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -969,6 +979,9 @@ msgstr ""
msgid "MPC"
msgstr ""
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr ""

View File

@ -644,6 +644,9 @@ msgstr "Еквалайзер"
msgid "Error"
msgstr "Помилка"
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -856,6 +859,10 @@ msgstr "Інтернет"
msgid "Invalid API key"
msgstr "Неправильний ключ API"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "Не чинний формат"
@ -962,6 +969,9 @@ msgstr "Завантажити список відтворення..."
msgid "Loading Last.fm radio"
msgstr "Завантаження радіо Last.fm"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr "Завантаження бази даних iPod"
@ -992,6 +1002,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"

View File

@ -634,6 +634,9 @@ msgstr ""
msgid "Error"
msgstr ""
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -842,6 +845,10 @@ msgstr ""
msgid "Invalid API key"
msgstr ""
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr ""
@ -948,6 +955,9 @@ msgstr ""
msgid "Loading Last.fm radio"
msgstr ""
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -978,6 +988,9 @@ msgstr ""
msgid "MPC"
msgstr ""
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr ""

View File

@ -639,6 +639,9 @@ msgstr "等化器"
msgid "Error"
msgstr ""
msgid "Error connecting MTP device"
msgstr ""
msgid "Error copying songs"
msgstr ""
@ -848,6 +851,10 @@ msgstr "網際網路"
msgid "Invalid API key"
msgstr "無效的 API key"
#, qt-format
msgid "Invalid MTP device: %1"
msgstr ""
msgid "Invalid format"
msgstr "無效的格式"
@ -954,6 +961,9 @@ msgstr "載入播放清單..."
msgid "Loading Last.fm radio"
msgstr "載入 Last.fm電台"
msgid "Loading MTP device"
msgstr ""
msgid "Loading iPod database"
msgstr ""
@ -984,6 +994,9 @@ msgstr "MP4"
msgid "MPC"
msgstr "MPC"
msgid "MTP device not found"
msgstr ""
msgid "Magnatune"
msgstr "Magnatune"