Compare commits

...

10 Commits

Author SHA1 Message Date
smithjd15 804548ec04
Merge 351f0c2d75 into 2f3464403b 2024-05-02 20:16:26 +02:00
Clementine Buildbot 2f3464403b Automatic merge of translations from Transifex 2024-04-25 02:31:15 +00:00
Clementine Buildbot f76dbffa6b Automatic merge of translations from Transifex 2024-03-24 02:30:19 +00:00
James D. Smith 351f0c2d75 PLS Parser: Correctly write specification required structures. 2022-11-19 16:22:23 -07:00
James D. Smith ed5dbb436a WPL Parser: Remove out starting whitespace. 2022-03-28 13:57:44 -06:00
James D. Smith f1c6377cfa ASX Parser: Remove out XML declaration and starting whitespace. 2022-03-28 13:57:44 -06:00
James D. Smith edfc2666ab ASX Parser: Implement no-metadata playlist saving. 2022-03-28 13:57:44 -06:00
James D. Smith ae4a9e6bba WPL Parser: Implement no-metadata playlist saving. 2022-03-28 13:57:44 -06:00
James D. Smith ec103561c5 PLS Parser: Implement no-metadata playlist saving. 2022-03-28 13:57:44 -06:00
James D. Smith dc51176437 M3U Parser: Remove the #EXTM3U header from no-metadata playlists. 2022-03-28 13:57:38 -06:00
7 changed files with 56 additions and 33 deletions

View File

@ -120,26 +120,32 @@ return_song:
void ASXParser::Save(const SongList& songs, QIODevice* device, const QDir&, void ASXParser::Save(const SongList& songs, QIODevice* device, const QDir&,
Playlist::Path path_type) const { Playlist::Path path_type) const {
QSettings s;
s.beginGroup(Playlist::kSettingsGroup);
bool writeMetadata = s.value(Playlist::kWriteMetadata, true).toBool();
s.endGroup();
QXmlStreamWriter writer(device); QXmlStreamWriter writer(device);
writer.writeStartElement("asx");
writer.writeAttribute("version", "3.0");
writer.setAutoFormatting(true); writer.setAutoFormatting(true);
writer.setAutoFormattingIndent(2); writer.setAutoFormattingIndent(2);
writer.writeStartDocument();
{ {
StreamElement asx("asx", &writer);
writer.writeAttribute("version", "3.0");
for (const Song& song : songs) { for (const Song& song : songs) {
StreamElement entry("entry", &writer); StreamElement entry("entry", &writer);
writer.writeTextElement("title", song.title()); if (!song.title().isEmpty() && writeMetadata) {
writer.writeTextElement("title", song.title());
}
{ {
StreamElement ref("ref", &writer); StreamElement ref("ref", &writer);
writer.writeAttribute("href", song.url().toString()); writer.writeAttribute("href", song.url().toString());
} }
if (!song.artist().isEmpty()) { if (!song.artist().isEmpty() && writeMetadata) {
writer.writeTextElement("author", song.artist()); writer.writeTextElement("author", song.artist());
} }
} }
} }
writer.writeEndDocument(); writer.writeEndElement();
} }
bool ASXParser::TryMagic(const QByteArray& data) const { bool ASXParser::TryMagic(const QByteArray& data) const {

View File

@ -103,13 +103,15 @@ bool M3UParser::ParseMetadata(const QString& line,
void M3UParser::Save(const SongList& songs, QIODevice* device, const QDir& dir, void M3UParser::Save(const SongList& songs, QIODevice* device, const QDir& dir,
Playlist::Path path_type) const { Playlist::Path path_type) const {
device->write("#EXTM3U\n");
QSettings s; QSettings s;
s.beginGroup(Playlist::kSettingsGroup); s.beginGroup(Playlist::kSettingsGroup);
bool writeMetadata = s.value(Playlist::kWriteMetadata, true).toBool(); bool writeMetadata = s.value(Playlist::kWriteMetadata, true).toBool();
s.endGroup(); s.endGroup();
if (writeMetadata) {
device->write("#EXTM3U\n");
}
for (const Song& song : songs) { for (const Song& song : songs) {
if (song.url().isEmpty()) { if (song.url().isEmpty()) {
continue; continue;

View File

@ -66,17 +66,26 @@ void PLSParser::Save(const SongList& songs, QIODevice* device, const QDir& dir,
Playlist::Path path_type) const { Playlist::Path path_type) const {
QTextStream s(device); QTextStream s(device);
s << "[playlist]" << endl; s << "[playlist]" << endl;
s << "Version=2" << endl;
s << "NumberOfEntries=" << songs.count() << endl; QSettings settings;
settings.beginGroup(Playlist::kSettingsGroup);
bool writeMetadata = settings.value(Playlist::kWriteMetadata, true).toBool();
settings.endGroup();
int n = 1; int n = 1;
for (const Song& song : songs) { for (const Song& song : songs) {
s << "File" << n << "=" << URLOrFilename(song.url(), dir, path_type) s << "File" << n << "=" << URLOrFilename(song.url(), dir, path_type)
<< endl; << endl;
s << "Title" << n << "=" << song.title() << endl; if (writeMetadata) {
s << "Length" << n << "=" << song.length_nanosec() / kNsecPerSec << endl; s << "Title" << n << "=" << song.title() << endl;
s << "Length" << n << "=" << song.length_nanosec() / kNsecPerSec << endl;
}
++n; ++n;
} }
s << "NumberOfEntries=" << songs.count() << endl;
s << "Version=2" << endl;
} }
bool PLSParser::TryMagic(const QByteArray& data) const { bool PLSParser::TryMagic(const QByteArray& data) const {

View File

@ -79,14 +79,19 @@ void WplParser::ParseSeq(const QDir& dir, QXmlStreamReader* reader,
void WplParser::Save(const SongList& songs, QIODevice* device, const QDir& dir, void WplParser::Save(const SongList& songs, QIODevice* device, const QDir& dir,
Playlist::Path path_type) const { Playlist::Path path_type) const {
QSettings s;
s.beginGroup(Playlist::kSettingsGroup);
bool writeMetadata = s.value(Playlist::kWriteMetadata, true).toBool();
s.endGroup();
QXmlStreamWriter writer(device); QXmlStreamWriter writer(device);
writer.writeProcessingInstruction("wpl", "version=\"1.0\"");
writer.setAutoFormatting(true); writer.setAutoFormatting(true);
writer.setAutoFormattingIndent(2); writer.setAutoFormattingIndent(2);
writer.writeProcessingInstruction("wpl", "version=\"1.0\"");
StreamElement smil("smil", &writer); StreamElement smil("smil", &writer);
{ if (writeMetadata) {
StreamElement head("head", &writer); StreamElement head("head", &writer);
WriteMeta("Generator", "Clementine -- " CLEMENTINE_VERSION_DISPLAY, WriteMeta("Generator", "Clementine -- " CLEMENTINE_VERSION_DISPLAY,
&writer); &writer);

View File

@ -42,6 +42,7 @@
# Martin Brodbeck <martin@brodbeck-online.de>, 2013 # Martin Brodbeck <martin@brodbeck-online.de>, 2013
# Martin Herkt <lachs0r@hong-mailing.de>, 2011 # Martin Herkt <lachs0r@hong-mailing.de>, 2011
# Martin Herkt <luck3r@phicode.de>, 2010 # Martin Herkt <luck3r@phicode.de>, 2010
# Michael Kohler, 2024
# MCMicS, 2020 # MCMicS, 2020
# Mohamed Sakhri, 2013 # Mohamed Sakhri, 2013
# Mohamed Sakhri, 2013 # Mohamed Sakhri, 2013
@ -70,7 +71,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-09 10:24+0000\n" "POT-Creation-Date: 2011-04-09 10:24+0000\n"
"PO-Revision-Date: 2011-10-27 18:53+0000\n" "PO-Revision-Date: 2011-10-27 18:53+0000\n"
"Last-Translator: 6543 <6543@obermui.de>, 2020\n" "Last-Translator: Michael Kohler, 2024\n"
"Language-Team: German (http://app.transifex.com/davidsansome/clementine/language/de/)\n" "Language-Team: German (http://app.transifex.com/davidsansome/clementine/language/de/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@ -219,7 +220,7 @@ msgid "1 track"
msgstr "1 Titel" msgstr "1 Titel"
msgid "128K MP3" msgid "128K MP3"
msgstr "" msgstr "128K MP3"
msgid "128k MP3" msgid "128k MP3"
msgstr "128k MP3" msgstr "128k MP3"
@ -240,7 +241,7 @@ msgid "A Grooveshark Anywhere account is required."
msgstr "" msgstr ""
msgid "A Spotify Premium account is required." msgid "A Spotify Premium account is required."
msgstr "" msgstr "Spotify Premium Zugang wird benötigt."
msgid "" msgid ""
"A smart playlist is a dynamic list of songs that come from your library. " "A smart playlist is a dynamic list of songs that come from your library. "
@ -293,7 +294,7 @@ msgid "Action"
msgstr "Aktion" msgstr "Aktion"
msgid "Active/deactive Wiiremote" msgid "Active/deactive Wiiremote"
msgstr "" msgstr "Aktivieren/deaktivieren Wiiremote"
msgid "Add Stream" msgid "Add Stream"
msgstr "Datenstrom hinzufügen" msgstr "Datenstrom hinzufügen"
@ -326,7 +327,7 @@ msgid "Add folder..."
msgstr "Ordner hinzufügen …" msgstr "Ordner hinzufügen …"
msgid "Add media" msgid "Add media"
msgstr "" msgstr "Medien hinzufügen ..."
msgid "Add new folder..." msgid "Add new folder..."
msgstr "Neuen Ordner hinzufügen …" msgstr "Neuen Ordner hinzufügen …"
@ -386,7 +387,7 @@ msgid "Add wiimotedev action"
msgstr "Aktion für Wii-Fernbedienung hinzufügen" msgstr "Aktion für Wii-Fernbedienung hinzufügen"
msgid "Add..." msgid "Add..."
msgstr "" msgstr "Hinzufügen …"
msgid "Added this month" msgid "Added this month"
msgstr "Diesen Monat hinzugefügt" msgstr "Diesen Monat hinzugefügt"
@ -422,7 +423,7 @@ msgid "Album info on jamendo.com..."
msgstr "Albuminformationen auf jamendo.com …" msgstr "Albuminformationen auf jamendo.com …"
msgid "Albumartist" msgid "Albumartist"
msgstr "" msgstr "Albumkünstler"
msgid "Albums with covers" msgid "Albums with covers"
msgstr "Alben mit Titelbildern" msgstr "Alben mit Titelbildern"
@ -633,7 +634,7 @@ msgid "CUE sheet support"
msgstr "Unterstützung von Cuesheets" msgstr "Unterstützung von Cuesheets"
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr "Abbrechen"
msgid "Change cover art" msgid "Change cover art"
msgstr "Titelbilder ändern" msgstr "Titelbilder ändern"

View File

@ -3,10 +3,10 @@
# This file is distributed under the same license as the Clementine package. # This file is distributed under the same license as the Clementine package.
# #
# Translators: # Translators:
# Adolfo Jayme-Barrientos, 2014 # Adolfo Jayme Barrientos, 2014
# Adolfo Jayme-Barrientos, 2018-2022 # Adolfo Jayme Barrientos, 2018-2022
# Adolfo Jayme-Barrientos, 2015-2016 # Adolfo Jayme Barrientos, 2015-2016
# Adolfo Jayme-Barrientos, 2014 # Adolfo Jayme Barrientos, 2014
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010 # FIRST AUTHOR <EMAIL@ADDRESS>, 2010
msgid "" msgid ""
msgstr "" msgstr ""
@ -14,7 +14,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-09 10:24+0000\n" "POT-Creation-Date: 2011-04-09 10:24+0000\n"
"PO-Revision-Date: 2011-10-27 18:53+0000\n" "PO-Revision-Date: 2011-10-27 18:53+0000\n"
"Last-Translator: Adolfo Jayme-Barrientos, 2018-2022\n" "Last-Translator: Adolfo Jayme Barrientos, 2018-2022\n"
"Language-Team: Esperanto (http://app.transifex.com/davidsansome/clementine/language/eo/)\n" "Language-Team: Esperanto (http://app.transifex.com/davidsansome/clementine/language/eo/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"

View File

@ -4,12 +4,12 @@
# #
# Translators: # Translators:
# Coroccotta <adiazubierna@gmail.com>, 2012 # Coroccotta <adiazubierna@gmail.com>, 2012
# Adolfo Jayme-Barrientos, 2014 # Adolfo Jayme Barrientos, 2014
# Adolfo Jayme-Barrientos, 2012-2013,2018,2021 # Adolfo Jayme Barrientos, 2012-2013,2018,2021
# Adolfo Jayme-Barrientos, 2016-2022 # Adolfo Jayme Barrientos, 2016-2022
# Adolfo Jayme-Barrientos, 2015-2016 # Adolfo Jayme Barrientos, 2015-2016
# Adolfo Jayme-Barrientos, 2013 # Adolfo Jayme Barrientos, 2013
# Adolfo Jayme-Barrientos, 2014 # Adolfo Jayme Barrientos, 2014
# Adrián Prado Castro <adrian.prado@gmail.com>, 2013 # Adrián Prado Castro <adrian.prado@gmail.com>, 2013
# Adrián Ramirez Escalante <buried.prophet@gmail.com>, 2012 # Adrián Ramirez Escalante <buried.prophet@gmail.com>, 2012
# Amaury Ortega <amauryocortega@gmail.com>, 2018 # Amaury Ortega <amauryocortega@gmail.com>, 2018