mirror of
https://github.com/clementine-player/Clementine
synced 2025-01-31 11:35:24 +01:00
Have a different list of smart playlists for Jamendo and the normal Library. Only add default Jamendo smart playlists once.
This commit is contained in:
parent
b85ddbb380
commit
69d3d89b0f
@ -15,16 +15,34 @@
|
||||
along with Clementine. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "core/database.h"
|
||||
#include "library.h"
|
||||
#include "librarymodel.h"
|
||||
#include "librarybackend.h"
|
||||
#include "core/database.h"
|
||||
#include "smartplaylists/generator.h"
|
||||
#include "smartplaylists/querygenerator.h"
|
||||
#include "smartplaylists/search.h"
|
||||
|
||||
const char* Library::kSongsTable = "songs";
|
||||
const char* Library::kDirsTable = "directories";
|
||||
const char* Library::kSubdirsTable = "subdirectories";
|
||||
const char* Library::kFtsTable = "songs_fts";
|
||||
|
||||
using smart_playlists::Generator;
|
||||
using smart_playlists::GeneratorPtr;
|
||||
using smart_playlists::QueryGenerator;
|
||||
using smart_playlists::Search;
|
||||
using smart_playlists::SearchTerm;
|
||||
|
||||
static GeneratorPtr NewQuery(
|
||||
const QString& name, const smart_playlists::Search& search, bool dynamic = false) {
|
||||
boost::shared_ptr<QueryGenerator> gen(new QueryGenerator);
|
||||
gen->Load(search);
|
||||
gen->set_name(name);
|
||||
gen->set_dynamic(dynamic);
|
||||
return boost::static_pointer_cast<Generator>(gen);
|
||||
}
|
||||
|
||||
Library::Library(BackgroundThread<Database>* db_thread, TaskManager* task_manager,
|
||||
QObject *parent)
|
||||
: QObject(parent),
|
||||
@ -41,6 +59,46 @@ Library::Library(BackgroundThread<Database>* db_thread, TaskManager* task_manage
|
||||
|
||||
model_ = new LibraryModel(backend_, this);
|
||||
model_->set_show_smart_playlists(true);
|
||||
model_->set_default_smart_playlists(LibraryModel::DefaultGenerators()
|
||||
<< (LibraryModel::GeneratorList()
|
||||
<< NewQuery(tr("50 random tracks"), Search(
|
||||
Search::Type_All, Search::TermList(),
|
||||
Search::Sort_Random, SearchTerm::Field_Title, 50))
|
||||
<< NewQuery(tr("Ever played"), Search(
|
||||
Search::Type_And, Search::TermList()
|
||||
<< SearchTerm(SearchTerm::Field_PlayCount, SearchTerm::Op_GreaterThan, 0),
|
||||
Search::Sort_Random, SearchTerm::Field_Title))
|
||||
<< NewQuery(tr("Never played"), Search(
|
||||
Search::Type_And, Search::TermList()
|
||||
<< SearchTerm(SearchTerm::Field_PlayCount, SearchTerm::Op_Equals, 0),
|
||||
Search::Sort_Random, SearchTerm::Field_Title))
|
||||
<< NewQuery(tr("Last played"), Search(
|
||||
Search::Type_All, Search::TermList(),
|
||||
Search::Sort_FieldDesc, SearchTerm::Field_LastPlayed))
|
||||
<< NewQuery(tr("Most played"), Search(
|
||||
Search::Type_All, Search::TermList(),
|
||||
Search::Sort_FieldDesc, SearchTerm::Field_PlayCount))
|
||||
<< NewQuery(tr("Favourite tracks"), Search(
|
||||
Search::Type_All, Search::TermList(),
|
||||
Search::Sort_FieldDesc, SearchTerm::Field_Score))
|
||||
<< NewQuery(tr("Newest tracks"), Search(
|
||||
Search::Type_All, Search::TermList(),
|
||||
Search::Sort_FieldDesc, SearchTerm::Field_DateCreated))
|
||||
) << (LibraryModel::GeneratorList()
|
||||
<< NewQuery(tr("All tracks"), Search(
|
||||
Search::Type_All, Search::TermList(),
|
||||
Search::Sort_FieldAsc, SearchTerm::Field_Artist, -1))
|
||||
<< NewQuery(tr("Least favourite tracks"), Search(
|
||||
Search::Type_Or, Search::TermList()
|
||||
<< SearchTerm(SearchTerm::Field_Rating, SearchTerm::Op_LessThan, 0.6)
|
||||
<< SearchTerm(SearchTerm::Field_SkipCount, SearchTerm::Op_GreaterThan, 4),
|
||||
Search::Sort_FieldDesc, SearchTerm::Field_SkipCount))
|
||||
) << (LibraryModel::GeneratorList()
|
||||
<< NewQuery(tr("Dynamic random mix"), Search(
|
||||
Search::Type_All, Search::TermList(),
|
||||
Search::Sort_Random, SearchTerm::Field_Title), true)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
void Library::set_watcher_factory(BackgroundThreadFactory<LibraryWatcher>* factory) {
|
||||
|
@ -509,20 +509,23 @@ SongList LibraryBackend::GetSongsByForeignId(
|
||||
|
||||
QString in = ids.join(",");
|
||||
|
||||
QSqlQuery q(QString("SELECT %2.ROWID, " + Song::kColumnSpec +
|
||||
" FROM %1, %2"
|
||||
" WHERE %1.ROWID = %2.ROWID AND %2.%3 IN (%4)")
|
||||
QSqlQuery q(QString("SELECT %2.ROWID, " + Song::kColumnSpec + ", %2.%3"
|
||||
" FROM %2, %1"
|
||||
" WHERE %2.%3 IN (%4) AND %1.ROWID = %2.ROWID")
|
||||
.arg(songs_table_, table, column, in), db);
|
||||
q.exec();
|
||||
if (db_->CheckErrors(q.lastError())) return SongList();
|
||||
|
||||
SongList ret;
|
||||
QVector<Song> ret(ids.count());
|
||||
while (q.next()) {
|
||||
Song song;
|
||||
song.InitFromQuery(q);
|
||||
ret << song;
|
||||
const QString foreign_id = q.value(Song::kColumns.count() + 1).toString();
|
||||
const int index = ids.indexOf(foreign_id);
|
||||
if (index == -1)
|
||||
continue;
|
||||
|
||||
ret[index].InitFromQuery(q);
|
||||
}
|
||||
return ret;
|
||||
return ret.toList();
|
||||
}
|
||||
|
||||
Song LibraryBackend::GetSongById(int id, QSqlDatabase& db) {
|
||||
|
@ -41,7 +41,6 @@ using smart_playlists::QueryGenerator;
|
||||
|
||||
const char* LibraryModel::kSmartPlaylistsMimeType = "application/x-clementine-smart-playlist-generator";
|
||||
const char* LibraryModel::kSmartPlaylistsSettingsGroup = "SerialisedSmartPlaylists";
|
||||
const char* LibraryModel::kSmartPlaylistsArray = "smart";
|
||||
const int LibraryModel::kSmartPlaylistsVersion = 3;
|
||||
|
||||
LibraryModel::LibraryModel(LibraryBackend* backend, QObject* parent)
|
||||
@ -890,82 +889,33 @@ void LibraryModel::CreateSmartPlaylists() {
|
||||
|
||||
QSettings s;
|
||||
s.beginGroup(kSmartPlaylistsSettingsGroup);
|
||||
const int version = s.value("version", 0).toInt();
|
||||
int version = s.value(backend_->songs_table() + "_version", 0).toInt();
|
||||
|
||||
using smart_playlists::Search;
|
||||
using smart_playlists::SearchTerm;
|
||||
// How many defaults do we have to write?
|
||||
int unwritten_defaults = 0;
|
||||
for (int i=version; i < default_smart_playlists_.count() ; ++i) {
|
||||
unwritten_defaults += default_smart_playlists_[i].count();
|
||||
}
|
||||
|
||||
if (version == 0) {
|
||||
// No smart playlists existed in the settings, so create some defaults
|
||||
|
||||
s.beginWriteArray(kSmartPlaylistsArray);
|
||||
|
||||
int i = 0;
|
||||
SaveDefaultGenerator(&s, i++, tr("50 random tracks"), Search(
|
||||
Search::Type_All, Search::TermList(),
|
||||
Search::Sort_Random, SearchTerm::Field_Title, 50));
|
||||
SaveDefaultGenerator(&s, i++, tr("Ever played"), Search(
|
||||
Search::Type_And, Search::TermList()
|
||||
<< SearchTerm(SearchTerm::Field_PlayCount, SearchTerm::Op_GreaterThan, 0),
|
||||
Search::Sort_Random, SearchTerm::Field_Title));
|
||||
SaveDefaultGenerator(&s, i++, tr("Never played"), Search(
|
||||
Search::Type_And, Search::TermList()
|
||||
<< SearchTerm(SearchTerm::Field_PlayCount, SearchTerm::Op_Equals, 0),
|
||||
Search::Sort_Random, SearchTerm::Field_Title));
|
||||
SaveDefaultGenerator(&s, i++, tr("Last played"), Search(
|
||||
Search::Type_All, Search::TermList(),
|
||||
Search::Sort_FieldDesc, SearchTerm::Field_LastPlayed));
|
||||
SaveDefaultGenerator(&s, i++, tr("Most played"), Search(
|
||||
Search::Type_All, Search::TermList(),
|
||||
Search::Sort_FieldDesc, SearchTerm::Field_PlayCount));
|
||||
SaveDefaultGenerator(&s, i++, tr("Favourite tracks"), Search(
|
||||
Search::Type_All, Search::TermList(),
|
||||
Search::Sort_FieldDesc, SearchTerm::Field_Score));
|
||||
SaveDefaultGenerator(&s, i++, tr("Newest tracks"), Search(
|
||||
Search::Type_All, Search::TermList(),
|
||||
Search::Sort_FieldDesc, SearchTerm::Field_DateCreated));
|
||||
// Save the defaults if there are any unwritten ones
|
||||
if (unwritten_defaults) {
|
||||
// How many items are stored already?
|
||||
int playlist_index = s.beginReadArray(backend_->songs_table());
|
||||
s.endArray();
|
||||
|
||||
// Append the new ones
|
||||
s.beginWriteArray(backend_->songs_table(), playlist_index + unwritten_defaults);
|
||||
for (; version < default_smart_playlists_.count() ; ++version) {
|
||||
foreach (smart_playlists::GeneratorPtr gen, default_smart_playlists_[version]) {
|
||||
SaveGenerator(&s, playlist_index++, gen);
|
||||
}
|
||||
}
|
||||
s.endArray();
|
||||
}
|
||||
|
||||
if (version <= 1) {
|
||||
// Some additional smart playlists
|
||||
s.setValue(backend_->songs_table() + "_version", version);
|
||||
|
||||
const int count = s.beginReadArray(kSmartPlaylistsArray);
|
||||
s.endArray();
|
||||
s.beginWriteArray(kSmartPlaylistsArray);
|
||||
|
||||
int i = count;
|
||||
SaveDefaultGenerator(&s, i++, tr("All tracks"), Search(
|
||||
Search::Type_All, Search::TermList(),
|
||||
Search::Sort_FieldAsc, SearchTerm::Field_Artist, -1));
|
||||
SaveDefaultGenerator(&s, i++, tr("Least favourite tracks"), Search(
|
||||
Search::Type_Or, Search::TermList()
|
||||
<< SearchTerm(SearchTerm::Field_Rating, SearchTerm::Op_LessThan, 0.6)
|
||||
<< SearchTerm(SearchTerm::Field_SkipCount, SearchTerm::Op_GreaterThan, 4),
|
||||
Search::Sort_FieldDesc, SearchTerm::Field_SkipCount));
|
||||
|
||||
s.endArray();
|
||||
}
|
||||
|
||||
if (version <= 2) {
|
||||
// Dynamic playlists
|
||||
|
||||
const int count = s.beginReadArray(kSmartPlaylistsArray);
|
||||
s.endArray();
|
||||
s.beginWriteArray(kSmartPlaylistsArray);
|
||||
|
||||
int i = count;
|
||||
SaveDefaultGenerator(&s, i++, tr("Dynamic random mix"), Search(
|
||||
Search::Type_All, Search::TermList(),
|
||||
Search::Sort_Random, SearchTerm::Field_Title), true);
|
||||
|
||||
s.endArray();
|
||||
}
|
||||
|
||||
s.setValue("version", kSmartPlaylistsVersion);
|
||||
|
||||
const int count = s.beginReadArray(kSmartPlaylistsArray);
|
||||
const int count = s.beginReadArray(backend_->songs_table());
|
||||
for (int i=0 ; i<count ; ++i) {
|
||||
s.setArrayIndex(i);
|
||||
ItemFromSmartPlaylist(s, false);
|
||||
@ -985,26 +935,16 @@ void LibraryModel::ItemFromSmartPlaylist(const QSettings& s, bool notify) const
|
||||
item->InsertNotify(smart_playlist_node_);
|
||||
}
|
||||
|
||||
void LibraryModel::SaveDefaultGenerator(QSettings* s, int i, const QString& name,
|
||||
const smart_playlists::Search& search,
|
||||
bool dynamic) const {
|
||||
boost::shared_ptr<QueryGenerator> gen(new QueryGenerator);
|
||||
gen->Load(search);
|
||||
gen->set_name(name);
|
||||
gen->set_dynamic(dynamic);
|
||||
SaveGenerator(s, i, boost::static_pointer_cast<Generator>(gen));
|
||||
}
|
||||
|
||||
void LibraryModel::AddGenerator(GeneratorPtr gen) {
|
||||
QSettings s;
|
||||
s.beginGroup(kSmartPlaylistsSettingsGroup);
|
||||
|
||||
// Count the existing items
|
||||
const int count = s.beginReadArray(kSmartPlaylistsArray);
|
||||
const int count = s.beginReadArray(backend_->songs_table());
|
||||
s.endArray();
|
||||
|
||||
// Add this one to the end
|
||||
s.beginWriteArray(kSmartPlaylistsArray, count + 1);
|
||||
s.beginWriteArray(backend_->songs_table(), count + 1);
|
||||
SaveGenerator(&s, count, gen);
|
||||
|
||||
// Add it to the model
|
||||
@ -1025,10 +965,10 @@ void LibraryModel::UpdateGenerator(const QModelIndex& index, GeneratorPtr gen) {
|
||||
s.beginGroup(kSmartPlaylistsSettingsGroup);
|
||||
|
||||
// Count the existing items
|
||||
const int count = s.beginReadArray(kSmartPlaylistsArray);
|
||||
const int count = s.beginReadArray(backend_->songs_table());
|
||||
s.endArray();
|
||||
|
||||
s.beginWriteArray(kSmartPlaylistsArray, count);
|
||||
s.beginWriteArray(backend_->songs_table(), count);
|
||||
SaveGenerator(&s, index.row(), gen);
|
||||
|
||||
// Update the text of the item
|
||||
@ -1050,7 +990,7 @@ void LibraryModel::DeleteGenerator(const QModelIndex& index) {
|
||||
s.beginGroup(kSmartPlaylistsSettingsGroup);
|
||||
|
||||
// Rewrite all the items to the settings
|
||||
s.beginWriteArray(kSmartPlaylistsArray, smart_playlist_node_->children.count());
|
||||
s.beginWriteArray(backend_->songs_table(), smart_playlist_node_->children.count());
|
||||
int i = 0;
|
||||
foreach (LibraryItem* item, smart_playlist_node_->children) {
|
||||
s.setArrayIndex(i++);
|
||||
|
@ -97,8 +97,12 @@ class LibraryModel : public SimpleTreeModel<LibraryItem> {
|
||||
LibraryBackend* backend() const { return backend_; }
|
||||
LibraryDirectoryModel* directory_model() const { return dir_model_; }
|
||||
|
||||
typedef QList<smart_playlists::GeneratorPtr> GeneratorList;
|
||||
typedef QList<GeneratorList> DefaultGenerators;
|
||||
|
||||
// Call before Init()
|
||||
void set_show_smart_playlists(bool show_smart_playlists) { show_smart_playlists_ = show_smart_playlists; }
|
||||
void set_default_smart_playlists(const DefaultGenerators& defaults) { default_smart_playlists_ = defaults; }
|
||||
|
||||
// Get information about the library
|
||||
void GetChildSongs(LibraryItem* item, QList<QUrl>* urls, SongList* songs,
|
||||
@ -165,9 +169,6 @@ class LibraryModel : public SimpleTreeModel<LibraryItem> {
|
||||
|
||||
// Smart playlists are shown in another top-level node
|
||||
void CreateSmartPlaylists();
|
||||
void SaveDefaultGenerator(QSettings* s, int i, const QString& name,
|
||||
const smart_playlists::Search& search,
|
||||
bool dynamic = false) const;
|
||||
void SaveGenerator(QSettings* s, int i, smart_playlists::GeneratorPtr generator) const;
|
||||
void ItemFromSmartPlaylist(const QSettings& s, bool notify) const;
|
||||
|
||||
@ -197,6 +198,7 @@ class LibraryModel : public SimpleTreeModel<LibraryItem> {
|
||||
LibraryBackend* backend_;
|
||||
LibraryDirectoryModel* dir_model_;
|
||||
bool show_smart_playlists_;
|
||||
DefaultGenerators default_smart_playlists_;
|
||||
|
||||
QueryOptions query_options_;
|
||||
Grouping group_by_;
|
||||
|
@ -17,7 +17,14 @@ JamendoDynamicPlaylist::JamendoDynamicPlaylist()
|
||||
order_direction_(Order_Descending),
|
||||
current_page_(0),
|
||||
current_index_(0) {
|
||||
}
|
||||
|
||||
JamendoDynamicPlaylist::JamendoDynamicPlaylist(const QString& name, OrderBy order_by)
|
||||
: order_by_(order_by),
|
||||
order_direction_(Order_Descending),
|
||||
current_page_(0),
|
||||
current_index_(0) {
|
||||
set_name(name);
|
||||
}
|
||||
|
||||
void JamendoDynamicPlaylist::Load(const QByteArray& data) {
|
||||
@ -43,8 +50,10 @@ PlaylistItemList JamendoDynamicPlaylist::Generate() {
|
||||
}
|
||||
|
||||
PlaylistItemList JamendoDynamicPlaylist::GenerateMore(int count) {
|
||||
int tries = 0;
|
||||
|
||||
PlaylistItemList items;
|
||||
while (items.size() < count) {
|
||||
while (items.size() < count && tries++ < kApiRetryLimit) {
|
||||
// Add items from current list.
|
||||
if (current_index_ < current_items_.size()) {
|
||||
PlaylistItemList more_items = current_items_.mid(current_index_, count);
|
||||
@ -79,12 +88,15 @@ void JamendoDynamicPlaylist::Fetch() {
|
||||
url.addQueryItem("pn", QString::number(current_page_++));
|
||||
url.addQueryItem("n", QString::number(kPageSize));
|
||||
url.addQueryItem("order", OrderSpec(order_by_, order_direction_));
|
||||
qDebug() << url;
|
||||
|
||||
// Have to make a new NetworkAccessManager here because we're in a different
|
||||
// thread.
|
||||
NetworkAccessManager network;
|
||||
QNetworkReply* reply = network.get(QNetworkRequest(url));
|
||||
QNetworkRequest req(url);
|
||||
req.setAttribute(QNetworkRequest::CacheLoadControlAttribute,
|
||||
QNetworkRequest::AlwaysNetwork);
|
||||
|
||||
QNetworkReply* reply = network.get(req);
|
||||
|
||||
// Blocking wait for reply.
|
||||
{
|
||||
@ -95,10 +107,12 @@ void JamendoDynamicPlaylist::Fetch() {
|
||||
|
||||
// The reply will contain one track ID per line
|
||||
QStringList lines = QString::fromAscii(reply->readAll()).split('\n');
|
||||
delete reply;
|
||||
|
||||
// Get the songs from the database
|
||||
SongList songs = backend_->GetSongsByForeignId(
|
||||
lines, JamendoService::kTrackIdsTable, JamendoService::kTrackIdsColumn);
|
||||
|
||||
if (songs.empty()) {
|
||||
qWarning() << "No songs returned from Jamendo:"
|
||||
<< url.toString();
|
||||
|
@ -9,8 +9,6 @@ class JamendoDynamicPlaylist : public smart_playlists::Generator {
|
||||
friend QDataStream& operator >>(QDataStream& s, JamendoDynamicPlaylist& p);
|
||||
|
||||
public:
|
||||
JamendoDynamicPlaylist();
|
||||
|
||||
// These values are persisted - only add to the end
|
||||
enum OrderBy {
|
||||
OrderBy_Rating = 0,
|
||||
@ -25,6 +23,9 @@ public:
|
||||
Order_Descending = 1,
|
||||
};
|
||||
|
||||
JamendoDynamicPlaylist();
|
||||
JamendoDynamicPlaylist(const QString& name, OrderBy order_by);
|
||||
|
||||
QString type() const { return "Jamendo"; }
|
||||
|
||||
void Load(const QByteArray& data);
|
||||
@ -49,6 +50,7 @@ private:
|
||||
int current_index_;
|
||||
|
||||
static const int kPageSize = 100;
|
||||
static const int kApiRetryLimit = 5;
|
||||
static const char* kUrl;
|
||||
};
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include "library/libraryfilterwidget.h"
|
||||
#include "library/librarymodel.h"
|
||||
#include "radio/radiomodel.h"
|
||||
#include "radio/jamendodynamicplaylist.h"
|
||||
#include "radio/jamendoplaylistitem.h"
|
||||
#include "smartplaylists/generator.h"
|
||||
#include "ui/iconloader.h"
|
||||
@ -62,6 +63,9 @@ const char* JamendoService::kSettingsGroup = "Jamendo";
|
||||
const int JamendoService::kBatchSize = 10000;
|
||||
const int JamendoService::kApproxDatabaseSize = 300000;
|
||||
|
||||
using smart_playlists::Generator;
|
||||
using smart_playlists::GeneratorPtr;
|
||||
|
||||
JamendoService::JamendoService(RadioModel* parent)
|
||||
: RadioService(kServiceName, parent),
|
||||
network_(new NetworkAccessManager(this)),
|
||||
@ -82,6 +86,18 @@ JamendoService::JamendoService(RadioModel* parent)
|
||||
|
||||
library_model_ = new LibraryModel(library_backend_, this);
|
||||
library_model_->set_show_smart_playlists(true);
|
||||
library_model_->set_default_smart_playlists(LibraryModel::DefaultGenerators()
|
||||
<< (LibraryModel::GeneratorList()
|
||||
<< GeneratorPtr(new JamendoDynamicPlaylist(tr("Jamendo Top Tracks of the Month"),
|
||||
JamendoDynamicPlaylist::OrderBy_RatingMonth))
|
||||
<< GeneratorPtr(new JamendoDynamicPlaylist(tr("Jamendo Top Tracks of the Week"),
|
||||
JamendoDynamicPlaylist::OrderBy_RatingWeek))
|
||||
<< GeneratorPtr(new JamendoDynamicPlaylist(tr("Jamendo Top Tracks"),
|
||||
JamendoDynamicPlaylist::OrderBy_Rating))
|
||||
<< GeneratorPtr(new JamendoDynamicPlaylist(tr("Jamendo Most Listened Tracks"),
|
||||
JamendoDynamicPlaylist::OrderBy_Listened))
|
||||
)
|
||||
);
|
||||
|
||||
library_sort_model_->setSourceModel(library_model_);
|
||||
library_sort_model_->setSortRole(LibraryModel::Role_SortText);
|
||||
@ -102,10 +118,6 @@ void JamendoService::LazyPopulate(RadioItem* item) {
|
||||
switch (item->type) {
|
||||
case RadioItem::Type_Service: {
|
||||
library_model_->Init();
|
||||
smart_playlists::GeneratorPtr generator =
|
||||
smart_playlists::Generator::Create("Jamendo");
|
||||
generator->set_name(tr("Jamendo Top Tracks of the Month"));
|
||||
library_model_->AddGenerator(generator);
|
||||
model()->merged_model()->AddSubModel(
|
||||
model()->index(root_->row, 0, model()->ItemToIndex(item->parent)),
|
||||
library_sort_model_);
|
||||
@ -227,12 +239,14 @@ void JamendoService::InsertTrackIds(const TrackIdList& ids) const {
|
||||
|
||||
ScopedTransaction t(&db);
|
||||
|
||||
QSqlQuery insert(QString("INSERT INTO jamendo.%1 (%2) VALUES (:id)")
|
||||
QSqlQuery insert(QString("INSERT INTO %1 (%2) VALUES (:id)")
|
||||
.arg(kTrackIdsTable, kTrackIdsColumn), db);
|
||||
|
||||
foreach (int id, ids) {
|
||||
insert.bindValue(":id", id);
|
||||
insert.exec();
|
||||
if (!insert.exec()) {
|
||||
qWarning() << "Query failed" << insert.lastQuery();
|
||||
}
|
||||
}
|
||||
|
||||
t.Commit();
|
||||
|
@ -1096,9 +1096,18 @@ msgstr "خدمة غير متاحة"
|
||||
msgid "Invalid session key"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1100,9 +1100,18 @@ msgstr ""
|
||||
msgid "Invalid session key"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1121,9 +1121,18 @@ msgstr "Servei invàlid"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Sessió no vàlida"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Salta a la pista que s'esta reproduint"
|
||||
|
||||
|
@ -1100,9 +1100,18 @@ msgstr "Neplatná služba"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Neplatný klíč relace"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1096,9 +1096,18 @@ msgstr ""
|
||||
msgid "Invalid session key"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1101,9 +1101,18 @@ msgstr "Ugyldig tjeneste"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Ugyldig sessionsnøgle"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1124,9 +1124,18 @@ msgstr "Ungültiger Dienst"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Ungültiger Sitzungsschlüssel"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Zum aktuellen Stück springen"
|
||||
|
||||
|
@ -1135,9 +1135,18 @@ msgstr "Εσφαλμένη υπηρεσία"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Εσφαλμένο κλειδί συνεδρίας"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Μετάβαση στο τρέχον κομμάτι που παίζει"
|
||||
|
||||
|
@ -1100,9 +1100,18 @@ msgstr "Invalid service"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Invalid session key"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Jump to the currently playing track"
|
||||
|
||||
|
@ -1098,9 +1098,18 @@ msgstr "Invalid service"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Invalid session key"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1096,9 +1096,18 @@ msgstr ""
|
||||
msgid "Invalid session key"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1133,9 +1133,18 @@ msgstr "Servicio inválido"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Clave de sesión inválida"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Ir a la pista actualmente reproduciéndose"
|
||||
|
||||
|
@ -1098,9 +1098,18 @@ msgstr ""
|
||||
msgid "Invalid session key"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1097,9 +1097,18 @@ msgstr ""
|
||||
msgid "Invalid session key"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1130,9 +1130,18 @@ msgstr "Service invalide"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Clé de session invalide"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Aller à la piste jouée actuellement"
|
||||
|
||||
|
@ -1101,9 +1101,18 @@ msgstr "Servizo Inválido"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Chave de sesón non válida"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1127,9 +1127,18 @@ msgstr "Érvénytelen szolgáltatás"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Érvénytelen munkafolyamat kulcs"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Ugrás a most lejátszott számra"
|
||||
|
||||
|
@ -1134,9 +1134,18 @@ msgstr "Servizio non valido"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Chiave di sessione non valida"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Salta alla traccia in riproduzione"
|
||||
|
||||
|
@ -1121,9 +1121,18 @@ msgstr "不正なサービスです"
|
||||
msgid "Invalid session key"
|
||||
msgstr "不正なセッション キーです"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "現在再生中のトラックへジャンプする"
|
||||
|
||||
|
@ -1098,9 +1098,18 @@ msgstr ""
|
||||
msgid "Invalid session key"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1096,9 +1096,18 @@ msgstr ""
|
||||
msgid "Invalid session key"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1110,9 +1110,18 @@ msgstr "Ukjent tjeneste"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Ugyldig sesjonsnøkkel"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1124,9 +1124,18 @@ msgstr "Ongeldige service"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Ongeldige sessiesleutel"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Spring naar de nu spelende track"
|
||||
|
||||
|
@ -1096,9 +1096,18 @@ msgstr ""
|
||||
msgid "Invalid session key"
|
||||
msgstr "Clau de sesilha invalida"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1121,9 +1121,18 @@ msgstr "Błędna usługa"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Zły klucz sesji"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Przeskocz do teraz odtwarzanej ścieżki"
|
||||
|
||||
|
@ -1130,9 +1130,18 @@ msgstr "Serviço inválido"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Chave de sessão inválida"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Ir para a faixa de reprodução atual"
|
||||
|
||||
|
@ -1110,9 +1110,18 @@ msgstr "Serviço inválido"
|
||||
msgid "Invalid session key"
|
||||
msgstr "chave de sessão inválida"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Pular para a faixa em execução"
|
||||
|
||||
|
@ -1097,9 +1097,18 @@ msgstr "Serviciu invalid"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Cheie de sesiune invalidă"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1117,9 +1117,18 @@ msgstr "Неправильная служба"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Неправильный ключ сессии"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Перейти к текущей композиции"
|
||||
|
||||
|
@ -1121,9 +1121,18 @@ msgstr "Nefunkčná služba"
|
||||
msgid "Invalid session key"
|
||||
msgstr "nefunkčný kľúč sedenia"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Skočiť na práve prehrávanú skladbu"
|
||||
|
||||
|
@ -1123,9 +1123,18 @@ msgstr "Neveljavna storitev"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Neveljavni ključ seje"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Skoči na trenutno predvajano skladbo"
|
||||
|
||||
|
@ -1100,9 +1100,18 @@ msgstr ""
|
||||
msgid "Invalid session key"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Скочи на нумеру која се тренутно пушта"
|
||||
|
||||
|
@ -1122,9 +1122,18 @@ msgstr "Ogiltig tjänst"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Felaktig sessionsnyckel"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Hoppa till spåret som spelas för närvarande"
|
||||
|
||||
|
@ -1118,9 +1118,18 @@ msgstr "Geçersiz servis"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Geçersiz oturum anahtarı"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Şu anda çalınan parçaya atla"
|
||||
|
||||
|
@ -1086,9 +1086,18 @@ msgstr ""
|
||||
msgid "Invalid session key"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1122,9 +1122,18 @@ msgstr "Нечинна служба"
|
||||
msgid "Invalid session key"
|
||||
msgstr "Неправильний ключ сеансу"
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "Перейти до відтворюваної доріжки"
|
||||
|
||||
|
@ -1098,9 +1098,18 @@ msgstr ""
|
||||
msgid "Invalid session key"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1101,9 +1101,18 @@ msgstr "無效的服務"
|
||||
msgid "Invalid session key"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Most Listened Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Month"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jamendo Top Tracks of the Week"
|
||||
msgstr ""
|
||||
|
||||
msgid "Jump to the currently playing track"
|
||||
msgstr "跳轉到目前播放的歌曲"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user