diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e32bd15be..d925b8e0f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -493,14 +493,21 @@ if(GIO_FOUND) list(APPEND HEADERS devices/giolister.h) endif(GIO_FOUND) +# libimobiledevice backend and device if(IMOBILEDEVICE_FOUND AND PLIST_FOUND) set(HAVE_IMOBILEDEVICE ON) include_directories(${IMOBILEDEVICE_INCLUDE_DIRS}) include_directories(${PLIST_INCLUDE_DIRS}) + list(APPEND SOURCES devices/afcdevice.cpp) list(APPEND SOURCES devices/afcfile.cpp) + list(APPEND SOURCES devices/afctransfer.cpp) list(APPEND SOURCES devices/ilister.cpp) + list(APPEND SOURCES devices/imobiledeviceconnection.cpp) + + list(APPEND HEADERS devices/afcdevice.h) list(APPEND HEADERS devices/afcfile.h) + list(APPEND HEADERS devices/afctransfer.h) list(APPEND HEADERS devices/ilister.h) endif(IMOBILEDEVICE_FOUND AND PLIST_FOUND) @@ -514,8 +521,12 @@ endif(APPLE) list(APPEND OTHER_SOURCES core/macglobalshortcutbackend.h core/macglobalshortcutbackend.mm + devices/afcdevice.cpp + devices/afcdevice.h devices/afcfile.cpp devices/afcfile.h + devices/afctransfer.cpp + devices/afctransfer.h devices/devicekitlister.h devices/devicekitlister.cpp devices/gpoddevice.cpp @@ -524,6 +535,8 @@ list(APPEND OTHER_SOURCES devices/gpodloader.h devices/ilister.cpp devices/ilister.h + devices/imobiledeviceconnection.cpp + devices/imobiledeviceconnection.h ui/macsystemtrayicon.h ui/macsystemtrayicon.mm widgets/osd_mac.mm diff --git a/src/core/utilities.cpp b/src/core/utilities.cpp index cf79b5b89..c1704388b 100644 --- a/src/core/utilities.cpp +++ b/src/core/utilities.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #if defined(Q_OS_UNIX) # include @@ -109,4 +110,29 @@ quint64 FileSystemFreeSpace(const QString& path) { return 0; } +QString MakeTempDir() { + QString path; + { + QTemporaryFile tempfile; + tempfile.open(); + path = tempfile.fileName(); + } + + QDir d; + d.mkdir(path); + + return path; +} + +void RemoveRecursive(const QString& path) { + QDir dir(path); + foreach (const QString& child, dir.entryList(QDir::NoDotAndDotDot | QDir::Dirs)) + RemoveRecursive(path + "/" + child); + + foreach (const QString& child, dir.entryList(QDir::NoDotAndDotDot | QDir::Files)) + QFile::remove(path + "/" + child); + + dir.rmdir(path); +} + } // namespace diff --git a/src/core/utilities.h b/src/core/utilities.h index 42df881eb..726caf731 100644 --- a/src/core/utilities.h +++ b/src/core/utilities.h @@ -26,6 +26,9 @@ namespace Utilities { quint64 FileSystemCapacity(const QString& path); quint64 FileSystemFreeSpace(const QString& path); + + QString MakeTempDir(); + void RemoveRecursive(const QString& path); } #endif // UTILITIES_H diff --git a/src/devices/afcdevice.cpp b/src/devices/afcdevice.cpp new file mode 100644 index 000000000..a8d690653 --- /dev/null +++ b/src/devices/afcdevice.cpp @@ -0,0 +1,84 @@ +/* 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 . +*/ + +#include "afcdevice.h" +#include "afctransfer.h" +#include "devicemanager.h" +#include "gpodloader.h" +#include "core/utilities.h" + +#include + +AfcDevice::AfcDevice( + 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)), + transfer_(NULL), + loader_(NULL), + db_(NULL) +{ + // Make a new temporary directory for the iTunesDB. We copy it off the iPod + // so that libgpod can have a local directory to use. + local_path_ = Utilities::MakeTempDir(); + InitBackendDirectory(local_path_, first_time); + model_->Init(); + + transfer_ = new AfcTransfer(url.host(), local_path_, manager_->task_manager()); + transfer_->moveToThread(loader_thread_); + + connect(transfer_, SIGNAL(TaskStarted(int)), SIGNAL(TaskStarted(int))); + connect(transfer_, SIGNAL(CopyFinished()), SLOT(CopyFinished())); + connect(loader_thread_, SIGNAL(started()), transfer_, SLOT(CopyFromDevice())); + loader_thread_->start(); +} + +AfcDevice::~AfcDevice() { + Utilities::RemoveRecursive(local_path_); +} + +void AfcDevice::CopyFinished() { + transfer_->deleteLater(); + transfer_ = NULL; + + // Now load the songs from the local database + loader_ = new GPodLoader(local_path_, manager_->task_manager(), backend_); + loader_->moveToThread(loader_thread_); + + connect(loader_, SIGNAL(Error(QString)), SIGNAL(Error(QString))); + connect(loader_, SIGNAL(TaskStarted(int)), SIGNAL(TaskStarted(int))); + connect(loader_, SIGNAL(LoadFinished(Itdb_iTunesDB*)), SLOT(LoadFinished(Itdb_iTunesDB*))); + QMetaObject::invokeMethod(loader_, "LoadDatabase"); +} + +void AfcDevice::LoadFinished(Itdb_iTunesDB* db) { + QMutexLocker l(&db_mutex_); + db_ = db; + db_wait_cond_.wakeAll(); + + loader_->deleteLater(); + loader_ = NULL; +} + +bool AfcDevice::CopyToStorage(const QString &source, const QString &destination, + const Song &metadata, bool overwrite, + bool remove_original) { + return false; +} + +bool AfcDevice::DeleteFromStorage(const Song &metadata) { + return false; +} diff --git a/src/devices/afcdevice.h b/src/devices/afcdevice.h new file mode 100644 index 000000000..c8c526703 --- /dev/null +++ b/src/devices/afcdevice.h @@ -0,0 +1,64 @@ +/* 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 . +*/ + +#ifndef AFCDEVICE_H +#define AFCDEVICE_H + +#include "connecteddevice.h" + +#include +#include + +#include + +class AfcTransfer; +class GPodLoader; + +class AfcDevice : public ConnectedDevice { + Q_OBJECT + +public: + Q_INVOKABLE AfcDevice(const QUrl& url, DeviceLister* lister, + const QString& unique_id, DeviceManager* manager, + int database_id, bool first_time); + ~AfcDevice(); + + static QStringList url_schemes() { return QStringList() << "afc"; } + + bool CopyToStorage(const QString &source, const QString &destination, + const Song &metadata, bool overwrite, bool remove_original); + bool DeleteFromStorage(const Song &metadata); + +private slots: + void CopyFinished(); + void LoadFinished(Itdb_iTunesDB* db); + +private: + void RemoveRecursive(const QString& path); + +private: + QThread* loader_thread_; + AfcTransfer* transfer_; + GPodLoader* loader_; + + QString local_path_; + + QWaitCondition db_wait_cond_; + QMutex db_mutex_; + Itdb_iTunesDB* db_; +}; + +#endif // AFCDEVICE_H diff --git a/src/devices/afcfile.cpp b/src/devices/afcfile.cpp index 226d4fbab..146e4a30d 100644 --- a/src/devices/afcfile.cpp +++ b/src/devices/afcfile.cpp @@ -1,18 +1,27 @@ #include "afcfile.h" +#include "imobiledeviceconnection.h" #include -AFCFile::AFCFile(afc_client_t client, const QUrl& url, QObject* parent) - : QIODevice(parent), - client_(client), - url_(url) { +AfcFile::AfcFile(afc_client_t client, const QString& path, QObject* parent) + : QIODevice(parent), + client_(client), + path_(path) +{ } -AFCFile::~AFCFile() { +AfcFile::AfcFile(iMobileDeviceConnection* connection, const QString& path, QObject* parent) + : QIODevice(parent), + client_(connection->afc()), + path_(path) +{ +} + +AfcFile::~AfcFile() { } -bool AFCFile::open(QIODevice::OpenMode mode) { +bool AfcFile::open(QIODevice::OpenMode mode) { afc_file_mode_t afc_mode; switch (mode) { case ReadOnly: @@ -29,7 +38,7 @@ bool AFCFile::open(QIODevice::OpenMode mode) { afc_mode = AFC_FOPEN_RW; } afc_error_t err = afc_file_open( - client_, url_.path().toUtf8().constData(), afc_mode, &handle_); + client_, path_.toUtf8().constData(), afc_mode, &handle_); if (err != AFC_E_SUCCESS) { return false; } @@ -37,12 +46,12 @@ bool AFCFile::open(QIODevice::OpenMode mode) { return QIODevice::open(mode); } -void AFCFile::close() { +void AfcFile::close() { afc_file_close(client_, handle_); QIODevice::close(); } -bool AFCFile::seek(qint64 pos) { +bool AfcFile::seek(qint64 pos) { afc_error_t err = afc_file_seek(client_, handle_, pos, SEEK_SET); if (err != AFC_E_SUCCESS) { return false; @@ -51,7 +60,7 @@ bool AFCFile::seek(qint64 pos) { return true; } -qint64 AFCFile::readData(char* data, qint64 max_size) { +qint64 AfcFile::readData(char* data, qint64 max_size) { uint32_t bytes_read = 0; afc_error_t err = afc_file_read(client_, handle_, data, max_size, &bytes_read); if (err != AFC_E_SUCCESS) { @@ -60,7 +69,7 @@ qint64 AFCFile::readData(char* data, qint64 max_size) { return bytes_read; } -qint64 AFCFile::writeData(const char* data, qint64 max_size) { +qint64 AfcFile::writeData(const char* data, qint64 max_size) { uint32_t bytes_written = 0; afc_error_t err = afc_file_write(client_, handle_, data, max_size, &bytes_written); if (err != AFC_E_SUCCESS) { diff --git a/src/devices/afcfile.h b/src/devices/afcfile.h index 7b2f720a3..777d5c064 100644 --- a/src/devices/afcfile.h +++ b/src/devices/afcfile.h @@ -4,23 +4,25 @@ #include #include -#include -struct afc_client_private; -typedef afc_client_private* afc_client_t; +#include -class AFCFile : public QIODevice { +class iMobileDeviceConnection; + +class AfcFile : public QIODevice { Q_OBJECT - public: - AFCFile(afc_client_t client, const QUrl& url, QObject* parent = 0); - ~AFCFile(); + +public: + AfcFile(afc_client_t client, const QString& path, QObject* parent = 0); + AfcFile(iMobileDeviceConnection* connection, const QString& path, QObject* parent = 0); + ~AfcFile(); // QIODevice void close(); bool open(OpenMode mode); bool seek(qint64 pos); - private: +private: // QIODevice qint64 readData(char* data, qint64 max_size); qint64 writeData(const char* data, qint64 max_size); @@ -28,7 +30,7 @@ class AFCFile : public QIODevice { afc_client_t client_; uint64_t handle_; - QUrl url_; + QString path_; }; #endif diff --git a/src/devices/afctransfer.cpp b/src/devices/afctransfer.cpp new file mode 100644 index 000000000..2ab4b4781 --- /dev/null +++ b/src/devices/afctransfer.cpp @@ -0,0 +1,78 @@ +/* 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 . +*/ + +#include "afcfile.h" +#include "afctransfer.h" +#include "imobiledeviceconnection.h" +#include "core/taskmanager.h" + +#include +#include + +AfcTransfer::AfcTransfer(const QString& uuid, const QString& local_destination, + TaskManager* task_manager, QObject* parent) + : QObject(parent), + task_manager_(task_manager), + uuid_(uuid), + local_destination_(local_destination) +{ + original_thread_ = thread(); +} + +void AfcTransfer::CopyFromDevice() { + int task_id = task_manager_->StartTask(tr("Copying iPod database")); + emit TaskStarted(task_id); + + // Connect to the device + iMobileDeviceConnection c(uuid_); + + CopyDirFromDevice(&c, "/iTunes_Control/Device"); + CopyDirFromDevice(&c, "/iTunes_Control/iTunes"); + + moveToThread(original_thread_); + task_manager_->SetTaskFinished(task_id); + emit CopyFinished(); +} + +void AfcTransfer::CopyDirFromDevice(iMobileDeviceConnection* c, const QString& path) { + foreach (const QString& filename, c->ReadDirectory(path, QDir::Files | QDir::NoDotAndDotDot)) { + CopyFileFromDevice(c, path + "/" + filename); + } + + foreach (const QString& dir, c->ReadDirectory(path, QDir::Dirs | QDir::NoDotAndDotDot)) { + CopyDirFromDevice(c, path + "/" + dir); + } +} + +void AfcTransfer::CopyFileFromDevice(iMobileDeviceConnection *c, const QString &path) { + QString local_filename = local_destination_ + path; + QString local_dir = local_filename.section('/', 0, -2); + + QDir d; + d.mkpath(local_dir); + + QFile dest(local_filename); + AfcFile source(c, path); + + dest.open(QIODevice::WriteOnly); + source.open(QIODevice::ReadOnly); + + dest.write(source.readAll()); +} + +void AfcTransfer::CopyToDevice() { + +} diff --git a/src/devices/afctransfer.h b/src/devices/afctransfer.h new file mode 100644 index 000000000..c2cba8221 --- /dev/null +++ b/src/devices/afctransfer.h @@ -0,0 +1,52 @@ +/* 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 . +*/ + +#ifndef AFCTRANSFER_H +#define AFCTRANSFER_H + +#include + +class iMobileDeviceConnection; +class TaskManager; + +class AfcTransfer : public QObject { + Q_OBJECT + +public: + AfcTransfer(const QString& uuid, const QString& local_destination, + TaskManager* task_manager, QObject* parent = 0); + +public slots: + void CopyFromDevice(); + void CopyToDevice(); + +signals: + void TaskStarted(int task_id); + void CopyFinished(); + +private: + void CopyDirFromDevice(iMobileDeviceConnection* c, const QString& path); + void CopyFileFromDevice(iMobileDeviceConnection* c, const QString& path); + +private: + QThread* original_thread_; + + TaskManager* task_manager_; + QString uuid_; + QString local_destination_; +}; + +#endif // AFCTRANSFER_H diff --git a/src/devices/devicemanager.cpp b/src/devices/devicemanager.cpp index e09ac622c..d0bde39de 100644 --- a/src/devices/devicemanager.cpp +++ b/src/devices/devicemanager.cpp @@ -35,6 +35,7 @@ # include "giolister.h" #endif #ifdef HAVE_IMOBILEDEVICE +# include "afcdevice.h" # include "ilister.h" #endif @@ -162,6 +163,7 @@ DeviceManager::DeviceManager(BackgroundThread* database, #endif #ifdef HAVE_IMOBILEDEVICE AddLister(new iLister); + AddDeviceClass(); #endif AddDeviceClass(); diff --git a/src/devices/ilister.cpp b/src/devices/ilister.cpp index 611619905..fbf706031 100644 --- a/src/devices/ilister.cpp +++ b/src/devices/ilister.cpp @@ -1,18 +1,15 @@ #include "ilister.h" +#include "imobiledeviceconnection.h" -#include #include #include -#include - iLister::iLister() { } iLister::~iLister() { } - void iLister::Init() { idevice_event_subscribe(&EventCallback, reinterpret_cast(this)); } @@ -36,72 +33,6 @@ void iLister::EventCallback(const idevice_event_t* event, void* context) { } -iLister::Connection::Connection(const char* uuid) - : device_(NULL), lockdown_(NULL), afc_(NULL), afc_port_(0) { - idevice_error_t err = idevice_new(&device_, uuid); - if (err != IDEVICE_E_SUCCESS) { - qWarning() << "idevice error:" << err; - return; - } - - const char* label = QCoreApplication::applicationName().toUtf8().constData(); - lockdownd_error_t lockdown_err = - lockdownd_client_new_with_handshake(device_, &lockdown_, label); - if (lockdown_err != LOCKDOWN_E_SUCCESS) { - qWarning() << "lockdown error:" << lockdown_err; - return; - } - - lockdown_err = lockdownd_start_service(lockdown_, "com.apple.afc", &afc_port_); - if (lockdown_err != LOCKDOWN_E_SUCCESS) { - qWarning() << "lockdown error:" << lockdown_err; - return; - } - - afc_error_t afc_err = afc_client_new(device_, afc_port_, &afc_); - if (afc_err != 0) { - qWarning() << "afc error:" << afc_err; - return; - } -} - -iLister::Connection::~Connection() { - if (afc_) { - afc_client_free(afc_); - } - if (lockdown_) { - lockdownd_client_free(lockdown_); - } - if (device_) { - idevice_free(device_); - } -} - -QString iLister::Connection::GetProperty(const char* property) { - plist_t node = NULL; - lockdownd_get_value(lockdown_, NULL, property, &node); - char* value = NULL; - plist_get_string_val(node, &value); - plist_free(node); - - QString ret = QString::fromUtf8(value); - free(value); - return ret; -} - -quint64 iLister::Connection::GetInfoLongLong(const char* key) { - char* value = NULL; - afc_error_t err = afc_get_device_info_key(afc_, key, &value); - if (err != AFC_E_SUCCESS || !value) { - return 0; - } - QString num = QString::fromAscii(value); - quint64 ret = num.toULongLong(); - free(value); - return ret; -} - - void iLister::DeviceAddedCallback(const char* uuid) { qDebug() << Q_FUNC_INFO; @@ -202,10 +133,10 @@ QList iLister::MakeDeviceUrls(const QString& id) { void iLister::UnmountDevice(const QString& id) { } -iLister::DeviceInfo iLister::ReadDeviceInfo(const char *uuid) { +iLister::DeviceInfo iLister::ReadDeviceInfo(const char* uuid) { DeviceInfo ret; - Connection conn(uuid); + iMobileDeviceConnection conn(uuid); ret.uuid = uuid; ret.product_type = conn.GetProperty("ProductType"); ret.free_bytes = conn.GetInfoLongLong("FSFreeBytes"); diff --git a/src/devices/ilister.h b/src/devices/ilister.h index c945df9ba..7c9f980ab 100644 --- a/src/devices/ilister.h +++ b/src/devices/ilister.h @@ -3,9 +3,7 @@ #include "devicelister.h" -#include #include -#include #include @@ -15,7 +13,7 @@ class iLister : public DeviceLister { iLister(); ~iLister(); - int priority() const { return 25; } + int priority() const { return 120; } virtual QStringList DeviceUniqueIDs(); virtual QStringList DeviceIcons(const QString& id); @@ -38,22 +36,6 @@ class iLister : public DeviceLister { quint64 total_bytes; }; - class Connection { - public: - explicit Connection(const char* uuid); - ~Connection(); - - QString GetProperty(const char* property); - quint64 GetInfoLongLong(const char* key); - - private: - idevice_t device_; - lockdownd_client_t lockdown_; - afc_client_t afc_; - - uint16_t afc_port_; - }; - virtual void Init(); static void EventCallback(const idevice_event_t* event, void* context); diff --git a/src/devices/imobiledeviceconnection.cpp b/src/devices/imobiledeviceconnection.cpp new file mode 100644 index 000000000..e035f6fc8 --- /dev/null +++ b/src/devices/imobiledeviceconnection.cpp @@ -0,0 +1,143 @@ +/* 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 . +*/ + +#include "imobiledeviceconnection.h" + +#include + +#include +#include + +iMobileDeviceConnection::iMobileDeviceConnection(const QString& uuid) + : device_(NULL), lockdown_(NULL), afc_(NULL), afc_port_(0) { + idevice_error_t err = idevice_new(&device_, uuid.toUtf8().constData()); + if (err != IDEVICE_E_SUCCESS) { + qWarning() << "idevice error:" << err; + return; + } + + const char* label = QCoreApplication::applicationName().toUtf8().constData(); + lockdownd_error_t lockdown_err = + lockdownd_client_new_with_handshake(device_, &lockdown_, label); + if (lockdown_err != LOCKDOWN_E_SUCCESS) { + qWarning() << "lockdown error:" << lockdown_err; + return; + } + + lockdown_err = lockdownd_start_service(lockdown_, "com.apple.afc", &afc_port_); + if (lockdown_err != LOCKDOWN_E_SUCCESS) { + qWarning() << "lockdown error:" << lockdown_err; + return; + } + + afc_error_t afc_err = afc_client_new(device_, afc_port_, &afc_); + if (afc_err != 0) { + qWarning() << "afc error:" << afc_err; + return; + } +} + +iMobileDeviceConnection::~iMobileDeviceConnection() { + if (afc_) { + afc_client_free(afc_); + } + if (lockdown_) { + lockdownd_client_free(lockdown_); + } + if (device_) { + idevice_free(device_); + } +} + +QString iMobileDeviceConnection::GetProperty(const QString& property) { + plist_t node = NULL; + lockdownd_get_value(lockdown_, NULL, property.toUtf8().constData(), &node); + char* value = NULL; + plist_get_string_val(node, &value); + plist_free(node); + + QString ret = QString::fromUtf8(value); + free(value); + return ret; +} + +quint64 iMobileDeviceConnection::GetInfoLongLong(const QString& key) { + char* value = NULL; + afc_error_t err = afc_get_device_info_key(afc_, key.toUtf8().constData(), &value); + if (err != AFC_E_SUCCESS || !value) { + return 0; + } + QString num = QString::fromAscii(value); + quint64 ret = num.toULongLong(); + free(value); + return ret; +} + +QStringList iMobileDeviceConnection::ReadDirectory(const QString& path, + QDir::Filters filters) { + char** list = NULL; + afc_error_t err = afc_read_directory(afc_, path.toUtf8().constData(), &list); + if (err != AFC_E_SUCCESS || !list) { + return QStringList(); + } + + QStringList ret; + for (char** p = list ; *p != NULL ; ++p) { + QString filename = QString::fromUtf8(*p); + free(*p); + + if (filters == QDir::NoFilter) + ret << filename; + else { + if (filters & QDir::NoDotAndDotDot && (filename == "." || filename == "..")) + continue; + if (!(filters & QDir::Hidden) && filename.startsWith(".")) + continue; + + QString filetype = GetFileInfo(path + "/" + filename, "st_ifmt"); + if ((filetype == "S_IFREG" && (filters & QDir::Files)) || + (filetype == "S_IFDIR" && (filters & QDir::Dirs)) || + (filetype == "S_IFLNK" && (!(filters & QDir::NoSymLinks)))) + ret << filename; + } + } + free(list); + + return ret; +} + +QString iMobileDeviceConnection::GetFileInfo(const QString& path, const QString& key) { + QString ret; + char** infolist = NULL; + afc_error_t err = afc_get_file_info(afc_, path.toUtf8().constData(), &infolist); + if (err != AFC_E_SUCCESS || !infolist) { + return ret; + } + + QString last_key; + for (char** p = infolist ; *p != NULL ; ++p) { + if (last_key.isNull()) { + last_key = QString::fromUtf8(*p); + } else { + if (last_key == key) + ret = QString::fromUtf8(*p); + last_key = QString(); + } + free(*p); + } + free(infolist); + return ret; +} diff --git a/src/devices/imobiledeviceconnection.h b/src/devices/imobiledeviceconnection.h new file mode 100644 index 000000000..a24222d44 --- /dev/null +++ b/src/devices/imobiledeviceconnection.h @@ -0,0 +1,50 @@ +/* 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 . +*/ + +#ifndef IMOBILEDEVICECONNECTION_H +#define IMOBILEDEVICECONNECTION_H + +#include +#include +#include + +#include +#include + +class iMobileDeviceConnection { +public: + iMobileDeviceConnection(const QString& uuid); + ~iMobileDeviceConnection(); + + afc_client_t afc() { return afc_; } + + QString GetProperty(const QString& property); + quint64 GetInfoLongLong(const QString& key); + QStringList ReadDirectory(const QString& path, QDir::Filters filters = QDir::NoFilter); + +private: + Q_DISABLE_COPY(iMobileDeviceConnection); + + QString GetFileInfo(const QString& path, const QString& key); + + idevice_t device_; + lockdownd_client_t lockdown_; + afc_client_t afc_; + + uint16_t afc_port_; +}; + +#endif // IMOBILEDEVICECONNECTION_H diff --git a/src/translations/ar.po b/src/translations/ar.po index ad8879dff..ac9c5e8f0 100644 --- a/src/translations/ar.po +++ b/src/translations/ar.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-05-21 01:02+0000\n" "Last-Translator: EL7R \n" "Language-Team: Arabic \n" -"Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" "X-Launchpad-Export-Date: 2010-05-22 04:09+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "" msgid "%1 tracks" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "" @@ -381,6 +381,9 @@ msgstr "" msgid "Copy to library..." msgstr "" +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -582,7 +585,7 @@ msgstr "" msgid "Edit..." msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "" @@ -1734,7 +1737,7 @@ msgstr "" msgid "[click to edit]" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "أضِف %n أغاني\\أغنية" @@ -1754,7 +1757,7 @@ msgstr "انقل الأغاني" msgid "options" msgstr "الخيارات" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "أزِل %n أغاني\\أغنية" diff --git a/src/translations/bg.po b/src/translations/bg.po index bfce7a8d9..4544d200f 100644 --- a/src/translations/bg.po +++ b/src/translations/bg.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-07-06 14:54+0000\n" "Last-Translator: Hristo Apostolov \n" "Language-Team: Bulgarian \n" -"Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" "X-Launchpad-Export-Date: 2010-07-07 03:52+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "" msgid "%1 tracks" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "" @@ -381,6 +381,9 @@ msgstr "" msgid "Copy to library..." msgstr "" +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -582,7 +585,7 @@ msgstr "" msgid "Edit..." msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "" @@ -1734,7 +1737,7 @@ msgstr "" msgid "[click to edit]" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "" @@ -1754,7 +1757,7 @@ msgstr "" msgid "options" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "" diff --git a/src/translations/cs.po b/src/translations/cs.po index a92b6338b..f3731257f 100644 --- a/src/translations/cs.po +++ b/src/translations/cs.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-07-20 03:50+0000\n" "Last-Translator: David Sansome \n" "Language-Team: LANGUAGE \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" "X-Launchpad-Export-Date: 2010-07-21 03:55+0000\n" "X-Generator: Launchpad (build Unknown)\n" "X-Language: cs_CZ\n" @@ -45,15 +45,15 @@ msgstr "" msgid "%1 tracks" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "" @@ -382,6 +382,9 @@ msgstr "" msgid "Copy to library..." msgstr "Zkopírovat do knihovny..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -583,7 +586,7 @@ msgstr "Upravit informaci o skladbách..." msgid "Edit..." msgstr "Upravit..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Úprava %n stop" @@ -1738,7 +1741,7 @@ msgstr "Vynulovat" msgid "[click to edit]" msgstr "[pro úpravy klikněte]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "Přidej %n skladby" @@ -1758,7 +1761,7 @@ msgstr "Přesuň skladby" msgid "options" msgstr "Možnosti" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "Odeber %n skladeb" diff --git a/src/translations/da.po b/src/translations/da.po index aa05d5463..d14f5196e 100644 --- a/src/translations/da.po +++ b/src/translations/da.po @@ -12,10 +12,10 @@ msgstr "" "PO-Revision-Date: 2010-07-16 21:57+0000\n" "Last-Translator: Kabel \n" "Language-Team: Danish \n" -"Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: da\n" "X-Launchpad-Export-Date: 2010-07-17 04:04+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -45,15 +45,15 @@ msgstr "" msgid "%1 tracks" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "" @@ -382,6 +382,9 @@ msgstr "" msgid "Copy to library..." msgstr "Kopiér til bibliotek..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -583,7 +586,7 @@ msgstr "Redigér sporinformation..." msgid "Edit..." msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Redigerer %n spor" @@ -1741,7 +1744,7 @@ msgstr "Nul" msgid "[click to edit]" msgstr "[Klik for at redigere]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "tilføj %n sange" @@ -1761,7 +1764,7 @@ msgstr "flyt sange" msgid "options" msgstr "indstillinger" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "fjern %n sange" diff --git a/src/translations/de.po b/src/translations/de.po index 8e979cd8b..b317f70ef 100644 --- a/src/translations/de.po +++ b/src/translations/de.po @@ -12,10 +12,10 @@ msgstr "" "PO-Revision-Date: 2010-07-19 11:13+0000\n" "Last-Translator: murrayy \n" "Language-Team: German \n" -"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: de\n" "X-Launchpad-Export-Date: 2010-07-20 04:01+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -45,15 +45,15 @@ msgstr "%1 ausgewählt von" msgid "%1 tracks" msgstr "%1 Stücke" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "%n fehlgeschlagen" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n konvertiert" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "%n verbleibend" @@ -388,6 +388,9 @@ msgstr "" msgid "Copy to library..." msgstr "In die Musiksammlung kopieren..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -591,7 +594,7 @@ msgstr "Metadaten bearbeiten..." msgid "Edit..." msgstr "Bearbeiten..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "%n Stücke bearbeiten" @@ -1764,7 +1767,7 @@ msgstr "Null" msgid "[click to edit]" msgstr "[zum Bearbeiten klicken]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "%n Stücke hinzufügen" @@ -1784,7 +1787,7 @@ msgstr "Stücke verschieben" msgid "options" msgstr "Einstellungen" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "%n Stücke entfernen" diff --git a/src/translations/el.po b/src/translations/el.po index 71681ff68..e3527ff10 100644 --- a/src/translations/el.po +++ b/src/translations/el.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-07-18 09:56+0000\n" "Last-Translator: firewalker \n" "Language-Team: \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" "X-Launchpad-Export-Date: 2010-07-19 03:54+0000\n" "X-Generator: Launchpad (build Unknown)\n" "X-Language: el_GR\n" @@ -46,15 +46,15 @@ msgstr "%1 επιλεγμένα από" msgid "%1 tracks" msgstr "%1 κομμάτια" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "%n απέτυχε" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n ολοκληρώθηκε" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "%n απομένει" @@ -391,6 +391,9 @@ msgstr "" msgid "Copy to library..." msgstr "Αντιγραφή στην βιβλιοθήκη..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -594,7 +597,7 @@ msgstr "Τροποποίηση πληροφοριών κομματιού..." msgid "Edit..." msgstr "Επεξεργασία..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Τροποποίηση %n κομματιών" @@ -1769,7 +1772,7 @@ msgstr "Zero" msgid "[click to edit]" msgstr "[κλικ για τροποποίηση]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "προσθήκη %n τραγουδιών" @@ -1789,7 +1792,7 @@ msgstr "μετακίνηση τραγουδιών" msgid "options" msgstr "επιλογές" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "αφαίρεση %n τραγουδιών" diff --git a/src/translations/en_CA.po b/src/translations/en_CA.po index 1fdbd1141..7f8673553 100644 --- a/src/translations/en_CA.po +++ b/src/translations/en_CA.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-06-17 01:37+0000\n" "Last-Translator: David Sansome \n" "Language-Team: English (Canada) \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" "X-Launchpad-Export-Date: 2010-06-18 03:42+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "" msgid "%1 tracks" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "%n failed" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n finished" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "%n remaining" @@ -381,6 +381,9 @@ msgstr "" msgid "Copy to library..." msgstr "Copy to library..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -584,7 +587,7 @@ msgstr "Edit track information..." msgid "Edit..." msgstr "Edit..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Editing %n tracks" @@ -1739,7 +1742,7 @@ msgstr "Zero" msgid "[click to edit]" msgstr "[click to edit]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "add %n songs" @@ -1759,7 +1762,7 @@ msgstr "move songs" msgid "options" msgstr "options" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "remove %n songs" diff --git a/src/translations/en_GB.po b/src/translations/en_GB.po index c0a08df4d..f66302141 100644 --- a/src/translations/en_GB.po +++ b/src/translations/en_GB.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-06-17 01:38+0000\n" "Last-Translator: David Sansome \n" "Language-Team: LANGUAGE \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" "X-Launchpad-Export-Date: 2010-06-18 03:42+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "" msgid "%1 tracks" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "" @@ -381,6 +381,9 @@ msgstr "" msgid "Copy to library..." msgstr "Copy to library..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -582,7 +585,7 @@ msgstr "Edit track information..." msgid "Edit..." msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Editing %n tracks" @@ -1736,7 +1739,7 @@ msgstr "Zero" msgid "[click to edit]" msgstr "[click to edit]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "" @@ -1756,7 +1759,7 @@ msgstr "" msgid "options" msgstr "options" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "" diff --git a/src/translations/es.po b/src/translations/es.po index 15a0f34f8..29f108444 100644 --- a/src/translations/es.po +++ b/src/translations/es.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-07-19 21:03+0000\n" "Last-Translator: Carlos Jenkins Pérez \n" "Language-Team: LANGUAGE \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" "X-Launchpad-Export-Date: 2010-07-20 04:01+0000\n" "X-Generator: Launchpad (build Unknown)\n" "X-Language: es_ES\n" @@ -45,15 +45,15 @@ msgstr "%1 seleccionadas de" msgid "%1 tracks" msgstr "%1 pistas" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "%n fallaron" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n completado(s)" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "%n pendiente(s)" @@ -391,6 +391,9 @@ msgstr "" msgid "Copy to library..." msgstr "Copiar a la colección..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -595,7 +598,7 @@ msgstr "Editar información de la pista..." msgid "Edit..." msgstr "Editar..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Editando %n pistas" @@ -1770,7 +1773,7 @@ msgstr "Zero" msgid "[click to edit]" msgstr "[click para editar]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "agregar %n pistas" @@ -1790,7 +1793,7 @@ msgstr "mover pistas" msgid "options" msgstr "opciones" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "remover %n pistas" diff --git a/src/translations/fi.po b/src/translations/fi.po index f92552465..fd55f729b 100644 --- a/src/translations/fi.po +++ b/src/translations/fi.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-06-30 12:14+0000\n" "Last-Translator: David Sansome \n" "Language-Team: Finnish \n" -"Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" "X-Launchpad-Export-Date: 2010-07-01 03:58+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "" msgid "%1 tracks" msgstr "%1 kappaletta" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "" @@ -381,6 +381,9 @@ msgstr "" msgid "Copy to library..." msgstr "Kopioi kirjastoon" +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -582,7 +585,7 @@ msgstr "Muokkaa kappaleen tietoja..." msgid "Edit..." msgstr "Muokkaa..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "" @@ -1736,7 +1739,7 @@ msgstr "" msgid "[click to edit]" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "" @@ -1756,7 +1759,7 @@ msgstr "" msgid "options" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "" diff --git a/src/translations/fr.po b/src/translations/fr.po index fa4a97e6b..13589b616 100644 --- a/src/translations/fr.po +++ b/src/translations/fr.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-07-23 20:36+0000\n" "Last-Translator: Arno \n" "Language-Team: LANGUAGE \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" "X-Launchpad-Export-Date: 2010-07-24 04:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" "X-Language: fr_FR\n" @@ -45,15 +45,15 @@ msgstr "" msgid "%1 tracks" msgstr "%1 pistes" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "%n échoué" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n terminé" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "%n manquant" @@ -384,6 +384,9 @@ msgstr "Copier sur le périphérique" msgid "Copy to library..." msgstr "Copier dans la bilbiothèque..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -587,7 +590,7 @@ msgstr "Modifier la description de la piste..." msgid "Edit..." msgstr "Éditer..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Éditer %n pistes" @@ -1750,7 +1753,7 @@ msgstr "Zéro" msgid "[click to edit]" msgstr "[cliquer pour modifier]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "" @@ -1770,7 +1773,7 @@ msgstr "déplacer les chansons" msgid "options" msgstr "options" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "" diff --git a/src/translations/gl.po b/src/translations/gl.po index ef832bff6..7c359c1b5 100644 --- a/src/translations/gl.po +++ b/src/translations/gl.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-04-27 16:34+0000\n" "Last-Translator: andreout \n" "Language-Team: Galician \n" -"Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" "X-Launchpad-Export-Date: 2010-04-28 03:53+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "" msgid "%1 tracks" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "" @@ -381,6 +381,9 @@ msgstr "" msgid "Copy to library..." msgstr "Copiar para a biblioteca" +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -582,7 +585,7 @@ msgstr "" msgid "Edit..." msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Editando %n faixas" @@ -1736,7 +1739,7 @@ msgstr "" msgid "[click to edit]" msgstr "[clique para editar]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "" @@ -1756,7 +1759,7 @@ msgstr "" msgid "options" msgstr "Opzóns" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "" diff --git a/src/translations/it.po b/src/translations/it.po index 5a51faeb1..a20dc3400 100644 --- a/src/translations/it.po +++ b/src/translations/it.po @@ -12,10 +12,10 @@ msgstr "" "PO-Revision-Date: 2010-07-13 06:56+0000\n" "Last-Translator: Vincenzo Reale \n" "Language-Team: Italian \n" -"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: it\n" "X-Launchpad-Export-Date: 2010-07-14 03:50+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -45,15 +45,15 @@ msgstr "%1 selezionate di" msgid "%1 tracks" msgstr "%1 tracce" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "%n non riusciti" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n completati" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "%n rimanenti" @@ -390,6 +390,9 @@ msgstr "" msgid "Copy to library..." msgstr "Copia nella raccolta..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -593,7 +596,7 @@ msgstr "Modifica informazioni traccia..." msgid "Edit..." msgstr "Modifica..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Modifica di %n tracce" @@ -1774,7 +1777,7 @@ msgstr "Zero" msgid "[click to edit]" msgstr "[clic per modificare]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "aggiungi %n brani" @@ -1794,7 +1797,7 @@ msgstr "sposta brani" msgid "options" msgstr "opzioni" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "rimuovi %n brani" diff --git a/src/translations/kk.po b/src/translations/kk.po index 478cc80c8..ee49ec3e9 100644 --- a/src/translations/kk.po +++ b/src/translations/kk.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-04-27 16:33+0000\n" "Last-Translator: David Sansome \n" "Language-Team: Kazakh \n" -"Language: kk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" "X-Launchpad-Export-Date: 2010-04-28 03:53+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "" msgid "%1 tracks" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "" @@ -381,6 +381,9 @@ msgstr "" msgid "Copy to library..." msgstr "" +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -582,7 +585,7 @@ msgstr "" msgid "Edit..." msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "" @@ -1736,7 +1739,7 @@ msgstr "Нөл" msgid "[click to edit]" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "" @@ -1756,7 +1759,7 @@ msgstr "" msgid "options" msgstr "опциялар" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "" diff --git a/src/translations/lt.po b/src/translations/lt.po index 6897cdd47..f49ae80db 100644 --- a/src/translations/lt.po +++ b/src/translations/lt.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-07-22 12:24+0000\n" "Last-Translator: Kazimieras Aliulis \n" "Language-Team: Lithuanian \n" -"Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" "X-Launchpad-Export-Date: 2010-07-23 04:23+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "%1 pažymėta iš" msgid "%1 tracks" msgstr "%1 takeliai" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "" @@ -381,6 +381,9 @@ msgstr "" msgid "Copy to library..." msgstr "" +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -582,7 +585,7 @@ msgstr "" msgid "Edit..." msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "" @@ -1734,7 +1737,7 @@ msgstr "" msgid "[click to edit]" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "" @@ -1754,7 +1757,7 @@ msgstr "" msgid "options" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "" diff --git a/src/translations/nb.po b/src/translations/nb.po index f0b48b93e..45f404530 100644 --- a/src/translations/nb.po +++ b/src/translations/nb.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-04-14 22:22+0000\n" "Last-Translator: David Sansome \n" "Language-Team: Norwegian Bokmal \n" -"Language: nb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" "X-Launchpad-Export-Date: 2010-04-16 04:07+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "" msgid "%1 tracks" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "" @@ -381,6 +381,9 @@ msgstr "" msgid "Copy to library..." msgstr "Kopier til bibliotek..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -582,7 +585,7 @@ msgstr "Rediger informasjon om sporet..." msgid "Edit..." msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Endrer %n spor" @@ -1738,7 +1741,7 @@ msgstr "Null" msgid "[click to edit]" msgstr "[klikk for å endre]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "" @@ -1758,7 +1761,7 @@ msgstr "" msgid "options" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "" diff --git a/src/translations/nl.po b/src/translations/nl.po index 034652289..dee059372 100644 --- a/src/translations/nl.po +++ b/src/translations/nl.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-07-15 22:34+0000\n" "Last-Translator: Balaam's Miracle \n" "Language-Team: Dutch \n" -"Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" "X-Launchpad-Export-Date: 2010-07-17 04:04+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "%1 geselecteerd van" msgid "%1 tracks" msgstr "%1 tracks" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "%n mislukt" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n voltooid" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "%n te gaan" @@ -387,6 +387,9 @@ msgstr "" msgid "Copy to library..." msgstr "Naar bibliotheek kopiëren..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -590,7 +593,7 @@ msgstr "Trackinformatie bewerken..." msgid "Edit..." msgstr "Bewerken..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "%n tracks bewerken" @@ -1763,7 +1766,7 @@ msgstr "Nul" msgid "[click to edit]" msgstr "[klik om te bewerken]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "%n nummers toevoegen" @@ -1783,7 +1786,7 @@ msgstr "nummers verplaatsen" msgid "options" msgstr "opties" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "%n nummers verwijderen" diff --git a/src/translations/oc.po b/src/translations/oc.po index 70fff8939..e68389bc0 100644 --- a/src/translations/oc.po +++ b/src/translations/oc.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-05-21 01:01+0000\n" "Last-Translator: Cédric VALMARY (Tot en òc) \n" "Language-Team: Occitan (post 1500) \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" "X-Launchpad-Export-Date: 2010-05-22 04:09+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "" msgid "%1 tracks" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "" @@ -381,6 +381,9 @@ msgstr "" msgid "Copy to library..." msgstr "" +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -582,7 +585,7 @@ msgstr "" msgid "Edit..." msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "" @@ -1734,7 +1737,7 @@ msgstr "Zèro" msgid "[click to edit]" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "" @@ -1754,7 +1757,7 @@ msgstr "" msgid "options" msgstr "opcions" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "" diff --git a/src/translations/pl.po b/src/translations/pl.po index 9572dfe53..e8e94ae19 100644 --- a/src/translations/pl.po +++ b/src/translations/pl.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-07-23 09:51+0000\n" "Last-Translator: Patryk Wychowaniec \n" "Language-Team: LANGUAGE \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" "X-Launchpad-Export-Date: 2010-07-24 04:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" "X-Language: pl_PL\n" @@ -45,15 +45,15 @@ msgstr "%1 zaznaczonych z" msgid "%1 tracks" msgstr "%1 ścieżek" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "%n zawiodło" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n zakończone" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "" @@ -385,6 +385,9 @@ msgstr "" msgid "Copy to library..." msgstr "Skopiuj do biblioteki..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -588,7 +591,7 @@ msgstr "Edytuj informacje o utworze..." msgid "Edit..." msgstr "Edytuj..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Edytowanie %n ścieżek" @@ -1745,7 +1748,7 @@ msgstr "" msgid "[click to edit]" msgstr "[kliknij aby edytować]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "" @@ -1765,7 +1768,7 @@ msgstr "" msgid "options" msgstr "opcje" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "" diff --git a/src/translations/pt.po b/src/translations/pt.po index ee77aa4dd..58d4dc060 100644 --- a/src/translations/pt.po +++ b/src/translations/pt.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-07-20 09:28+0000\n" "Last-Translator: Sérgio Marques \n" "Language-Team: Portuguese \n" -"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" "X-Launchpad-Export-Date: 2010-07-21 03:55+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "seleccionada(s) %1 de" msgid "%1 tracks" msgstr "%1 faixas" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "%n falha(s)" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n concluída(s)" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "%n restante(s)" @@ -388,6 +388,9 @@ msgstr "Copiar para o dispositivo..." msgid "Copy to library..." msgstr "Copiar para a biblioteca..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -591,7 +594,7 @@ msgstr "Editar a informação da faixa..." msgid "Edit..." msgstr "Editar..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Editando %n faixas" @@ -1760,7 +1763,7 @@ msgstr "Zero" msgid "[click to edit]" msgstr "[clique para editar]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "adicionar %n canções" @@ -1780,7 +1783,7 @@ msgstr "mover canções" msgid "options" msgstr "opções" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "remover %n canções" diff --git a/src/translations/pt_BR.po b/src/translations/pt_BR.po index 3fccee6ac..9faf27660 100644 --- a/src/translations/pt_BR.po +++ b/src/translations/pt_BR.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-06-26 18:01+0000\n" "Last-Translator: David Sansome \n" "Language-Team: Brazilian Portuguese \n" -"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" "X-Launchpad-Export-Date: 2010-06-27 03:57+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "%1 selecionado(s) de" msgid "%1 tracks" msgstr "%1 faixas" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "%n falhou" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n fizalizado" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "%n faltando" @@ -384,6 +384,9 @@ msgstr "" msgid "Copy to library..." msgstr "Copiar para biblioteca..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -587,7 +590,7 @@ msgstr "Editar informações da faixa..." msgid "Edit..." msgstr "Editar..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Editando %n faixas" @@ -1754,7 +1757,7 @@ msgstr "Zero" msgid "[click to edit]" msgstr "[clique para editar]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "Adicionar %n músicas" @@ -1774,7 +1777,7 @@ msgstr "mover músicas" msgid "options" msgstr "opções" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "Remover %n músicas" diff --git a/src/translations/ro.po b/src/translations/ro.po index d3e122340..c0497466f 100644 --- a/src/translations/ro.po +++ b/src/translations/ro.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-05-03 21:09+0000\n" "Last-Translator: David Sansome \n" "Language-Team: Romanian \n" -"Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" "X-Launchpad-Export-Date: 2010-05-04 03:52+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "" msgid "%1 tracks" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "" @@ -381,6 +381,9 @@ msgstr "" msgid "Copy to library..." msgstr "Copiază în bibliotecă..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -582,7 +585,7 @@ msgstr "" msgid "Edit..." msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "" @@ -1735,7 +1738,7 @@ msgstr "Zero" msgid "[click to edit]" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "" @@ -1755,7 +1758,7 @@ msgstr "" msgid "options" msgstr "opțiuni" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "" diff --git a/src/translations/ru.po b/src/translations/ru.po index b1bab27e5..c6b07e061 100644 --- a/src/translations/ru.po +++ b/src/translations/ru.po @@ -10,10 +10,10 @@ msgstr "" "PO-Revision-Date: 2010-07-20 06:51+0000\n" "Last-Translator: Pavel Maleev \n" "Language-Team: Russian \n" -"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" "X-Launchpad-Export-Date: 2010-07-21 03:55+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -43,15 +43,15 @@ msgstr "%1 выбрано из" msgid "%1 tracks" msgstr "%1 композиций" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "%n с ошибкой" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n завершено" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "%n осталось" @@ -386,6 +386,9 @@ msgstr "Копировать на устройство..." msgid "Copy to library..." msgstr "Копировать в коллекцию..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -589,7 +592,7 @@ msgstr "Изменить информацию о композиции..." msgid "Edit..." msgstr "Изменить..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Редактирую %n треков" @@ -1760,7 +1763,7 @@ msgstr "По-умолчанию" msgid "[click to edit]" msgstr "[щелкните, чтобы изменить]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "добавить %n композиций" @@ -1780,7 +1783,7 @@ msgstr "переместить композиции" msgid "options" msgstr "настройки" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "удалить %n композиций" diff --git a/src/translations/sk.po b/src/translations/sk.po index f9b455647..f34c48e3b 100644 --- a/src/translations/sk.po +++ b/src/translations/sk.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-07-20 09:42+0000\n" "Last-Translator: DAG Software \n" "Language-Team: \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" "X-Launchpad-Export-Date: 2010-07-21 03:55+0000\n" "X-Generator: Launchpad (build Unknown)\n" "X-Language: sk_SK\n" @@ -45,15 +45,15 @@ msgstr "%1 vybratých z" msgid "%1 tracks" msgstr "%1 skladieb" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "%n zlyhalo" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n dokončených" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "%n zostávajúcich" @@ -388,6 +388,9 @@ msgstr "Skopírovať na zariadenie..." msgid "Copy to library..." msgstr "Skopírovať do zbierky..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -591,7 +594,7 @@ msgstr "Upravť informácie o skladbe..." msgid "Edit..." msgstr "Upraviť..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Upravovanie %n skladieb" @@ -1758,7 +1761,7 @@ msgstr "Vynulovať" msgid "[click to edit]" msgstr "[kliknite pre úpravu]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "pridať %n piesní" @@ -1778,7 +1781,7 @@ msgstr "presunúť piesne" msgid "options" msgstr "možnosti" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "odstrániť %n piesní" diff --git a/src/translations/sr.po b/src/translations/sr.po index 9d1c0c7cb..4d233e818 100644 --- a/src/translations/sr.po +++ b/src/translations/sr.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-07-23 16:01+0000\n" "Last-Translator: Далибор Ђурић \n" "Language-Team: Serbian \n" -"Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: sr\n" "X-Launchpad-Export-Date: 2010-07-24 04:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "" msgid "%1 tracks" msgstr "%1 нумера" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n завршено" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "%n преостало" @@ -381,6 +381,9 @@ msgstr "" msgid "Copy to library..." msgstr "Копирај у библиотеку" +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -584,7 +587,7 @@ msgstr "Уреди податке о нумери..." msgid "Edit..." msgstr "Уреди..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Уређивање %n нумера" @@ -1741,7 +1744,7 @@ msgstr "Нулто" msgid "[click to edit]" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "додај %n песама" @@ -1761,7 +1764,7 @@ msgstr "" msgid "options" msgstr "Опције" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "remove %n песама" diff --git a/src/translations/sv.po b/src/translations/sv.po index 41ca70d65..a868e8a26 100644 --- a/src/translations/sv.po +++ b/src/translations/sv.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-07-21 16:23+0000\n" "Last-Translator: alopex \n" "Language-Team: Swedish \n" -"Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" "X-Launchpad-Export-Date: 2010-07-22 04:11+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "" msgid "%1 tracks" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "%n misslyckades" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n färdig" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "%n återstår" @@ -381,6 +381,9 @@ msgstr "" msgid "Copy to library..." msgstr "Kopiera till bibliotek..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -584,7 +587,7 @@ msgstr "Redigera spårinformation..." msgid "Edit..." msgstr "Redigera..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Redigerar %n spår" @@ -1742,7 +1745,7 @@ msgstr "Noll" msgid "[click to edit]" msgstr "[klicka för att redigera]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "Lägg till %n songer" @@ -1762,7 +1765,7 @@ msgstr "Flytta songer" msgid "options" msgstr "alternativ" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "Ta bort %n songer" diff --git a/src/translations/tr.po b/src/translations/tr.po index 992330e9c..c6774e09d 100644 --- a/src/translations/tr.po +++ b/src/translations/tr.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-07-15 05:59+0000\n" "Last-Translator: Cihan Ersoy \n" "Language-Team: Turkish \n" -"Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" "X-Launchpad-Export-Date: 2010-07-16 03:52+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "" msgid "%1 tracks" msgstr "%1 parça" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "%n başarısız" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n tamamlandı" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "%n kalan" @@ -381,6 +381,9 @@ msgstr "" msgid "Copy to library..." msgstr "Kütüphaneye kopyala..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -582,7 +585,7 @@ msgstr "Parça bilgisini düzenle..." msgid "Edit..." msgstr "Düzenle..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "" @@ -1740,7 +1743,7 @@ msgstr "" msgid "[click to edit]" msgstr "[düzenlemek için tıklayın]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "%n şakıyı ekle" @@ -1760,7 +1763,7 @@ msgstr "Parçaları taşı" msgid "options" msgstr "seçenekler" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "%n şakıyı çıkart" diff --git a/src/translations/translations.pot b/src/translations/translations.pot index 8b26e4f47..0204b57a4 100644 --- a/src/translations/translations.pot +++ b/src/translations/translations.pot @@ -34,15 +34,15 @@ msgstr "" msgid "%1 tracks" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "" @@ -371,6 +371,9 @@ msgstr "" msgid "Copy to library..." msgstr "" +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -572,7 +575,7 @@ msgstr "" msgid "Edit..." msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "" @@ -1724,7 +1727,7 @@ msgstr "" msgid "[click to edit]" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "" @@ -1744,7 +1747,7 @@ msgstr "" msgid "options" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "" diff --git a/src/translations/uk.po b/src/translations/uk.po index 7646104f8..c2809f838 100644 --- a/src/translations/uk.po +++ b/src/translations/uk.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-07-20 06:52+0000\n" "Last-Translator: Sergiy Gavrylov \n" "Language-Team: Ukrainian \n" -"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" "X-Launchpad-Export-Date: 2010-07-21 03:55+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "вибрано з %1" msgid "%1 tracks" msgstr "%1 доріжок" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "%n з помилкою" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n завершено" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "%n залишилось" @@ -387,6 +387,9 @@ msgstr "Копіювати до пристрою..." msgid "Copy to library..." msgstr "Скопіювати до фонотеки..." +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -590,7 +593,7 @@ msgstr "Редагувати дані про доріжку..." msgid "Edit..." msgstr "Змінити..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "Редагування %n доріжок" @@ -1759,7 +1762,7 @@ msgstr "Zero" msgid "[click to edit]" msgstr "[клацніть, щоб змінити]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "додати %n композицій" @@ -1779,7 +1782,7 @@ msgstr "перемістити композиції" msgid "options" msgstr "параметри" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "вилучити %n композицій" diff --git a/src/translations/zh_CN.po b/src/translations/zh_CN.po index 44b4138d3..be5c5fd34 100644 --- a/src/translations/zh_CN.po +++ b/src/translations/zh_CN.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-06-07 01:43+0000\n" "Last-Translator: David Sansome \n" "Language-Team: Chinese (Simplified) \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" "X-Launchpad-Export-Date: 2010-06-08 03:51+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "" msgid "%1 tracks" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "" @@ -381,6 +381,9 @@ msgstr "" msgid "Copy to library..." msgstr "" +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -582,7 +585,7 @@ msgstr "" msgid "Edit..." msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "" @@ -1734,7 +1737,7 @@ msgstr "" msgid "[click to edit]" msgstr "" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "" @@ -1754,7 +1757,7 @@ msgstr "" msgid "options" msgstr "选项" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "" diff --git a/src/translations/zh_TW.po b/src/translations/zh_TW.po index ee875b380..5dea2e6e7 100644 --- a/src/translations/zh_TW.po +++ b/src/translations/zh_TW.po @@ -11,10 +11,10 @@ msgstr "" "PO-Revision-Date: 2010-07-20 03:55+0000\n" "Last-Translator: David Sansome \n" "Language-Team: Chinese (Traditional) \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" "X-Launchpad-Export-Date: 2010-07-21 03:55+0000\n" "X-Generator: Launchpad (build Unknown)\n" @@ -44,15 +44,15 @@ msgstr "%1 選定" msgid "%1 tracks" msgstr "%1 歌曲" -#, c-format, qt-plural-format +#, c-format msgid "%n failed" msgstr "%n 失敗的" -#, c-format, qt-plural-format +#, c-format msgid "%n finished" msgstr "%n 完成的" -#, c-format, qt-plural-format +#, c-format msgid "%n remaining" msgstr "%n 剩餘的" @@ -385,6 +385,9 @@ msgstr "" msgid "Copy to library..." msgstr "複製到音樂庫" +msgid "Copying iPod database" +msgstr "" + #, qt-format msgid "" "Could not create the GStreamer element \"%1\" - make sure you have all the " @@ -586,7 +589,7 @@ msgstr "編輯歌曲資訊..." msgid "Edit..." msgstr "編輯..." -#, c-format, qt-plural-format +#, c-format msgid "Editing %n tracks" msgstr "編輯 %n 歌曲" @@ -1741,7 +1744,7 @@ msgstr "" msgid "[click to edit]" msgstr "[點擊以編輯]" -#, c-format, qt-plural-format +#, c-format msgid "add %n songs" msgstr "加入 %n 歌" @@ -1761,7 +1764,7 @@ msgstr "移動歌曲" msgid "options" msgstr "選項" -#, c-format, qt-plural-format +#, c-format msgid "remove %n songs" msgstr "移除 %n 歌"