From ce97a3671fef1e4160cb0b534deace7f6826d091 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Mon, 14 Sep 2009 20:51:03 +0000 Subject: [PATCH 01/32] sync w/devel --- .cvsignore | 2 +- amarok-2.1.80-lyricwiki.patch | 12 ------------ amarok.spec | 11 +++++------ sources | 2 +- 4 files changed, 7 insertions(+), 20 deletions(-) delete mode 100644 amarok-2.1.80-lyricwiki.patch diff --git a/.cvsignore b/.cvsignore index 32f3d03..b34611e 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -amarok-2.1.80.tar.bz2 +amarok-2.1.85.tar.bz2 diff --git a/amarok-2.1.80-lyricwiki.patch b/amarok-2.1.80-lyricwiki.patch deleted file mode 100644 index 5b653ca..0000000 --- a/amarok-2.1.80-lyricwiki.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up amarok-2.1.80/src/scripts/lyrics_lyricwiki/main.js.lyricwiki amarok-2.1.80/src/scripts/lyrics_lyricwiki/main.js ---- amarok-2.1.80/src/scripts/lyrics_lyricwiki/main.js.lyricwiki 2009-09-01 12:19:32.000000000 -0500 -+++ amarok-2.1.80/src/scripts/lyrics_lyricwiki/main.js 2009-09-02 12:13:15.658840532 -0500 -@@ -68,7 +68,7 @@ function onFinished( dat ) - newxml = newxml.replace( "{title}", Amarok.Lyrics.escape( doc.elementsByTagName( "song" ).at( 0 ).toElement().text() ) ); - Amarok.debug( "returned real lyricwiki URL: " + doc.elementsByTagName( "url" ).at( 0 ).toElement().text()); - var url = doc.elementsByTagName( "url" ).at( 0 ).toElement().text(); -- url = url.replace( /lyricwiki\.org\//, "lyricwiki.org/index.php?action=edit&title=" ); -+ url = url.replace( /lyricwiki\.org\//, "lyrics.wikia.com/index.php?action=edit&title=" ); - var url2 = QUrl.fromEncoded( new QByteArray( url ), 1 ); - Amarok.debug( "request-2 URL: " + url2.toString() ); - new Downloader( url2, onFinished2 ); diff --git a/amarok.spec b/amarok.spec index 301d053..e4115dc 100644 --- a/amarok.spec +++ b/amarok.spec @@ -1,8 +1,8 @@ Name: amarok Summary: Media player -Version: 2.1.80 -Release: 2%{?dist} +Version: 2.1.85 +Release: 1%{?dist} Group: Applications/Multimedia License: GPLv2+ @@ -13,7 +13,6 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Patch50: amarok-2.0.90-qtscript_not_required.patch ## upstream patches -Patch100: amarok-2.1.80-lyricwiki.patch BuildRequires: curl-devel BuildRequires: desktop-file-utils @@ -79,8 +78,6 @@ Obsoletes: amarok-utilities < 2.0.96 %patch50 -p1 -b .qtscript_not_required -%patch100 -p1 -b .lyricwiki - %build mkdir -p %{_target_platform} @@ -143,7 +140,6 @@ fi %{_kde4_bindir}/amarokmp3tunesharmonydaemon %{_kde4_appsdir}/amarok/ %{_kde4_appsdir}/desktoptheme/Amarok-Mockup/ -%{_kde4_appsdir}/desktoptheme/amarok-default.desktop %{_kde4_appsdir}/desktoptheme/default/widgets/* %{_kde4_appsdir}/solid/actions/amarok-play-audiocd.desktop %{_kde4_configdir}/amarok.knsrc @@ -172,6 +168,9 @@ fi %changelog +* Mon Sep 14 2009 Rex Dieter 2.1.85-1 +- amarok-2.1.85 (2.2beta2) + * Wed Sep 02 2009 Rex Dieter 2.1.80-2 - another lyricwiki fix diff --git a/sources b/sources index 9d9f2c8..7780877 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -0d9ba377d697691bab5d97fed818f8f1 amarok-2.1.80.tar.bz2 +38311a55767fb8d85254b248a46433d8 amarok-2.1.85.tar.bz2 From 3d4575e71fbc8a7645f4c6b91730b3f52bf04537 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Thu, 17 Sep 2009 19:03:37 +0000 Subject: [PATCH 02/32] - BR: taglib-devel >= 1.6, taglib-extras-devel >= 1.0 --- amarok-taglib.patch | 673 ++++++++++++++++++++++++++++++++++++++++++++ amarok.spec | 12 +- 2 files changed, 682 insertions(+), 3 deletions(-) create mode 100644 amarok-taglib.patch diff --git a/amarok-taglib.patch b/amarok-taglib.patch new file mode 100644 index 0000000..15596d5 --- /dev/null +++ b/amarok-taglib.patch @@ -0,0 +1,673 @@ +# git diff 3ee0ef70c0c9d5de982091e353804c990c35ea4e +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 8219bc6..e4b6b94 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -13,10 +13,10 @@ option(WITH_IPOD "Enable iPod support in Amarok" ON) + include(CheckLibraryExists) + check_library_exists(dl dlopen "" LIBDL_FOUND) + +-set(TAGLIB_MIN_VERSION "1.5") ++set(TAGLIB_MIN_VERSION "1.6") + find_package(Taglib REQUIRED) + +-find_package(Taglib-Extras 0.1 REQUIRED) ++find_package(Taglib-Extras 1.0 REQUIRED) + if( TAGLIB-EXTRAS_FOUND ) + add_definitions( -DTAGLIB_EXTRAS_FOUND ) + endif( TAGLIB-EXTRAS_FOUND ) +diff --git a/shared/MetaReplayGain.cpp b/shared/MetaReplayGain.cpp +index d6edd95..97073d5 100644 +--- a/shared/MetaReplayGain.cpp ++++ b/shared/MetaReplayGain.cpp +@@ -38,10 +38,8 @@ + #include + #include + #include +-#ifdef TAGLIB_EXTRAS_FOUND + #include + #include +-#endif + + // converts a peak value from the normal digital scale form to the more useful decibel form + // decibels are relative to the /adjusted/ waveform +@@ -229,7 +227,6 @@ static Meta::ReplayGainTagMap readXiphTags( TagLib::Ogg::XiphComment *tag ) + return outputMap; + } + +-#ifdef TAGLIB_EXTRAS_FOUND + static Meta::ReplayGainTagMap readASFTags( TagLib::ASF::Tag *tag ) + { + const TagLib::ASF::AttributeListMap &tagMap = tag->attributeListMap(); +@@ -251,7 +248,6 @@ static Meta::ReplayGainTagMap readASFTags( TagLib::ASF::Tag *tag ) + + return outputMap; + } +-#endif + // Bad news: ReplayGain in MP4 is not actually standardized in any way. Maybe reimplement at some point...maybe. See + // http://www.hydrogenaudio.org/forums/lofiversion/index.php/t14322.html + #ifdef DO_NOT_USE_THIS_UNTIL_FIXED +@@ -332,13 +328,11 @@ Meta::readReplayGainTags( TagLib::FileRef fileref ) + if ( file->APETag() ) + map = readAPETags( file->APETag() ); + } +-#ifdef TAGLIB_EXTRAS_FOUND + else if ( TagLib::ASF::File *file = dynamic_cast( fileref.file() ) ) + { + if ( file->tag() ) + map = readASFTags( file->tag() ); + } +-#endif + // See comment above + #ifdef DO_NOT_USE_THIS_UNTIL_FIXED + else if ( TagLib::MP4::File *file = dynamic_cast( fileref.file() ) ) +diff --git a/src/App.cpp b/src/App.cpp +index bd01517..637a0ad 100644 +--- a/src/App.cpp ++++ b/src/App.cpp +@@ -70,10 +70,7 @@ + + #ifdef TAGLIB_EXTRAS_FOUND + #include +-#include +-#include + #include +-#include + #endif + + QMutex Debug::mutex; +@@ -143,11 +140,8 @@ App::App() + + #ifdef TAGLIB_EXTRAS_FOUND + PERF_LOG( "Registering taglib plugins" ) +- TagLib::FileRef::addFileTypeResolver(new MP4FileTypeResolver); +- TagLib::FileRef::addFileTypeResolver(new ASFFileTypeResolver); + TagLib::FileRef::addFileTypeResolver(new RealMediaFileTypeResolver); + TagLib::FileRef::addFileTypeResolver(new AudibleFileTypeResolver); +- TagLib::FileRef::addFileTypeResolver(new WavFileTypeResolver); + PERF_LOG( "Done Registering taglib plugins" ) + #endif + +diff --git a/src/meta/MetaUtility.cpp b/src/meta/MetaUtility.cpp +index b78ef92..314db57 100644 +--- a/src/meta/MetaUtility.cpp ++++ b/src/meta/MetaUtility.cpp +@@ -41,12 +41,10 @@ + #include + #include + #include +-#ifdef TAGLIB_EXTRAS_FOUND + #include + #include + #include + #include +-#endif + + static const QString XESAM_ALBUM = "http://freedesktop.org/standards/xesam/1.0/core#album"; + static const QString XESAM_ARTIST = "http://freedesktop.org/standards/xesam/1.0/core#artist"; +@@ -320,7 +318,6 @@ Meta::Field::writeFields( TagLib::FileRef fileref, const QVariantMap &changes ) + file->xiphComment()->addField("DISCNUMBER", disc); + } + } +-#ifdef TAGLIB_EXTRAS_FOUND + else if ( TagLib::MP4::File *file = dynamic_cast( fileref.file() ) ) + { + if( changes.contains( Meta::Field::COMPOSER ) ) +@@ -338,7 +335,6 @@ Meta::Field::writeFields( TagLib::FileRef fileref, const QVariantMap &changes ) + mp4tag->itemListMap()["disk"] = TagLib::MP4::Item( discnumber, 0 ); + } + } +-#endif + if( shouldSave ) + fileref.save(); + } +diff --git a/src/meta/file/File_p.h b/src/meta/file/File_p.h +index 57c5195..f9e9daf 100644 +--- a/src/meta/file/File_p.h ++++ b/src/meta/file/File_p.h +@@ -50,10 +50,7 @@ + #include + #include + #include +- +-#ifdef TAGLIB_EXTRAS_FOUND + #include +-#endif + + namespace MetaFile + { +@@ -283,7 +280,6 @@ void Track::Private::readMetaData() + disc = strip( flm[ "DISCNUMBER" ].front() ); + } + } +-#ifdef TAGLIB_EXTRAS_FOUND + else if( TagLib::MP4::File *file = dynamic_cast( fileRef.file() ) ) + { + TagLib::MP4::Tag *mp4tag = dynamic_cast< TagLib::MP4::Tag *>( file->tag() ); +@@ -296,7 +292,6 @@ void Track::Private::readMetaData() + disc = QString::number( mp4tag->itemListMap()["disk"].toIntPair().first ); + } + } +-#endif + if( !disc.isEmpty() ) + { + int i = disc.indexOf( '/' ); +diff --git a/src/podcasts/sql/SqlPodcastMeta.cpp b/src/podcasts/sql/SqlPodcastMeta.cpp +index 8b5a96b..4f82eb0 100644 +--- a/src/podcasts/sql/SqlPodcastMeta.cpp ++++ b/src/podcasts/sql/SqlPodcastMeta.cpp +@@ -42,10 +42,7 @@ + #include + #include + #include +- +-#ifdef TAGLIB_EXTRAS_FOUND + #include +-#endif + + class TimecodeWriteCapabilityPodcastImpl : public Meta::TimecodeWriteCapability + { +diff --git a/utilities/collectionscanner/AFTUtility.cpp b/utilities/collectionscanner/AFTUtility.cpp +index 98552c5..3dc009b 100644 +--- a/utilities/collectionscanner/AFTUtility.cpp ++++ b/utilities/collectionscanner/AFTUtility.cpp +@@ -26,6 +26,9 @@ + #include + #include + #include ++#include ++#include ++#include + #include + #include + #include +@@ -35,17 +38,6 @@ + #include + #include + +-#ifdef TAGLIB_EXTRAS_FOUND +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#endif +- + #include + #include + +diff --git a/utilities/collectionscanner/CollectionScanner.cpp b/utilities/collectionscanner/CollectionScanner.cpp +index 673be1c..c3d961e 100644 +--- a/utilities/collectionscanner/CollectionScanner.cpp ++++ b/utilities/collectionscanner/CollectionScanner.cpp +@@ -49,6 +49,9 @@ + #include + #include + #include ++#include ++#include ++#include + #include + #include + #include +@@ -59,14 +62,8 @@ + #include + + #ifdef TAGLIB_EXTRAS_FOUND +-#include +-#include +-#include + #include +-#include +-#include + #include +-#include + #endif + + #include +@@ -101,11 +98,8 @@ CollectionScanner::CollectionScanner( int &argc, char **argv ) + readArgs(); + + #ifdef TAGLIB_EXTRAS_FOUND +- TagLib::FileRef::addFileTypeResolver(new MP4FileTypeResolver); +- TagLib::FileRef::addFileTypeResolver(new ASFFileTypeResolver); + TagLib::FileRef::addFileTypeResolver(new RealMediaFileTypeResolver); + TagLib::FileRef::addFileTypeResolver(new AudibleFileTypeResolver); +- TagLib::FileRef::addFileTypeResolver(new WavFileTypeResolver); + #endif + + m_logfile = ( m_batch ? ( m_incremental ? "amarokcollectionscanner_batchincrementalscan.log" : "amarokcollectionscanner_batchfullscan.log" ) +@@ -644,7 +638,6 @@ CollectionScanner::readTags( const QString &path, TagLib::AudioProperties::ReadS + // if ( images && file->ID3v2Tag() ) + // loadImagesFromTag( *file->ID3v2Tag(), *images ); + } +-#ifdef TAGLIB_EXTRAS_FOUND + else if ( TagLib::MP4::File *file = dynamic_cast( fileref.file() ) ) + { + fileType = mp4; +@@ -667,7 +660,6 @@ CollectionScanner::readTags( const QString &path, TagLib::AudioProperties::ReadS + // images->push_back( EmbeddedImage( mp4tag->cover(), "" ) ); + } + } +-#endif + + if ( !disc.isEmpty() ) + { +diff --git a/utilities/collectionscanner/MetaReplayGain.cpp b/utilities/collectionscanner/MetaReplayGain.cpp +deleted file mode 100644 +index 8e789cf..0000000 +--- a/utilities/collectionscanner/MetaReplayGain.cpp ++++ /dev/null +@@ -1,354 +0,0 @@ +-/* +- Copyright (C) 2009 Alex Merry +- +- This program 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 2 +- of the License, or (at your option) any later version. +- +- This program 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 this program; if not, write to the Free Software +- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +-*/ +- +-// NOTE: this file is used by amarokcollectionscanner and CANNOT use any amaroklib +-// code [this includes debug()] +- +-#include "MetaReplayGain.h" +- +-#include +-#include +- +-// Taglib +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#ifdef TAGLIB_EXTRAS_FOUND +-#include +-#include +-#endif +- +-// converts a peak value from the normal digital scale form to the more useful decibel form +-// decibels are relative to the /adjusted/ waveform +-static qreal peakToDecibels( qreal scaleVal ) +-{ +- if ( scaleVal > 0 ) +- return 20 * log10( scaleVal ); +- else +- return 0; +-} +- +-// NOTE: representation is taken to be a binary value with units in the first column, +-// 1/2 in the second and so on. +-static qreal readRVA2PeakValue( const TagLib::ByteVector &data, int bits, bool *ok ) +-{ +- qreal peak = 0.0; +- // discarding digits at the end reduces precision, but doesn't otherwise change the value +- if ( bits > 32 ) +- bits = 32; +- // the +7 makes sure we round up when we divide by 8 +- unsigned int bytes = (bits + 7) / 8; +- +- // normalize appears not to write a peak at all, and hence sets bits to 0 +- if ( bits == 0 ) +- { +- if ( ok ) +- *ok = true; +- } +- else if ( bits >= 4 && data.size() >= bytes ) // fewer than 4 bits would just be daft +- { +- // excessBits is the number of bits we have to discard at the end +- unsigned int excessBits = (8 * bytes) - bits; +- // mask has 1s everywhere but the last /excessBits/ bits +- quint32 mask = 0xffffffff << excessBits; +- quint32 rawValue = 0; +- for ( unsigned int i = 0; i < bytes; ++i ) +- { +- rawValue <<= 8; +- rawValue += (unsigned char)data[i]; +- } +- rawValue &= mask; +- peak = rawValue; +- // amount we need to "shift" the value right to make the first digit the unit column +- unsigned int rightShift = (8 * bytes) - 1; +- peak /= (qreal)(1 << rightShift); +- if ( ok ) +- *ok = true; +- } +- else +- { +- if ( ok ) +- *ok = false; +- } +- return peak; +-} +- +-// adds the converted version of the scale value if it is a valid, non-negative float +-static void maybeAddPeak( const TagLib::String &scaleVal, Meta::ReplayGainTag key, Meta::ReplayGainTagMap *map ) +-{ +- // scale value is >= 0, and typically not much bigger than 1 +- QString value = TStringToQString( scaleVal ); +- bool ok = false; +- qreal peak = value.toFloat( &ok ); +- if ( ok && peak >= 0 ) +- (*map)[key] = peakToDecibels( peak ); +-} +- +-static void maybeAddGain( const TagLib::String &input, Meta::ReplayGainTag key, Meta::ReplayGainTagMap *map ) +-{ +- QString value = TStringToQString( input ).remove( " dB" ); +- bool ok = false; +- qreal gain = value.toFloat( &ok ); +- if (ok) +- (*map)[key] = gain; +-} +- +-static Meta::ReplayGainTagMap readID3v2Tags( TagLib::ID3v2::Tag *tag ) +-{ +- Meta::ReplayGainTagMap map; +- { // ID3v2.4.0 native replay gain tag support (as written by Quod Libet, for example). +- TagLib::ID3v2::FrameList frames = tag->frameListMap()["RVA2"]; +- frames.append(tag->frameListMap()["XRVA"]); +- if ( !frames.isEmpty() ) +- { +- for ( unsigned int i = 0; i < frames.size(); ++i ) +- { +- // we have to parse this frame ourselves +- // ID3v2 frame header is 10 bytes, so skip that +- TagLib::ByteVector data = frames[i]->render().mid( 10 ); +- unsigned int offset = 0; +- QString desc( data.data() ); +- offset += desc.count() + 1; +- unsigned int channel = data.mid( offset, 1 ).toUInt( true ); +- // channel 1 is the main volume - the only one we care about +- if ( channel == 1 ) +- { +- ++offset; +- qint16 adjustment512 = data.mid( offset, 2 ).toShort( true ); +- qreal adjustment = ( (qreal)adjustment512 ) / 512.0; +- offset += 2; +- unsigned int peakBits = data.mid( offset, 1 ).toUInt( true ); +- ++offset; +- bool ok = false; +- qreal peak = readRVA2PeakValue( data.mid( offset ), peakBits, &ok ); +- if ( ok ) +- { +- if ( desc.toLower() == "album" ) +- { +- map[Meta::ReplayGain_Album_Gain] = adjustment; +- map[Meta::ReplayGain_Album_Peak] = peakToDecibels( peak ); +- } +- else if ( desc.toLower() == "track" || !map.contains( Meta::ReplayGain_Track_Gain ) ) +- { +- map[Meta::ReplayGain_Track_Gain] = adjustment; +- map[Meta::ReplayGain_Track_Peak] = peakToDecibels( peak ); +- } +- } +- } +- } +- if ( !map.isEmpty() ) +- return map; +- } +- } +- +- { // Foobar2000-style ID3v2.3.0 tags +- TagLib::ID3v2::FrameList frames = tag->frameListMap()["TXXX"]; +- for ( TagLib::ID3v2::FrameList::Iterator it = frames.begin(); it != frames.end(); ++it ) { +- TagLib::ID3v2::UserTextIdentificationFrame* frame = +- dynamic_cast( *it ); +- if ( frame && frame->fieldList().size() >= 2 ) +- { +- QString desc = TStringToQString( frame->description() ).toLower(); +- if ( desc == "replaygain_album_gain" ) +- maybeAddGain( frame->fieldList()[1], Meta::ReplayGain_Album_Gain, &map ); +- if ( desc == "replaygain_album_peak" ) +- maybeAddPeak( frame->fieldList()[1], Meta::ReplayGain_Album_Peak, &map ); +- if ( desc == "replaygain_track_gain" ) +- maybeAddGain( frame->fieldList()[1], Meta::ReplayGain_Track_Gain, &map ); +- if ( desc == "replaygain_track_peak" ) +- maybeAddPeak( frame->fieldList()[1], Meta::ReplayGain_Track_Peak, &map ); +- } +- } +- } +- return map; +-} +- +-static Meta::ReplayGainTagMap readAPETags( TagLib::APE::Tag *tag ) +-{ +- Meta::ReplayGainTagMap map; +- const TagLib::APE::ItemListMap &items = tag->itemListMap(); +- if ( items.contains("REPLAYGAIN_TRACK_GAIN") ) +- { +- maybeAddGain( items["REPLAYGAIN_TRACK_GAIN"].values()[0], Meta::ReplayGain_Track_Gain, &map ); +- if ( items.contains("REPLAYGAIN_TRACK_PEAK") ) +- maybeAddPeak( items["REPLAYGAIN_TRACK_PEAK"].values()[0], Meta::ReplayGain_Track_Peak, &map ); +- } +- if ( items.contains("REPLAYGAIN_ALBUM_GAIN") ) +- { +- maybeAddGain( items["REPLAYGAIN_ALBUM_GAIN"].values()[0], Meta::ReplayGain_Album_Gain, &map ); +- if ( items.contains("REPLAYGAIN_ALBUM_PEAK") ) +- maybeAddPeak( items["REPLAYGAIN_ALBUM_PEAK"].values()[0], Meta::ReplayGain_Album_Peak, &map ); +- } +- return map; +-} +- +-static Meta::ReplayGainTagMap readXiphTags( TagLib::Ogg::XiphComment *tag ) +-{ +- const TagLib::Ogg::FieldListMap &tagMap = tag->fieldListMap(); +- Meta::ReplayGainTagMap outputMap; +- +- if ( !tagMap["REPLAYGAIN_TRACK_GAIN"].isEmpty() ) +- { +- maybeAddGain( tagMap["REPLAYGAIN_TRACK_GAIN"].front(), Meta::ReplayGain_Track_Gain, &outputMap ); +- if ( !tagMap["REPLAYGAIN_TRACK_PEAK"].isEmpty() ) +- maybeAddPeak( tagMap["REPLAYGAIN_TRACK_PEAK"].front(), Meta::ReplayGain_Track_Peak, &outputMap ); +- } +- +- if ( !tagMap["REPLAYGAIN_ALBUM_GAIN"].isEmpty() ) +- { +- maybeAddGain( tagMap["REPLAYGAIN_ALBUM_GAIN"].front(), Meta::ReplayGain_Album_Gain, &outputMap ); +- if ( !tagMap["REPLAYGAIN_ALBUM_PEAK"].isEmpty() ) +- maybeAddPeak( tagMap["REPLAYGAIN_ALBUM_PEAK"].front(), Meta::ReplayGain_Album_Peak, &outputMap ); +- } +- +- return outputMap; +-} +- +-#ifdef TAGLIB_EXTRAS_FOUND +-static Meta::ReplayGainTagMap readASFTags( TagLib::ASF::Tag *tag ) +-{ +- const TagLib::ASF::AttributeListMap &tagMap = tag->attributeListMap(); +- Meta::ReplayGainTagMap outputMap; +- +- if ( !tagMap["REPLAYGAIN_TRACK_GAIN"].isEmpty() ) +- { +- maybeAddGain( tagMap["REPLAYGAIN_TRACK_GAIN"].front().toString(), Meta::ReplayGain_Track_Gain, &outputMap ); +- if ( !tagMap["REPLAYGAIN_TRACK_PEAK"].isEmpty() ) +- maybeAddPeak( tagMap["REPLAYGAIN_TRACK_PEAK"].front().toString(), Meta::ReplayGain_Track_Peak, &outputMap ); +- } +- +- if ( !tagMap["REPLAYGAIN_ALBUM_GAIN"].isEmpty() ) +- { +- maybeAddGain( tagMap["REPLAYGAIN_ALBUM_GAIN"].front().toString(), Meta::ReplayGain_Album_Gain, &outputMap ); +- if ( !tagMap["REPLAYGAIN_ALBUM_PEAK"].isEmpty() ) +- maybeAddPeak( tagMap["REPLAYGAIN_ALBUM_PEAK"].front().toString(), Meta::ReplayGain_Album_Peak, &outputMap ); +- } +- +- return outputMap; +-} +-#endif +-// Bad news: ReplayGain in MP4 is not actually standardized in any way. Maybe reimplement at some point...maybe. See +-// http://www.hydrogenaudio.org/forums/lofiversion/index.php/t14322.html +-#ifdef DO_NOT_USE_THIS_UNTIL_FIXED +-static Meta::ReplayGainTagMap readMP4Tags( TagLib::MP4::Tag *tag ) +-{ +- Meta::ReplayGainTagMap outputMap; +- +- if ( !tag->trackReplayGain().isNull() ) { +- maybeAddGain( tag->trackReplayGain(), Meta::ReplayGain_Track_Gain, &outputMap ); +- if ( !tag->trackReplayGainPeak().isNull() ) +- maybeAddPeak( tag->trackReplayGainPeak(), Meta::ReplayGain_Track_Peak, &outputMap ); +- } +- +- if ( !tag->albumReplayGain().isNull() ) { +- maybeAddGain( tag->albumReplayGain(), Meta::ReplayGain_Album_Gain, &outputMap ); +- if ( !tag->albumReplayGainPeak().isNull() ) +- maybeAddPeak( tag->albumReplayGainPeak(), Meta::ReplayGain_Album_Peak, &outputMap ); +- } +- +- return outputMap; +-} +-#endif +- +-Meta::ReplayGainTagMap +-Meta::readReplayGainTags( TagLib::FileRef fileref ) +-{ +- Meta::ReplayGainTagMap map; +- // NB: we can't get replay gain info from MPC files, since it's stored in some magic place +- // and not in the APE tags, and taglib doesn't let us access the information (unless +- // we want to parse the file ourselves). +- // FIXME: should we try getting the info from the MPC APE tag just in case? +- +- if ( TagLib::MPEG::File *file = dynamic_cast( fileref.file() ) ) +- { +- if ( file->ID3v2Tag() ) +- map = readID3v2Tags( file->ID3v2Tag() ); +- if ( map.isEmpty() && file->APETag() ) +- map = readAPETags( file->APETag() ); +- } +- else if ( TagLib::Ogg::Vorbis::File *file = dynamic_cast( fileref.file() ) ) +- { +- if ( file->tag() ) +- map = readXiphTags( file->tag() ); +- } +- else if ( TagLib::FLAC::File *file = dynamic_cast( fileref.file() ) ) +- { +- if ( file->xiphComment() ) +- map = readXiphTags( file->xiphComment() ); +- if ( map.isEmpty() && file->ID3v2Tag() ) +- map = readID3v2Tags( file->ID3v2Tag() ); +- } +- else if ( TagLib::Ogg::FLAC::File *file = dynamic_cast( fileref.file() ) ) +- { +- if ( file->tag() ) +- map = readXiphTags( file->tag() ); +- } +- else if ( TagLib::WavPack::File *file = dynamic_cast( fileref.file() ) ) +- { +- if ( file->APETag() ) +- map = readAPETags( file->APETag() ); +- } +- else if ( TagLib::TrueAudio::File *file = dynamic_cast( fileref.file() ) ) +- { +- if ( file->ID3v2Tag() ) +- map = readID3v2Tags( file->ID3v2Tag() ); +- } +- else if ( TagLib::Ogg::Speex::File *file = dynamic_cast( fileref.file() ) ) +- { +- if ( file->tag() ) +- map = readXiphTags( file->tag() ); +- } +- else if ( TagLib::MPC::File *file = dynamic_cast( fileref.file() ) ) +- { +- // This is NOT the correct way to get replay gain tags from MPC files, but +- // taglib doesn't allow us access to the real information. +- // This allows people to work around this issue by copying their replay gain +- // information to the APE tag. +- if ( file->APETag() ) +- map = readAPETags( file->APETag() ); +- } +-#ifdef TAGLIB_EXTRAS_FOUND +- else if ( TagLib::ASF::File *file = dynamic_cast( fileref.file() ) ) +- { +- if ( file->tag() ) +- map = readASFTags( file->tag() ); +- } +-#endif +-// See comment above +-#ifdef DO_NOT_USE_THIS_UNTIL_FIXED +- else if ( TagLib::MP4::File *file = dynamic_cast( fileref.file() ) ) +- { +- if ( file->tag() ) +- map = readMP4Tags( file->getMP4Tag() ); +- } +-#endif +- return map; +-} +- +diff --git a/utilities/collectionscanner/MetaReplayGain.h b/utilities/collectionscanner/MetaReplayGain.h +deleted file mode 100644 +index eba860a..0000000 +--- a/utilities/collectionscanner/MetaReplayGain.h ++++ /dev/null +@@ -1,49 +0,0 @@ +-/* +- Copyright (C) 2009 Alex Merry +- +- This program 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 2 +- of the License, or (at your option) any later version. +- +- This program 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 this program; if not, write to the Free Software +- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +-*/ +- +-#ifndef AMAROK_METAREPLAYGAIN_H +-#define AMAROK_METAREPLAYGAIN_H +- +-#include +- +-// Taglib +-#include +- +-/* This file exists (rather than putting the method in MetaUtility.h and +- * MetaUtility.cpp) because we need to share the implementation between +- * amaroklib and amarokcollectionscanner (which doesn't link to amaroklib). +- */ +-namespace Meta +-{ +- enum ReplayGainTag +- { +- ReplayGain_Track_Gain, +- ReplayGain_Track_Peak, +- ReplayGain_Album_Gain, +- ReplayGain_Album_Peak +- }; +- +- typedef QMap ReplayGainTagMap; +- +- /** +- * Reads the replay gain tags from a taglib file. +- */ +- ReplayGainTagMap readReplayGainTags( TagLib::FileRef fileref ); +-} +- +-#endif // AMAROK_METAREPLAYGAIN_H diff --git a/amarok.spec b/amarok.spec index e4115dc..716e134 100644 --- a/amarok.spec +++ b/amarok.spec @@ -2,7 +2,7 @@ Name: amarok Summary: Media player Version: 2.1.85 -Release: 1%{?dist} +Release: 2%{?dist} Group: Applications/Multimedia License: GPLv2+ @@ -13,6 +13,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Patch50: amarok-2.0.90-qtscript_not_required.patch ## upstream patches +Patch100: amarok-taglib.patch BuildRequires: curl-devel BuildRequires: desktop-file-utils @@ -31,8 +32,8 @@ BuildRequires: libxml2-devel BuildRequires: loudmouth-devel BuildRequires: mysql-embedded-devel BuildRequires: soprano-devel -BuildRequires: taglib-devel -BuildRequires: taglib-extras-devel +BuildRequires: taglib-devel >= 1.6 +BuildRequires: taglib-extras-devel >= 1.0.0 %global kdelibs4_version %((kde4-config --version 2>/dev/null || echo KDE 4.2.0) | grep '^KDE' | cut -d' ' -f2 | cut -d'-' -f1) %{?_qt4_version:Requires: qt4%{?_isa} >= %{_qt4_version}} @@ -78,6 +79,8 @@ Obsoletes: amarok-utilities < 2.0.96 %patch50 -p1 -b .qtscript_not_required +%patch100 -p1 -b .taglib + %build mkdir -p %{_target_platform} @@ -168,6 +171,9 @@ fi %changelog +* Thu Sep 17 2009 Rex Dieter 2.1.85-2 +- BR: taglib-devel >= 1.6, taglib-extras-devel >= 1.0 + * Mon Sep 14 2009 Rex Dieter 2.1.85-1 - amarok-2.1.85 (2.2beta2) From 7a6b3557dfda4b700e37ef57c9aad93ff4030950 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Tue, 22 Sep 2009 02:01:41 +0000 Subject: [PATCH 03/32] - amarok-2.1.90 (2.2rc1) --- .cvsignore | 2 +- amarok-taglib.patch | 673 -------------------------------------------- amarok.spec | 12 +- sources | 2 +- 4 files changed, 7 insertions(+), 682 deletions(-) delete mode 100644 amarok-taglib.patch diff --git a/.cvsignore b/.cvsignore index b34611e..0615ee7 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -amarok-2.1.85.tar.bz2 +amarok-2.1.90.tar.bz2 diff --git a/amarok-taglib.patch b/amarok-taglib.patch deleted file mode 100644 index 15596d5..0000000 --- a/amarok-taglib.patch +++ /dev/null @@ -1,673 +0,0 @@ -# git diff 3ee0ef70c0c9d5de982091e353804c990c35ea4e -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 8219bc6..e4b6b94 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -13,10 +13,10 @@ option(WITH_IPOD "Enable iPod support in Amarok" ON) - include(CheckLibraryExists) - check_library_exists(dl dlopen "" LIBDL_FOUND) - --set(TAGLIB_MIN_VERSION "1.5") -+set(TAGLIB_MIN_VERSION "1.6") - find_package(Taglib REQUIRED) - --find_package(Taglib-Extras 0.1 REQUIRED) -+find_package(Taglib-Extras 1.0 REQUIRED) - if( TAGLIB-EXTRAS_FOUND ) - add_definitions( -DTAGLIB_EXTRAS_FOUND ) - endif( TAGLIB-EXTRAS_FOUND ) -diff --git a/shared/MetaReplayGain.cpp b/shared/MetaReplayGain.cpp -index d6edd95..97073d5 100644 ---- a/shared/MetaReplayGain.cpp -+++ b/shared/MetaReplayGain.cpp -@@ -38,10 +38,8 @@ - #include - #include - #include --#ifdef TAGLIB_EXTRAS_FOUND - #include - #include --#endif - - // converts a peak value from the normal digital scale form to the more useful decibel form - // decibels are relative to the /adjusted/ waveform -@@ -229,7 +227,6 @@ static Meta::ReplayGainTagMap readXiphTags( TagLib::Ogg::XiphComment *tag ) - return outputMap; - } - --#ifdef TAGLIB_EXTRAS_FOUND - static Meta::ReplayGainTagMap readASFTags( TagLib::ASF::Tag *tag ) - { - const TagLib::ASF::AttributeListMap &tagMap = tag->attributeListMap(); -@@ -251,7 +248,6 @@ static Meta::ReplayGainTagMap readASFTags( TagLib::ASF::Tag *tag ) - - return outputMap; - } --#endif - // Bad news: ReplayGain in MP4 is not actually standardized in any way. Maybe reimplement at some point...maybe. See - // http://www.hydrogenaudio.org/forums/lofiversion/index.php/t14322.html - #ifdef DO_NOT_USE_THIS_UNTIL_FIXED -@@ -332,13 +328,11 @@ Meta::readReplayGainTags( TagLib::FileRef fileref ) - if ( file->APETag() ) - map = readAPETags( file->APETag() ); - } --#ifdef TAGLIB_EXTRAS_FOUND - else if ( TagLib::ASF::File *file = dynamic_cast( fileref.file() ) ) - { - if ( file->tag() ) - map = readASFTags( file->tag() ); - } --#endif - // See comment above - #ifdef DO_NOT_USE_THIS_UNTIL_FIXED - else if ( TagLib::MP4::File *file = dynamic_cast( fileref.file() ) ) -diff --git a/src/App.cpp b/src/App.cpp -index bd01517..637a0ad 100644 ---- a/src/App.cpp -+++ b/src/App.cpp -@@ -70,10 +70,7 @@ - - #ifdef TAGLIB_EXTRAS_FOUND - #include --#include --#include - #include --#include - #endif - - QMutex Debug::mutex; -@@ -143,11 +140,8 @@ App::App() - - #ifdef TAGLIB_EXTRAS_FOUND - PERF_LOG( "Registering taglib plugins" ) -- TagLib::FileRef::addFileTypeResolver(new MP4FileTypeResolver); -- TagLib::FileRef::addFileTypeResolver(new ASFFileTypeResolver); - TagLib::FileRef::addFileTypeResolver(new RealMediaFileTypeResolver); - TagLib::FileRef::addFileTypeResolver(new AudibleFileTypeResolver); -- TagLib::FileRef::addFileTypeResolver(new WavFileTypeResolver); - PERF_LOG( "Done Registering taglib plugins" ) - #endif - -diff --git a/src/meta/MetaUtility.cpp b/src/meta/MetaUtility.cpp -index b78ef92..314db57 100644 ---- a/src/meta/MetaUtility.cpp -+++ b/src/meta/MetaUtility.cpp -@@ -41,12 +41,10 @@ - #include - #include - #include --#ifdef TAGLIB_EXTRAS_FOUND - #include - #include - #include - #include --#endif - - static const QString XESAM_ALBUM = "http://freedesktop.org/standards/xesam/1.0/core#album"; - static const QString XESAM_ARTIST = "http://freedesktop.org/standards/xesam/1.0/core#artist"; -@@ -320,7 +318,6 @@ Meta::Field::writeFields( TagLib::FileRef fileref, const QVariantMap &changes ) - file->xiphComment()->addField("DISCNUMBER", disc); - } - } --#ifdef TAGLIB_EXTRAS_FOUND - else if ( TagLib::MP4::File *file = dynamic_cast( fileref.file() ) ) - { - if( changes.contains( Meta::Field::COMPOSER ) ) -@@ -338,7 +335,6 @@ Meta::Field::writeFields( TagLib::FileRef fileref, const QVariantMap &changes ) - mp4tag->itemListMap()["disk"] = TagLib::MP4::Item( discnumber, 0 ); - } - } --#endif - if( shouldSave ) - fileref.save(); - } -diff --git a/src/meta/file/File_p.h b/src/meta/file/File_p.h -index 57c5195..f9e9daf 100644 ---- a/src/meta/file/File_p.h -+++ b/src/meta/file/File_p.h -@@ -50,10 +50,7 @@ - #include - #include - #include -- --#ifdef TAGLIB_EXTRAS_FOUND - #include --#endif - - namespace MetaFile - { -@@ -283,7 +280,6 @@ void Track::Private::readMetaData() - disc = strip( flm[ "DISCNUMBER" ].front() ); - } - } --#ifdef TAGLIB_EXTRAS_FOUND - else if( TagLib::MP4::File *file = dynamic_cast( fileRef.file() ) ) - { - TagLib::MP4::Tag *mp4tag = dynamic_cast< TagLib::MP4::Tag *>( file->tag() ); -@@ -296,7 +292,6 @@ void Track::Private::readMetaData() - disc = QString::number( mp4tag->itemListMap()["disk"].toIntPair().first ); - } - } --#endif - if( !disc.isEmpty() ) - { - int i = disc.indexOf( '/' ); -diff --git a/src/podcasts/sql/SqlPodcastMeta.cpp b/src/podcasts/sql/SqlPodcastMeta.cpp -index 8b5a96b..4f82eb0 100644 ---- a/src/podcasts/sql/SqlPodcastMeta.cpp -+++ b/src/podcasts/sql/SqlPodcastMeta.cpp -@@ -42,10 +42,7 @@ - #include - #include - #include -- --#ifdef TAGLIB_EXTRAS_FOUND - #include --#endif - - class TimecodeWriteCapabilityPodcastImpl : public Meta::TimecodeWriteCapability - { -diff --git a/utilities/collectionscanner/AFTUtility.cpp b/utilities/collectionscanner/AFTUtility.cpp -index 98552c5..3dc009b 100644 ---- a/utilities/collectionscanner/AFTUtility.cpp -+++ b/utilities/collectionscanner/AFTUtility.cpp -@@ -26,6 +26,9 @@ - #include - #include - #include -+#include -+#include -+#include - #include - #include - #include -@@ -35,17 +38,6 @@ - #include - #include - --#ifdef TAGLIB_EXTRAS_FOUND --#include --#include --#include --#include --#include --#include --#include --#include --#endif -- - #include - #include - -diff --git a/utilities/collectionscanner/CollectionScanner.cpp b/utilities/collectionscanner/CollectionScanner.cpp -index 673be1c..c3d961e 100644 ---- a/utilities/collectionscanner/CollectionScanner.cpp -+++ b/utilities/collectionscanner/CollectionScanner.cpp -@@ -49,6 +49,9 @@ - #include - #include - #include -+#include -+#include -+#include - #include - #include - #include -@@ -59,14 +62,8 @@ - #include - - #ifdef TAGLIB_EXTRAS_FOUND --#include --#include --#include - #include --#include --#include - #include --#include - #endif - - #include -@@ -101,11 +98,8 @@ CollectionScanner::CollectionScanner( int &argc, char **argv ) - readArgs(); - - #ifdef TAGLIB_EXTRAS_FOUND -- TagLib::FileRef::addFileTypeResolver(new MP4FileTypeResolver); -- TagLib::FileRef::addFileTypeResolver(new ASFFileTypeResolver); - TagLib::FileRef::addFileTypeResolver(new RealMediaFileTypeResolver); - TagLib::FileRef::addFileTypeResolver(new AudibleFileTypeResolver); -- TagLib::FileRef::addFileTypeResolver(new WavFileTypeResolver); - #endif - - m_logfile = ( m_batch ? ( m_incremental ? "amarokcollectionscanner_batchincrementalscan.log" : "amarokcollectionscanner_batchfullscan.log" ) -@@ -644,7 +638,6 @@ CollectionScanner::readTags( const QString &path, TagLib::AudioProperties::ReadS - // if ( images && file->ID3v2Tag() ) - // loadImagesFromTag( *file->ID3v2Tag(), *images ); - } --#ifdef TAGLIB_EXTRAS_FOUND - else if ( TagLib::MP4::File *file = dynamic_cast( fileref.file() ) ) - { - fileType = mp4; -@@ -667,7 +660,6 @@ CollectionScanner::readTags( const QString &path, TagLib::AudioProperties::ReadS - // images->push_back( EmbeddedImage( mp4tag->cover(), "" ) ); - } - } --#endif - - if ( !disc.isEmpty() ) - { -diff --git a/utilities/collectionscanner/MetaReplayGain.cpp b/utilities/collectionscanner/MetaReplayGain.cpp -deleted file mode 100644 -index 8e789cf..0000000 ---- a/utilities/collectionscanner/MetaReplayGain.cpp -+++ /dev/null -@@ -1,354 +0,0 @@ --/* -- Copyright (C) 2009 Alex Merry -- -- This program 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 2 -- of the License, or (at your option) any later version. -- -- This program 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 this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA --*/ -- --// NOTE: this file is used by amarokcollectionscanner and CANNOT use any amaroklib --// code [this includes debug()] -- --#include "MetaReplayGain.h" -- --#include --#include -- --// Taglib --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#ifdef TAGLIB_EXTRAS_FOUND --#include --#include --#endif -- --// converts a peak value from the normal digital scale form to the more useful decibel form --// decibels are relative to the /adjusted/ waveform --static qreal peakToDecibels( qreal scaleVal ) --{ -- if ( scaleVal > 0 ) -- return 20 * log10( scaleVal ); -- else -- return 0; --} -- --// NOTE: representation is taken to be a binary value with units in the first column, --// 1/2 in the second and so on. --static qreal readRVA2PeakValue( const TagLib::ByteVector &data, int bits, bool *ok ) --{ -- qreal peak = 0.0; -- // discarding digits at the end reduces precision, but doesn't otherwise change the value -- if ( bits > 32 ) -- bits = 32; -- // the +7 makes sure we round up when we divide by 8 -- unsigned int bytes = (bits + 7) / 8; -- -- // normalize appears not to write a peak at all, and hence sets bits to 0 -- if ( bits == 0 ) -- { -- if ( ok ) -- *ok = true; -- } -- else if ( bits >= 4 && data.size() >= bytes ) // fewer than 4 bits would just be daft -- { -- // excessBits is the number of bits we have to discard at the end -- unsigned int excessBits = (8 * bytes) - bits; -- // mask has 1s everywhere but the last /excessBits/ bits -- quint32 mask = 0xffffffff << excessBits; -- quint32 rawValue = 0; -- for ( unsigned int i = 0; i < bytes; ++i ) -- { -- rawValue <<= 8; -- rawValue += (unsigned char)data[i]; -- } -- rawValue &= mask; -- peak = rawValue; -- // amount we need to "shift" the value right to make the first digit the unit column -- unsigned int rightShift = (8 * bytes) - 1; -- peak /= (qreal)(1 << rightShift); -- if ( ok ) -- *ok = true; -- } -- else -- { -- if ( ok ) -- *ok = false; -- } -- return peak; --} -- --// adds the converted version of the scale value if it is a valid, non-negative float --static void maybeAddPeak( const TagLib::String &scaleVal, Meta::ReplayGainTag key, Meta::ReplayGainTagMap *map ) --{ -- // scale value is >= 0, and typically not much bigger than 1 -- QString value = TStringToQString( scaleVal ); -- bool ok = false; -- qreal peak = value.toFloat( &ok ); -- if ( ok && peak >= 0 ) -- (*map)[key] = peakToDecibels( peak ); --} -- --static void maybeAddGain( const TagLib::String &input, Meta::ReplayGainTag key, Meta::ReplayGainTagMap *map ) --{ -- QString value = TStringToQString( input ).remove( " dB" ); -- bool ok = false; -- qreal gain = value.toFloat( &ok ); -- if (ok) -- (*map)[key] = gain; --} -- --static Meta::ReplayGainTagMap readID3v2Tags( TagLib::ID3v2::Tag *tag ) --{ -- Meta::ReplayGainTagMap map; -- { // ID3v2.4.0 native replay gain tag support (as written by Quod Libet, for example). -- TagLib::ID3v2::FrameList frames = tag->frameListMap()["RVA2"]; -- frames.append(tag->frameListMap()["XRVA"]); -- if ( !frames.isEmpty() ) -- { -- for ( unsigned int i = 0; i < frames.size(); ++i ) -- { -- // we have to parse this frame ourselves -- // ID3v2 frame header is 10 bytes, so skip that -- TagLib::ByteVector data = frames[i]->render().mid( 10 ); -- unsigned int offset = 0; -- QString desc( data.data() ); -- offset += desc.count() + 1; -- unsigned int channel = data.mid( offset, 1 ).toUInt( true ); -- // channel 1 is the main volume - the only one we care about -- if ( channel == 1 ) -- { -- ++offset; -- qint16 adjustment512 = data.mid( offset, 2 ).toShort( true ); -- qreal adjustment = ( (qreal)adjustment512 ) / 512.0; -- offset += 2; -- unsigned int peakBits = data.mid( offset, 1 ).toUInt( true ); -- ++offset; -- bool ok = false; -- qreal peak = readRVA2PeakValue( data.mid( offset ), peakBits, &ok ); -- if ( ok ) -- { -- if ( desc.toLower() == "album" ) -- { -- map[Meta::ReplayGain_Album_Gain] = adjustment; -- map[Meta::ReplayGain_Album_Peak] = peakToDecibels( peak ); -- } -- else if ( desc.toLower() == "track" || !map.contains( Meta::ReplayGain_Track_Gain ) ) -- { -- map[Meta::ReplayGain_Track_Gain] = adjustment; -- map[Meta::ReplayGain_Track_Peak] = peakToDecibels( peak ); -- } -- } -- } -- } -- if ( !map.isEmpty() ) -- return map; -- } -- } -- -- { // Foobar2000-style ID3v2.3.0 tags -- TagLib::ID3v2::FrameList frames = tag->frameListMap()["TXXX"]; -- for ( TagLib::ID3v2::FrameList::Iterator it = frames.begin(); it != frames.end(); ++it ) { -- TagLib::ID3v2::UserTextIdentificationFrame* frame = -- dynamic_cast( *it ); -- if ( frame && frame->fieldList().size() >= 2 ) -- { -- QString desc = TStringToQString( frame->description() ).toLower(); -- if ( desc == "replaygain_album_gain" ) -- maybeAddGain( frame->fieldList()[1], Meta::ReplayGain_Album_Gain, &map ); -- if ( desc == "replaygain_album_peak" ) -- maybeAddPeak( frame->fieldList()[1], Meta::ReplayGain_Album_Peak, &map ); -- if ( desc == "replaygain_track_gain" ) -- maybeAddGain( frame->fieldList()[1], Meta::ReplayGain_Track_Gain, &map ); -- if ( desc == "replaygain_track_peak" ) -- maybeAddPeak( frame->fieldList()[1], Meta::ReplayGain_Track_Peak, &map ); -- } -- } -- } -- return map; --} -- --static Meta::ReplayGainTagMap readAPETags( TagLib::APE::Tag *tag ) --{ -- Meta::ReplayGainTagMap map; -- const TagLib::APE::ItemListMap &items = tag->itemListMap(); -- if ( items.contains("REPLAYGAIN_TRACK_GAIN") ) -- { -- maybeAddGain( items["REPLAYGAIN_TRACK_GAIN"].values()[0], Meta::ReplayGain_Track_Gain, &map ); -- if ( items.contains("REPLAYGAIN_TRACK_PEAK") ) -- maybeAddPeak( items["REPLAYGAIN_TRACK_PEAK"].values()[0], Meta::ReplayGain_Track_Peak, &map ); -- } -- if ( items.contains("REPLAYGAIN_ALBUM_GAIN") ) -- { -- maybeAddGain( items["REPLAYGAIN_ALBUM_GAIN"].values()[0], Meta::ReplayGain_Album_Gain, &map ); -- if ( items.contains("REPLAYGAIN_ALBUM_PEAK") ) -- maybeAddPeak( items["REPLAYGAIN_ALBUM_PEAK"].values()[0], Meta::ReplayGain_Album_Peak, &map ); -- } -- return map; --} -- --static Meta::ReplayGainTagMap readXiphTags( TagLib::Ogg::XiphComment *tag ) --{ -- const TagLib::Ogg::FieldListMap &tagMap = tag->fieldListMap(); -- Meta::ReplayGainTagMap outputMap; -- -- if ( !tagMap["REPLAYGAIN_TRACK_GAIN"].isEmpty() ) -- { -- maybeAddGain( tagMap["REPLAYGAIN_TRACK_GAIN"].front(), Meta::ReplayGain_Track_Gain, &outputMap ); -- if ( !tagMap["REPLAYGAIN_TRACK_PEAK"].isEmpty() ) -- maybeAddPeak( tagMap["REPLAYGAIN_TRACK_PEAK"].front(), Meta::ReplayGain_Track_Peak, &outputMap ); -- } -- -- if ( !tagMap["REPLAYGAIN_ALBUM_GAIN"].isEmpty() ) -- { -- maybeAddGain( tagMap["REPLAYGAIN_ALBUM_GAIN"].front(), Meta::ReplayGain_Album_Gain, &outputMap ); -- if ( !tagMap["REPLAYGAIN_ALBUM_PEAK"].isEmpty() ) -- maybeAddPeak( tagMap["REPLAYGAIN_ALBUM_PEAK"].front(), Meta::ReplayGain_Album_Peak, &outputMap ); -- } -- -- return outputMap; --} -- --#ifdef TAGLIB_EXTRAS_FOUND --static Meta::ReplayGainTagMap readASFTags( TagLib::ASF::Tag *tag ) --{ -- const TagLib::ASF::AttributeListMap &tagMap = tag->attributeListMap(); -- Meta::ReplayGainTagMap outputMap; -- -- if ( !tagMap["REPLAYGAIN_TRACK_GAIN"].isEmpty() ) -- { -- maybeAddGain( tagMap["REPLAYGAIN_TRACK_GAIN"].front().toString(), Meta::ReplayGain_Track_Gain, &outputMap ); -- if ( !tagMap["REPLAYGAIN_TRACK_PEAK"].isEmpty() ) -- maybeAddPeak( tagMap["REPLAYGAIN_TRACK_PEAK"].front().toString(), Meta::ReplayGain_Track_Peak, &outputMap ); -- } -- -- if ( !tagMap["REPLAYGAIN_ALBUM_GAIN"].isEmpty() ) -- { -- maybeAddGain( tagMap["REPLAYGAIN_ALBUM_GAIN"].front().toString(), Meta::ReplayGain_Album_Gain, &outputMap ); -- if ( !tagMap["REPLAYGAIN_ALBUM_PEAK"].isEmpty() ) -- maybeAddPeak( tagMap["REPLAYGAIN_ALBUM_PEAK"].front().toString(), Meta::ReplayGain_Album_Peak, &outputMap ); -- } -- -- return outputMap; --} --#endif --// Bad news: ReplayGain in MP4 is not actually standardized in any way. Maybe reimplement at some point...maybe. See --// http://www.hydrogenaudio.org/forums/lofiversion/index.php/t14322.html --#ifdef DO_NOT_USE_THIS_UNTIL_FIXED --static Meta::ReplayGainTagMap readMP4Tags( TagLib::MP4::Tag *tag ) --{ -- Meta::ReplayGainTagMap outputMap; -- -- if ( !tag->trackReplayGain().isNull() ) { -- maybeAddGain( tag->trackReplayGain(), Meta::ReplayGain_Track_Gain, &outputMap ); -- if ( !tag->trackReplayGainPeak().isNull() ) -- maybeAddPeak( tag->trackReplayGainPeak(), Meta::ReplayGain_Track_Peak, &outputMap ); -- } -- -- if ( !tag->albumReplayGain().isNull() ) { -- maybeAddGain( tag->albumReplayGain(), Meta::ReplayGain_Album_Gain, &outputMap ); -- if ( !tag->albumReplayGainPeak().isNull() ) -- maybeAddPeak( tag->albumReplayGainPeak(), Meta::ReplayGain_Album_Peak, &outputMap ); -- } -- -- return outputMap; --} --#endif -- --Meta::ReplayGainTagMap --Meta::readReplayGainTags( TagLib::FileRef fileref ) --{ -- Meta::ReplayGainTagMap map; -- // NB: we can't get replay gain info from MPC files, since it's stored in some magic place -- // and not in the APE tags, and taglib doesn't let us access the information (unless -- // we want to parse the file ourselves). -- // FIXME: should we try getting the info from the MPC APE tag just in case? -- -- if ( TagLib::MPEG::File *file = dynamic_cast( fileref.file() ) ) -- { -- if ( file->ID3v2Tag() ) -- map = readID3v2Tags( file->ID3v2Tag() ); -- if ( map.isEmpty() && file->APETag() ) -- map = readAPETags( file->APETag() ); -- } -- else if ( TagLib::Ogg::Vorbis::File *file = dynamic_cast( fileref.file() ) ) -- { -- if ( file->tag() ) -- map = readXiphTags( file->tag() ); -- } -- else if ( TagLib::FLAC::File *file = dynamic_cast( fileref.file() ) ) -- { -- if ( file->xiphComment() ) -- map = readXiphTags( file->xiphComment() ); -- if ( map.isEmpty() && file->ID3v2Tag() ) -- map = readID3v2Tags( file->ID3v2Tag() ); -- } -- else if ( TagLib::Ogg::FLAC::File *file = dynamic_cast( fileref.file() ) ) -- { -- if ( file->tag() ) -- map = readXiphTags( file->tag() ); -- } -- else if ( TagLib::WavPack::File *file = dynamic_cast( fileref.file() ) ) -- { -- if ( file->APETag() ) -- map = readAPETags( file->APETag() ); -- } -- else if ( TagLib::TrueAudio::File *file = dynamic_cast( fileref.file() ) ) -- { -- if ( file->ID3v2Tag() ) -- map = readID3v2Tags( file->ID3v2Tag() ); -- } -- else if ( TagLib::Ogg::Speex::File *file = dynamic_cast( fileref.file() ) ) -- { -- if ( file->tag() ) -- map = readXiphTags( file->tag() ); -- } -- else if ( TagLib::MPC::File *file = dynamic_cast( fileref.file() ) ) -- { -- // This is NOT the correct way to get replay gain tags from MPC files, but -- // taglib doesn't allow us access to the real information. -- // This allows people to work around this issue by copying their replay gain -- // information to the APE tag. -- if ( file->APETag() ) -- map = readAPETags( file->APETag() ); -- } --#ifdef TAGLIB_EXTRAS_FOUND -- else if ( TagLib::ASF::File *file = dynamic_cast( fileref.file() ) ) -- { -- if ( file->tag() ) -- map = readASFTags( file->tag() ); -- } --#endif --// See comment above --#ifdef DO_NOT_USE_THIS_UNTIL_FIXED -- else if ( TagLib::MP4::File *file = dynamic_cast( fileref.file() ) ) -- { -- if ( file->tag() ) -- map = readMP4Tags( file->getMP4Tag() ); -- } --#endif -- return map; --} -- -diff --git a/utilities/collectionscanner/MetaReplayGain.h b/utilities/collectionscanner/MetaReplayGain.h -deleted file mode 100644 -index eba860a..0000000 ---- a/utilities/collectionscanner/MetaReplayGain.h -+++ /dev/null -@@ -1,49 +0,0 @@ --/* -- Copyright (C) 2009 Alex Merry -- -- This program 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 2 -- of the License, or (at your option) any later version. -- -- This program 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 this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA --*/ -- --#ifndef AMAROK_METAREPLAYGAIN_H --#define AMAROK_METAREPLAYGAIN_H -- --#include -- --// Taglib --#include -- --/* This file exists (rather than putting the method in MetaUtility.h and -- * MetaUtility.cpp) because we need to share the implementation between -- * amaroklib and amarokcollectionscanner (which doesn't link to amaroklib). -- */ --namespace Meta --{ -- enum ReplayGainTag -- { -- ReplayGain_Track_Gain, -- ReplayGain_Track_Peak, -- ReplayGain_Album_Gain, -- ReplayGain_Album_Peak -- }; -- -- typedef QMap ReplayGainTagMap; -- -- /** -- * Reads the replay gain tags from a taglib file. -- */ -- ReplayGainTagMap readReplayGainTags( TagLib::FileRef fileref ); --} -- --#endif // AMAROK_METAREPLAYGAIN_H diff --git a/amarok.spec b/amarok.spec index 716e134..aeee3e3 100644 --- a/amarok.spec +++ b/amarok.spec @@ -1,8 +1,8 @@ Name: amarok Summary: Media player -Version: 2.1.85 -Release: 2%{?dist} +Version: 2.1.90 +Release: 1%{?dist} Group: Applications/Multimedia License: GPLv2+ @@ -12,9 +12,6 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Patch50: amarok-2.0.90-qtscript_not_required.patch -## upstream patches -Patch100: amarok-taglib.patch - BuildRequires: curl-devel BuildRequires: desktop-file-utils BuildRequires: gettext @@ -79,8 +76,6 @@ Obsoletes: amarok-utilities < 2.0.96 %patch50 -p1 -b .qtscript_not_required -%patch100 -p1 -b .taglib - %build mkdir -p %{_target_platform} @@ -171,6 +166,9 @@ fi %changelog +* Mon Sep 21 2009 Rex Dieter 2.1.90-1 +- amarok-2.1.90 (2.2rc1) + * Thu Sep 17 2009 Rex Dieter 2.1.85-2 - BR: taglib-devel >= 1.6, taglib-extras-devel >= 1.0 diff --git a/sources b/sources index 7780877..45d43d0 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -38311a55767fb8d85254b248a46433d8 amarok-2.1.85.tar.bz2 +ec727ed72c5d371fb659ce0c3c1e6136 amarok-2.1.90.tar.bz2 From d78c0d93286870013fd3d46cf6260107d0ca643c Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Thu, 24 Sep 2009 01:35:16 +0000 Subject: [PATCH 04/32] - 20090923git snapshot --- amarok.spec | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/amarok.spec b/amarok.spec index aeee3e3..c7ab8ca 100644 --- a/amarok.spec +++ b/amarok.spec @@ -1,17 +1,23 @@ +%define snap 20090923git + Name: amarok Summary: Media player Version: 2.1.90 -Release: 1%{?dist} +Release: 2.%{snap}%{?dist} Group: Applications/Multimedia License: GPLv2+ Url: http://amarok.kde.org/ Source0: http://download.kde.org/unstable/amarok/%{version}/src/amarok-%{version}.tar.bz2 +#Source0: amarok-%{version}-%{snap}.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Patch50: amarok-2.0.90-qtscript_not_required.patch +# mostly a: git diff v2.1.90 +Patch100: post-2.1.90-%{snap}.patch + BuildRequires: curl-devel BuildRequires: desktop-file-utils BuildRequires: gettext @@ -72,9 +78,10 @@ Obsoletes: amarok-utilities < 2.0.96 %prep -%setup -q +%setup -q %patch50 -p1 -b .qtscript_not_required +%patch100 -p1 -b .20090923git %build @@ -91,10 +98,10 @@ rm -rf %{buildroot} make install DESTDIR=%{buildroot} -C %{_target_platform} -%find_lang amarok -%find_lang amarokcollectionscanner_qt -%find_lang amarokpkg -%find_lang amarok_scriptengine_qscript +%find_lang amarok +%find_lang amarokcollectionscanner_qt +%find_lang amarokpkg +%find_lang amarok_scriptengine_qscript cat amarokpkg.lang >> amarok.lang cat amarok_scriptengine_qscript.lang >> amarok.lang @@ -166,6 +173,9 @@ fi %changelog +* Wed Sep 23 2009 Rex Dieter 2.1.90-2.20090923git +- 20090923git snapshot + * Mon Sep 21 2009 Rex Dieter 2.1.90-1 - amarok-2.1.90 (2.2rc1) From 137f734ee51e43a71704cadbe69f68851a028c06 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Thu, 24 Sep 2009 01:36:12 +0000 Subject: [PATCH 05/32] git patch --- post-2.1.90-20090923git.patch | 1340 +++++++++++++++++++++++++++++++++ 1 file changed, 1340 insertions(+) create mode 100644 post-2.1.90-20090923git.patch diff --git a/post-2.1.90-20090923git.patch b/post-2.1.90-20090923git.patch new file mode 100644 index 0000000..f7b144e --- /dev/null +++ b/post-2.1.90-20090923git.patch @@ -0,0 +1,1340 @@ +diff --git a/ChangeLog b/ChangeLog +index 2d97559..6a4e307 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -2,6 +2,20 @@ Amarok ChangeLog + ================ + (C) 2002-2009 the Amarok authors. + ++VERSION 2.2 ++ CHANGES: ++ * More collection scanning speedups. ++ ++ BUGFIXES: ++ * Fix photos applet not working after resuming playback. (BR 206829) ++ * Fix regression where the genre field in the Tag Dialog would show the ++ composer of the track. (BR 208255) ++ * Don't reshuffle the playlist every time the active track changes when ++ * using a random sort order. ++ * Fix the Various Artist node sometimes being shown in the Collection ++ Browser with nothing underneath it (or an empty "Unknown" album). ++ * Fix some tracks' tags not being saved correctly to the database. ++ (BR 202021) + + VERSION 2.2-rc1 + FEATURES: +@@ -23,6 +37,7 @@ VERSION 2.2-rc1 + * Added "Lock layout" option to the main window's context menu. + + BUGFIXES: ++ * Fix wikipedia engine refined search broken. (BR 208024) + * Crash in QTextCodec while scanning collection has been fixed. + Apparently. (BR 191447) + * A dialog with "Can not write playlist (/)" was displayed when using +diff --git a/src/collection/iphoneos/amarok_collection-iphoneoscollection.desktop b/src/collection/iphoneos/amarok_collection-iphoneoscollection.desktop +index 80396ef..373d71c 100644 +--- a/src/collection/iphoneos/amarok_collection-iphoneoscollection.desktop ++++ b/src/collection/iphoneos/amarok_collection-iphoneoscollection.desktop +@@ -17,6 +17,7 @@ Name[nn]=Skriveverna samling for iPhone OS 3.0 + Name[pl]=Kolekcja tylko-do-odczytu iPhone OS 3.0 + Name[pt]=Colecção Apenas para Leitura do iPhone OS 3.0 + Name[pt_BR]=Coleção Somente para Leitura do iPhone OS 3.0 ++Name[ru]=Коллекция iPhone OS 3.0 (только для чтения) + Name[sr]=Збирка И‑фон ОС‑а 3.0 (само за читање) + Name[sr@latin]=Zbirka iPhoneOS‑a 3.0 (samo za čitanje) + Name[sv]=iPhone OS 3.0 skrivskyddad samling +@@ -40,6 +41,7 @@ Comment[nn]=Amarok-samlingstillegg for iPhone OS 3.0 + Comment[pl]=Wtyczka kolekcji tylko-do-odczytu iPhone OS 3.0 dla Amaroka + Comment[pt]=Um 'plugin' da colecção, apenas para leitura, do iPhone OS 3.0 para o Amarok + Comment[pt_BR]=Plugin de coleção somente para Leitura do iPhone OS 3.0, para o Amarok ++Comment[ru]=Модуль коллекция iPhone OS 3.0 (только для чтения) + Comment[sr]=Прикључак збирке на И‑фон ОС‑у 3.0 (само за читање) за Амарок + Comment[sr@latin]=Priključak zbirke na iPhoneOS‑u 3.0 (samo za čitanje) za Amarok + Comment[sv]=Insticksprogram med iPhone OS 3.0 skrivskyddad samling för Amarok +diff --git a/src/collection/ipodcollection/amarok_collection-ipodcollection.desktop b/src/collection/ipodcollection/amarok_collection-ipodcollection.desktop +index 4fda617..48c640a 100644 +--- a/src/collection/ipodcollection/amarok_collection-ipodcollection.desktop ++++ b/src/collection/ipodcollection/amarok_collection-ipodcollection.desktop +@@ -36,7 +36,7 @@ Name[pl]=Kolekcja iPod + Name[pt]=Colecção do IPod + Name[pt_BR]=Coleção iPod + Name[ro]=Colecție Ipod +-Name[ru]=Коллекция Ipod ++Name[ru]=Коллекция iPod + Name[sl]=Zbirka iPod + Name[sr]=Збирка и‑пода + Name[sr@latin]=Zbirka iPoda +@@ -84,7 +84,7 @@ Comment[pl]=Wtyczka kolekcji iPoda dla Amaroka + Comment[pt]=Um 'plugin' da colecção do IPod para o Amarok + Comment[pt_BR]=Plug-in de coleção iPod para o Amarok + Comment[ro]=Modul de colecție Ipod pentru Amarok +-Comment[ru]=Модуль коллекции Ipod для Amarok ++Comment[ru]=Модуль коллекции iPod для Amarok + Comment[sl]=Vstavek za zbirko iPod za Amarok + Comment[sr]=Прикључак збирке на и‑поду за Амарок + Comment[sr@latin]=Priključak zbirke na iPodu za Amarok +diff --git a/src/collection/mysqlecollection/amarok_collection-mysqlecollection.desktop b/src/collection/mysqlecollection/amarok_collection-mysqlecollection.desktop +index c3ae12d..1decebb 100644 +--- a/src/collection/mysqlecollection/amarok_collection-mysqlecollection.desktop ++++ b/src/collection/mysqlecollection/amarok_collection-mysqlecollection.desktop +@@ -18,6 +18,7 @@ Name[nn]=MySQLe-samling + Name[pl]=Kolekcja MySQLe + Name[pt]=Colecção de MySQLe + Name[pt_BR]=Coleção MySQLe ++Name[ru]=Коллекция MySQLe + Name[sr]=Збирка на МајСКуЛe‑у + Name[sr@latin]=Zbirka na MySQLe‑u + Name[sv]=MySQL-samling +diff --git a/src/collection/mysqlservercollection/amarok_collection-mysqlservercollection.desktop b/src/collection/mysqlservercollection/amarok_collection-mysqlservercollection.desktop +index 3957d65..d2726d2 100644 +--- a/src/collection/mysqlservercollection/amarok_collection-mysqlservercollection.desktop ++++ b/src/collection/mysqlservercollection/amarok_collection-mysqlservercollection.desktop +@@ -18,6 +18,7 @@ Name[nn]=MySQLServer-samling + Name[pl]=Kolekcja MySQLServer + Name[pt]=Colecção de MySQL (Servidor) + Name[pt_BR]=Coleção MySQLServer ++Name[ru]=Коллекция MySQLServer + Name[sr]=Збирка на серверу МајСКуЛ‑а + Name[sr@latin]=Zbirka na serveru MySQL‑a + Name[sv]=MySQLServer-samling +diff --git a/src/collection/sqlcollection/ScanResultProcessor.cpp b/src/collection/sqlcollection/ScanResultProcessor.cpp +index dcc45f8..c9694f4 100644 +--- a/src/collection/sqlcollection/ScanResultProcessor.cpp ++++ b/src/collection/sqlcollection/ScanResultProcessor.cpp +@@ -114,7 +114,7 @@ ScanResultProcessor::doneWithImages() + if( key.first.isEmpty() || key.second.isEmpty() ) + continue; + +- int artist = artistId( key.first ); ++ int artist = genericId( "artists", key.first ); + int album = albumId( key.second, artist ); + + // Will automatically add the image path to the database if needed +@@ -261,7 +261,7 @@ ScanResultProcessor::processDirectory( const QList &data ) + { + foreach( const QVariantMap &row, data ) + { +- int artist = artistId( row.value( Field::ARTIST ).toString() ); ++ int artist = genericId( "artists", row.value( Field::ARTIST ).toString() ); + addTrack( row, artist ); + } + } +@@ -269,7 +269,7 @@ ScanResultProcessor::processDirectory( const QList &data ) + { + QString albumArtist = findAlbumArtist( artists, data.count() ); + //an empty string means that no albumartist was found +- int artist = albumArtist.isEmpty() ? 0 : artistId( albumArtist ); ++ int artist = albumArtist.isEmpty() ? 0 : genericId( "artists", albumArtist ); + + debug() << "albumartist " << albumArtist << "for artists" << artists; + foreach( const QVariantMap &row, data ) +@@ -383,37 +383,23 @@ ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) + } + + if( dir.count() == 1 ) +- { + compilationId = checkExistingAlbums( albumName ); +- } + +- if( 0 == compilationId ) +- { +- album = albumId( albumName, albumArtistId ); +- } ++ //run a single query to fetch these at once, to save time ++ //then values will be cached in local maps, so can use the same calls below ++ databaseIdFetch( trackData.value( Field::ARTIST ).toString(), ++ trackData.value( Field::GENRE ).toString(), ++ trackData.value( Field::COMPOSER ).toString(), ++ trackData.value( Field::YEAR ).toString(), ++ albumName, albumArtistId, compilationId ); + +- bool needToQuery = false; +- if( !m_artists.contains( trackData.value( Field::ARTIST ).toString() ) || +- !m_genre.contains( trackData.value( Field::GENRE ).toString() ) || +- !m_composer.contains( trackData.value( Field::COMPOSER ).toString() ) || +- !m_year.contains( trackData.value( Field::YEAR ).toString() ) ) +- needToQuery = true; ++ int artist = genericId( "artists", trackData.value( Field::ARTIST ).toString() ); ++ int genre = genericId( "genres", trackData.value( Field::GENRE ).toString() ); ++ int composer = genericId( "composers", trackData.value( Field::COMPOSER ).toString() ); ++ int year = genericId( "years", trackData.value( Field::YEAR ).toString() ); + +- if( needToQuery ) +- { +- //run a single query to fetch these at once, to save time +- //then values will be cached in local maps, so can use the same calls below +- databaseIdFetch( trackData.value( Field::ARTIST ).toString(), +- trackData.value( Field::GENRE ).toString(), +- trackData.value( Field::COMPOSER ).toString(), +- trackData.value( Field::YEAR ).toString(), +- albumName, albumArtistId ); +- } +- +- int artist = artistId( trackData.value( Field::ARTIST ).toString() ); +- int genre = genreId( trackData.value( Field::GENRE ).toString() ); +- int composer = composerId( trackData.value( Field::COMPOSER ).toString() ); +- int year = yearId( trackData.value( Field::YEAR ).toString() ); ++ if( !compilationId ) ++ album = albumId( albumName, albumArtistId ); + + QString uid = trackData.value( Field::UNIQUEID ).toString(); + +@@ -473,131 +459,86 @@ ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) + } + + int +-ScanResultProcessor::artistId( const QString &artist ) ++ScanResultProcessor::genericId( const QString &key, const QString &value ) + { +- if( m_artists.contains( artist ) ) +- return m_artists.value( artist ); +- QString query = QString( "SELECT id FROM artists_temp WHERE name = '%1';" ).arg( m_collection->escape( artist ) ); +- QStringList res = m_collection->query( query ); +- int id = 0; +- if( res.isEmpty() ) +- id = artistInsert( artist ); ++ QMap *currMap; ++ if( key == "artists" ) ++ currMap = &m_artists; ++ else if( key == "genres" ) ++ currMap = &m_genres; ++ else if( key == "years" ) ++ currMap = &m_years; ++ else if( key == "composers" ) ++ currMap = &m_composers; + else +- id = res[0].toInt(); +- m_artists.insert( artist, id ); +- return id; +-} +- +-int +-ScanResultProcessor::artistInsert( const QString &artist ) +-{ +- QString insert = QString( "INSERT INTO artists_temp( name ) VALUES ('%1');" ).arg( m_collection->escape( artist ) ); +- int id = m_collection->insert( insert, "artists_temp" ); +- return id; +-} +- +-int +-ScanResultProcessor::genreId( const QString &genre ) +-{ +- if( m_genre.contains( genre ) ) +- return m_genre.value( genre ); +- QString query = QString( "SELECT id FROM genres_temp WHERE name = '%1';" ).arg( m_collection->escape( genre ) ); +- QStringList res = m_collection->query( query ); +- int id = 0; +- if( res.isEmpty() ) +- id = genreInsert( genre ); +- else +- id = res[0].toInt(); +- m_genre.insert( genre, id ); +- return id; +-} +- +-int +-ScanResultProcessor::genreInsert( const QString &genre ) +-{ +- QString insert = QString( "INSERT INTO genres_temp( name ) VALUES ('%1');" ).arg( m_collection->escape( genre ) ); +- int id = m_collection->insert( insert, "genres_temp" ); +- return id; +-} +- +-int +-ScanResultProcessor::composerId( const QString &composer ) +-{ +- if( m_composer.contains( composer ) ) +- return m_composer.value( composer ); +- QString query = QString( "SELECT id FROM composers_temp WHERE name = '%1';" ).arg( m_collection->escape( composer ) ); +- QStringList res = m_collection->query( query ); +- int id = 0; +- if( res.isEmpty() ) +- id = composerInsert( composer ); +- else +- id = res[0].toInt(); +- m_composer.insert( composer, id ); +- return id; +-} ++ { ++ debug() << "Holy hell Batman, what just happened in genericId?"; ++ return -9999; ++ } + +-int +-ScanResultProcessor::composerInsert( const QString &composer ) +-{ +- QString insert = QString( "INSERT INTO composers_temp( name ) VALUES ('%1');" ).arg( m_collection->escape( composer ) ); +- int id = m_collection->insert( insert, "composers_temp" ); +- return id; +-} ++ if( currMap->contains( value ) ) ++ return currMap->value( value ); + +-int +-ScanResultProcessor::yearId( const QString &year ) +-{ +- if( m_year.contains( year ) ) +- return m_year.value( year ); +- QString query = QString( "SELECT id FROM years_temp WHERE name = '%1';" ).arg( m_collection->escape( year ) ); ++ QString query = QString( "SELECT id FROM %1_temp WHERE name = '%2';" ).arg( key, m_collection->escape( value ) ); + QStringList res = m_collection->query( query ); + int id = 0; + if( res.isEmpty() ) +- id = yearInsert( year ); ++ id = genericInsert( key, value ); + else + id = res[0].toInt(); +- m_year.insert( year, id ); ++ currMap->insert( value, id ); + return id; + } + + int +-ScanResultProcessor::yearInsert( const QString &year ) ++ScanResultProcessor::genericInsert( const QString &key, const QString &value ) + { +- QString insert = QString( "INSERT INTO years_temp( name ) VALUES ('%1');" ).arg( m_collection->escape( year ) ); +- int id = m_collection->insert( insert, "years_temp" ); ++ QString insert = QString( "INSERT INTO %1_temp( name ) VALUES ('%2');" ).arg( key, m_collection->escape( value ) ); ++ int id = m_collection->insert( insert, QString( "%1_temp" ).arg( key ) ); + return id; + } + + void +-ScanResultProcessor::databaseIdFetch( const QString &artist, const QString &genre, const QString &composer, const QString &year, const QString &album, int albumArtistId ) ++ScanResultProcessor::databaseIdFetch( const QString &artist, const QString &genre, const QString &composer, const QString &year, const QString &album, int albumArtistId, int compilationId ) + { + //DEBUG_BLOCK +- Q_UNUSED( album ); +- Q_UNUSED( albumArtistId ); ++ QPair albumKey( album, albumArtistId ); ++ bool albumFound = compilationId || m_albums.contains( albumKey ); ++ bool artistFound = m_artists.contains( artist ); ++ bool genreFound = m_genres.contains( genre ); ++ bool composerFound = m_composers.contains( composer ); ++ bool yearFound = m_years.contains( year ); ++ ++ if( albumFound && artistFound && genreFound && composerFound && yearFound ) ++ return; //nothing to do ++ + int l = 0; //album +- bool albumFound = false; + int a = 0; //artist +- bool artistFound = false; + int g = 0; //genre +- bool genreFound = false; + int c = 0; //composer +- bool composerFound = false; + int y = 0; //year +- bool yearFound = false; + + QString query; +-/* +- if( albumArtistId == 0 ) +- query += QString( "SELECT id, CONCAT('ALBUMNAME_', name) AS name FROM albums_temp WHERE artist IS NULL AND name = '%1' " ) +- .arg( m_collection->escape( album ) ); +- else +- query += QString( "SELECT id, CONCAT('ALBUMNAME_', name) AS name FROM albums_temp WHERE artist = %1 AND name = '%2' " ) +- .arg( QString::number( albumArtistId ), m_collection->escape( album ) ); +-*/ +- query += QString( "SELECT id, CONCAT('ARTISTNAME_', name) AS name FROM artists_temp WHERE name = '%1' " ).arg( m_collection->escape( artist ) ); +- query += QString( "UNION ALL SELECT id, CONCAT('GENRENAME_', name) AS name FROM genres_temp WHERE name = '%1' " ).arg( m_collection->escape( genre ) ); +- query += QString( "UNION ALL SELECT id, CONCAT('COMPOSERNAME_', name) AS name FROM composers_temp WHERE name = '%1' " ).arg( m_collection->escape( composer ) ); +- query += QString( "UNION ALL SELECT id, CONCAT('YEARSNAME_', name) AS name FROM years_temp WHERE name = '%1';" ).arg( m_collection->escape( year ) ); ++ if( !albumFound ) ++ { ++ if( albumArtistId == 0 ) ++ query += QString( "SELECT id, CONCAT('ALBUMNAME_', name) AS name FROM albums_temp WHERE artist IS NULL AND name = '%1' " ) ++ .arg( m_collection->escape( album ) ); ++ else ++ query += QString( "SELECT id, CONCAT('ALBUMNAME_', name) AS name FROM albums_temp WHERE artist = %1 AND name = '%2' " ) ++ .arg( QString::number( albumArtistId ), m_collection->escape( album ) ); ++ } ++ if( !artistFound ) ++ query += QString( "UNION ALL SELECT id, CONCAT('ARTISTNAME_', name) AS name FROM artists_temp WHERE name = '%1' " ).arg( m_collection->escape( artist ) ); ++ if( !genreFound ) ++ query += QString( "UNION ALL SELECT id, CONCAT('GENRENAME_', name) AS name FROM genres_temp WHERE name = '%1' " ).arg( m_collection->escape( genre ) ); ++ if( !composerFound ) ++ query += QString( "UNION ALL SELECT id, CONCAT('COMPOSERNAME_', name) AS name FROM composers_temp WHERE name = '%1' " ).arg( m_collection->escape( composer ) ); ++ if( !yearFound ) ++ query += QString( "UNION ALL SELECT id, CONCAT('YEARSNAME_', name) AS name FROM years_temp WHERE name = '%1';" ).arg( m_collection->escape( year ) ); ++ if( query.startsWith( "UNION ALL " ) ) ++ query.remove( 0, 10 ); ++ + QStringList res = m_collection->query( query ); + int index = 0; + QString first; +@@ -607,58 +548,55 @@ ScanResultProcessor::databaseIdFetch( const QString &artist, const QString &genr + first = res.at( index++ ); + second = res.at( index++ ); + a = first.toInt(); +- if( second == QString( "ALBUMNAME_" + album ) ) ++ if( !albumFound && second == QString( "ALBUMNAME_" + album ) ) + { + l = first.toInt(); + albumFound = true; + } +- else if( second == QString( "ARTISTNAME_" + artist ) ) ++ else if( !artistFound && second == QString( "ARTISTNAME_" + artist ) ) + { + a = first.toInt(); + artistFound = true; + } +- else if( second == QString( "GENRENAME_" + genre ) ) ++ else if( !genreFound && second == QString( "GENRENAME_" + genre ) ) + { + g = first.toInt(); + genreFound = true; + } +- else if( second == QString( "COMPOSERNAME_" + composer ) ) ++ else if( !composerFound && second == QString( "COMPOSERNAME_" + composer ) ) + { + c = first.toInt(); + composerFound = true; + } +- else if( second == QString( "YEARSNAME_" + year ) ) ++ else if( !yearFound && second == QString( "YEARSNAME_" + year ) ) + { + y = first.toInt(); + yearFound = true; + } + } +- /* + if( !albumFound ) + { +- QPair key( album, albumArtistId ); +- m_albums.insert( key, albumInsert( album, albumArtistId ) ); ++ m_albums.insert( albumKey, albumInsert( album, albumArtistId ) ); + albumFound = true; + } +- */ + if( !artistFound ) + { +- m_artists.insert( artist, artistInsert( artist ) ); ++ m_artists.insert( artist, genericInsert( "artists", artist ) ); + artistFound = true; + } + if( !genreFound ) + { +- m_genre.insert( genre, genreInsert( genre ) ); ++ m_genres.insert( genre, genericInsert( "genres", genre ) ); + genreFound = true; + } + if( !composerFound ) + { +- m_composer.insert( composer, composerInsert( composer ) ); ++ m_composers.insert( composer, genericInsert( "composers", composer ) ); + composerFound = true; + } + if( !yearFound ) + { +- m_year.insert( year, yearInsert( year ) ); ++ m_years.insert( year, genericInsert( "years", year ) ); + yearFound = true; + } + } +diff --git a/src/collection/sqlcollection/ScanResultProcessor.h b/src/collection/sqlcollection/ScanResultProcessor.h +index fffc9e7..49c2b8b 100644 +--- a/src/collection/sqlcollection/ScanResultProcessor.h ++++ b/src/collection/sqlcollection/ScanResultProcessor.h +@@ -58,15 +58,9 @@ class ScanResultProcessor : public QObject + private: + void addTrack( const QVariantMap &trackData, int albumArtistId ); + +- int artistId( const QString &artist ); +- int artistInsert( const QString &artist ); +- int genreId( const QString &genre ); +- int genreInsert( const QString &genre ); +- int composerId( const QString &composer ); +- int composerInsert( const QString &composer ); +- int yearId( const QString &year ); +- int yearInsert( const QString &year ); +- void databaseIdFetch( const QString &artist, const QString &genre, const QString &composer, const QString &year, const QString &album, int albumArtistId ); ++ int genericId( const QString &key, const QString &value ); ++ int genericInsert( const QString &key, const QString &value ); ++ void databaseIdFetch( const QString &artist, const QString &genre, const QString &composer, const QString &year, const QString &album, int albumArtistId, int compilationId ); + int imageId( const QString &image, int albumId ); + int albumId( const QString &album, int artistId ); + int albumInsert( const QString &album, int artistId ); +@@ -90,9 +84,9 @@ class ScanResultProcessor : public QObject + bool m_setupComplete; + + QMap m_artists; +- QMap m_genre; +- QMap m_year; +- QMap m_composer; ++ QMap m_genres; ++ QMap m_years; ++ QMap m_composers; + QMap, int> m_albums; + QMap, int> m_images; + QMap m_directories; +diff --git a/src/collection/sqlcollection/SqlQueryMaker.cpp b/src/collection/sqlcollection/SqlQueryMaker.cpp +index a6f98fb..10cc629 100644 +--- a/src/collection/sqlcollection/SqlQueryMaker.cpp ++++ b/src/collection/sqlcollection/SqlQueryMaker.cpp +@@ -992,6 +992,7 @@ SqlQueryMaker::handleArtists( const QStringList &result ) + void + SqlQueryMaker::handleAlbums( const QStringList &result ) + { ++ DEBUG_BLOCK + AlbumList albums; + SqlRegistry* reg = m_collection->registry(); + for( QStringListIterator iter( result ); iter.hasNext(); ) +@@ -999,6 +1000,10 @@ SqlQueryMaker::handleAlbums( const QStringList &result ) + QString name = iter.next(); + QString id = iter.next(); + QString artist = iter.next(); ++ //HACK: The following is a HACK and should be fixed by fixing the HACK ++ //of always including the "tracks" table in queries in SqlQueryMaker ++ if( name.isEmpty() && id.isEmpty() && artist.isEmpty() ) ++ continue; + albums.append( reg->getAlbum( name, id.toInt(), artist.toInt() ) ); + } + emitOrStoreProperResult( AlbumPtr, albums ); +diff --git a/src/collection/umscollection/amarok_collection-umscollection.desktop b/src/collection/umscollection/amarok_collection-umscollection.desktop +index 0124c1b..1b016e0 100644 +--- a/src/collection/umscollection/amarok_collection-umscollection.desktop ++++ b/src/collection/umscollection/amarok_collection-umscollection.desktop +@@ -15,6 +15,7 @@ Name[nn]=Universell masselagringssamling + Name[pl]=Kolekcja na urządzeniu danych + Name[pt]=Colecção de Armazenamento em Massa Universal + Name[pt_BR]=Coleção de Armazenamento Universal em Massa ++Name[ru]=Коллекция UMS + Name[sr]=Збирка на универзалном масовном складишту + Name[sr@latin]=Zbirka na univerzalnom masovnom skladištu + Name[sv]=Samling på generell lagringsenhet +diff --git a/src/context/Applet.cpp b/src/context/Applet.cpp +index 38bc709..ab2c0ac 100644 +--- a/src/context/Applet.cpp ++++ b/src/context/Applet.cpp +@@ -39,7 +39,8 @@ namespace Context + Context::Applet::Applet( QObject * parent, const QVariantList& args ) + : Plasma::Applet( parent, args ) + , m_collapsed( false ) +- , m_animationId( 0 ) ++ , m_animationIdOn( 0 ) ++ , m_animationIdOff( 0 ) + , m_transient( 0 ) + , m_standardPadding( 6.0 ) + , m_textBackground( 0 ) +@@ -50,8 +51,10 @@ Context::Applet::Applet( QObject * parent, const QVariantList& args ) + + Context::Applet::~Applet( ) + { +- if ( m_animationId != 0) +- Plasma::Animator::self()->stopCustomAnimation( m_animationId ); ++ if ( m_animationIdOn != 0 ) ++ Plasma::Animator::self()->stopCustomAnimation( m_animationIdOn ); ++ if ( m_animationIdOff != 0 ) ++ Plasma::Animator::self()->stopCustomAnimation( m_animationIdOff ); + } + + +@@ -228,39 +231,51 @@ Context::Applet::addAction( QAction *action, const int size ) + void + Context::Applet::setCollapseOn() + { ++ // We are asked to collapse, but the applet is already animating to collapse, do nothing ++ if ( m_animationIdOn != 0 ) ++ return; ++ ++ // We are already collapsed + if ( size().height() == m_heightCollapseOn ) + return; ++ + debug() << "collapsing applet to..." << m_heightCollapseOn; + if( m_heightCollapseOff == -1 ) + m_animFromHeight = size().height(); + else + m_animFromHeight = m_heightCollapseOff; + +- if ( m_animationId != 0 ) // warning we are moving right now ++ if ( m_animationIdOff != 0 ) // warning we are extanding right now we should stop + { + // stop the anim +- Plasma::Animator::self()->stopCustomAnimation( m_animationId ); +- m_animationId = 0; ++ Plasma::Animator::self()->stopCustomAnimation( m_animationIdOff ); ++ m_animationIdOff = 0; + } + m_collapsed = false; +- m_animationId = Plasma::Animator::self()->customAnimation(20, 1000, Plasma::Animator::EaseInCurve, this, "animateOn" ); ++ m_animationIdOn = Plasma::Animator::self()->customAnimation(20, 1000, Plasma::Animator::EaseInCurve, this, "animateOn" ); + } + + void + Context::Applet::setCollapseOff() + { + DEBUG_BLOCK +- debug() << "height:" << size().height() << "target:" << m_heightCollapseOff << "m_collapsed:" << m_collapsed; ++ ++ // We are asked to extend, but the applet is already animating to extend, do nothing ++ if ( m_animationIdOff != 0 ) ++ return; ++ ++ // Applet already extended + if ( size().height() == m_heightCollapseOff ) + return; + ++ debug() << "height:" << size().height() << "target:" << m_heightCollapseOff << "m_collapsed:" << m_collapsed; + if( m_heightCollapseOff == -1) // if it's self-expanding, don't animate as we don't know where we're going. also, if we're shrinking + { // stop that and expand regardless +- // stop the anim +- if( m_animationId != 0 ) ++ // stop the animation on now ++ if( m_animationIdOn != 0 ) + { +- Plasma::Animator::self()->stopCustomAnimation( m_animationId ); +- m_animationId = 0; ++ Plasma::Animator::self()->stopCustomAnimation( m_animationIdOn ); ++ m_animationIdOn = 0; + } + m_heightCurrent = m_heightCollapseOff; + emit sizeHintChanged(Qt::PreferredSize); +@@ -269,14 +284,14 @@ Context::Applet::setCollapseOff() + return; + } + +- if ( m_animationId != 0 ) // warning we are moving right now ++ if ( m_animationIdOn != 0 ) // warning we are collapsing right now, stop that and reverse it ! + { + // stop the anim +- Plasma::Animator::self()->stopCustomAnimation( m_animationId ); +- m_animationId = 0; ++ Plasma::Animator::self()->stopCustomAnimation( m_animationIdOn ); ++ m_animationIdOn = 0; + } + m_collapsed = true ; +- m_animationId = Plasma::Animator::self()->customAnimation(20, 1000, Plasma::Animator::EaseInCurve, this, "animateOff" ); ++ m_animationIdOff = Plasma::Animator::self()->customAnimation(20, 1000, Plasma::Animator::EaseInCurve, this, "animateOff" ); + } + + void +@@ -285,6 +300,19 @@ Context::Applet::setCollapseHeight( int h ) + m_heightCollapseOn = h; + } + ++bool ++Context::Applet::isAppletCollapsed() ++{ ++ return ( m_heightCollapseOn == m_heightCurrent ); ++} ++ ++bool ++Context::Applet::isAppletExtended() ++{ ++ return ( m_heightCollapseOff == m_heightCurrent ); ++} ++ ++ + void + Context::Applet::animateOn( qreal anim ) + { +@@ -302,22 +330,20 @@ Context::Applet::animateOff( qreal anim ) + void + Context::Applet::animateEnd( int id ) + { +- if( id == m_animationId ) ++ if( id == m_animationIdOn ) + { +- if( !m_collapsed ) +- { +- Plasma::Applet::resize( size().width(), m_heightCollapseOn ); +- m_collapsed = true; +- } +- else +- { +- Plasma::Applet::resize( size().width(), m_heightCollapseOff ); +- m_collapsed = false; +- } +- updateGeometry(); +- emit sizeHintChanged(Qt::PreferredSize); +- m_animationId = 0; ++ Plasma::Applet::resize( size().width(), m_heightCollapseOn ); ++ m_collapsed = true; ++ m_animationIdOn = 0; ++ } ++ if ( id == m_animationIdOff ) ++ { ++ Plasma::Applet::resize( size().width(), m_heightCollapseOff ); ++ m_collapsed = false; ++ m_animationIdOff = 0; + } ++ updateGeometry(); ++ emit sizeHintChanged(Qt::PreferredSize); + } + + +diff --git a/src/context/Applet.h b/src/context/Applet.h +index 7811624..9f86158 100644 +--- a/src/context/Applet.h ++++ b/src/context/Applet.h +@@ -62,6 +62,9 @@ class AMAROK_EXPORT Applet : public Plasma::Applet + void setCollapseOff(); + void setCollapseHeight( int ); + ++ bool isAppletCollapsed(); ++ bool isAppletExtended(); ++ + /** + * sizeHint is reimplemented here only for all the applet. + */ +@@ -86,7 +89,8 @@ class AMAROK_EXPORT Applet : public Plasma::Applet + int m_heightCurrent; + int m_heightCollapseOn; + int m_heightCollapseOff; +- int m_animationId; ++ int m_animationIdOn; ++ int m_animationIdOff; + int m_animFromHeight; + + private: +diff --git a/src/context/applets/info/amarok-context-applet-info.desktop b/src/context/applets/info/amarok-context-applet-info.desktop +index 7c61815..81f2e1d 100644 +--- a/src/context/applets/info/amarok-context-applet-info.desktop ++++ b/src/context/applets/info/amarok-context-applet-info.desktop +@@ -16,6 +16,7 @@ Name[nn]=Info + Name[pl]=Informacja + Name[pt]=Informação + Name[pt_BR]=Informação ++Name[ru]=Сведения + Name[sr]=Подаци + Name[sr@latin]=Podaci + Name[sv]=Information +diff --git a/src/context/applets/photos/PhotosApplet.cpp b/src/context/applets/photos/PhotosApplet.cpp +index 4cc4714..884a7f3 100644 +--- a/src/context/applets/photos/PhotosApplet.cpp ++++ b/src/context/applets/photos/PhotosApplet.cpp +@@ -116,7 +116,7 @@ PhotosApplet::~PhotosApplet() + void + PhotosApplet::engineNewTrackPlaying( ) + { +- // DEBUG_BLOCK ++ DEBUG_BLOCK + m_stoppedstate = false; + dataEngine( "amarok-photos" )->query( QString( "photos" ) ); + } +@@ -124,13 +124,14 @@ PhotosApplet::engineNewTrackPlaying( ) + void + PhotosApplet::enginePlaybackEnded( int, int, PlaybackEndedReason ) + { +-// DEBUG_BLOCK ++ DEBUG_BLOCK + m_stoppedstate = true;; + m_headerText->setText( i18n( "Photos" ) + QString( " : " ) + i18n( "No track playing" ) ); + m_widget->clear(); + m_widget->hide(); + setBusy( false ); + setCollapseOn(); ++ dataEngine( "amarok-photos" )->query( QString( "photos:stopped" ) ); + } + + void +@@ -215,14 +216,22 @@ PhotosApplet::dataUpdated( const QString& name, const Plasma::DataEngine::Data& + } + else if ( data.contains( "data" ) ) + { +- m_headerText->setText( i18n( "Photos" ) + QString( " : " ) + data[ "artist" ].toString() ); +- updateConstraints(); +- update(); +- setCollapseOff(); +- // Send the data to the scrolling widget +- m_widget->setPixmapList( data[ "data" ].value< QList < PhotosInfo * > >() ); +- m_widget->show(); +- setBusy(false); ++ // Do not show some picture if we're still animating as it can lead to trouble ++ // let's hope animating time will be shorter than fetching time of all the picture :/ ++ // this also prevent the stupid effect of reanimating several time. ++ if ( isAppletExtended() ) ++ { ++ m_headerText->setText( i18n( "Photos" ) + QString( " : " ) + data[ "artist" ].toString() ); ++ updateConstraints(); ++ update(); ++ setCollapseOff(); ++ // Send the data to the scrolling widget ++ m_widget->setPixmapList( data[ "data" ].value< QList < PhotosInfo * > >() ); ++ m_widget->show(); ++ setBusy(false); ++ } ++ else ++ return; + } + updateConstraints(); + update(); +diff --git a/src/context/applets/photos/PhotosScrollWidget.cpp b/src/context/applets/photos/PhotosScrollWidget.cpp +index 71d3d28..31c71ad 100644 +--- a/src/context/applets/photos/PhotosScrollWidget.cpp ++++ b/src/context/applets/photos/PhotosScrollWidget.cpp +@@ -112,90 +112,94 @@ void PhotosScrollWidget::setPixmapList (QList < PhotosInfo * > list) + if ( list == m_currentlist ) + return; + +- debug() << "adding " << list.count() << "new pics"; ++ // debug() << "adding " << list.count() << "new pics"; + // If a new one arrived, we change. + foreach( PhotosInfo *item, list ) + { + if ( !m_currentlist.contains( item ) ) + { +- switch ( m_mode ) ++ if ( !item->photo->isNull() ) + { +- case PHOTOS_MODE_INTERACTIVE : ++ switch ( m_mode ) + { +- +- if ( !m_id ) // careful we're animating ++ case PHOTOS_MODE_INTERACTIVE : + { +- Plasma::Animator::self()->stopCustomAnimation( m_id ); +- m_id = 0; +- } +- DragPixmapItem *dragpix = new DragPixmapItem( this ); +- dragpix->setPixmap( The::svgHandler()->addBordersToPixmap( +- item->photo->scaledToHeight( (int) size().height() - 4 * m_margin, Qt::SmoothTransformation ), 5, "", true ) ); +- dragpix->setPos( m_actualpos, 0 ); +- dragpix->SetClickableUrl( item->urlpage ); +- dragpix->show(); + +- m_pixmaplist << dragpix; ++ if ( !m_id ) // careful we're animating ++ { ++ Plasma::Animator::self()->stopCustomAnimation( m_id ); ++ m_id = 0; ++ } + +- int delta = dragpix->boundingRect().width() + m_margin; +- m_scrollmax += delta; +- m_actualpos += delta; ++ DragPixmapItem *dragpix = new DragPixmapItem( this ); ++ dragpix->setPixmap( The::svgHandler()->addBordersToPixmap( ++ item->photo->scaledToHeight( (int) size().height() - 4 * m_margin, Qt::SmoothTransformation ), 5, "", true ) ); ++ dragpix->setPos( m_actualpos, 0 ); ++ dragpix->SetClickableUrl( item->urlpage ); ++ dragpix->show(); + +- break; +- } +- case PHOTOS_MODE_AUTOMATIC : +- { ++ m_pixmaplist << dragpix; + +- DragPixmapItem *dragpix = new DragPixmapItem( this ); +- dragpix->setPixmap( The::svgHandler()->addBordersToPixmap( +- item->photo->scaledToHeight( (int) size().height() - 4 * m_margin, Qt::SmoothTransformation ), 5, "", true ) ); +- dragpix->SetClickableUrl( item->urlpage ); ++ int delta = dragpix->boundingRect().width() + m_margin; ++ m_scrollmax += delta; ++ m_actualpos += delta; + +- if ( m_id == 0 ) // only pos and show if no animation, otherwise it will be set at the end automatically ++ break; ++ } ++ case PHOTOS_MODE_AUTOMATIC : + { +- if ( ! m_pixmaplist.empty() ) +- { +- dragpix->setPos( m_pixmaplist.last()->boundingRect().width() + m_pixmaplist.last()->pos().x() + m_margin , 0 ) ; +- dragpix->show(); +- } +- else ++ ++ DragPixmapItem *dragpix = new DragPixmapItem( this ); ++ dragpix->setPixmap( The::svgHandler()->addBordersToPixmap( ++ item->photo->scaledToHeight( (int) size().height() - 4 * m_margin, Qt::SmoothTransformation ), 5, "", true ) ); ++ dragpix->SetClickableUrl( item->urlpage ); ++ ++ if ( m_id == 0 ) // only pos and show if no animation, otherwise it will be set at the end automatically + { +- m_actualpos = 0; +- dragpix->setPos( m_actualpos, 0 ) ; +- dragpix->show(); ++ if ( ! m_pixmaplist.empty() ) ++ { ++ dragpix->setPos( m_pixmaplist.last()->boundingRect().width() + m_pixmaplist.last()->pos().x() + m_margin , 0 ) ; ++ dragpix->show(); ++ } ++ else ++ { ++ m_actualpos = 0; ++ dragpix->setPos( m_actualpos, 0 ) ; ++ dragpix->show(); ++ } + } +- } + +- m_pixmaplist << dragpix; ++ m_pixmaplist << dragpix; + +- // set a timer after and launch +- QTimer::singleShot( m_interval, this, SLOT( automaticAnimBegin() ) ); ++ // set a timer after and launch ++ QTimer::singleShot( m_interval, this, SLOT( automaticAnimBegin() ) ); + +- break; +- } +- case PHOTOS_MODE_FADING : +- { +- +- DragPixmapItem *dragpix = new DragPixmapItem( this ); +- dragpix->setPixmap( The::svgHandler()->addBordersToPixmap( +- item->photo->scaledToHeight( (int) size().height() - 4 * m_margin, Qt::SmoothTransformation ), 5, "", true ) ); +- dragpix->setPos( ( size().width() - dragpix->boundingRect().width() ) / 2, 0 ); +- dragpix->SetClickableUrl( item->urlpage ); +- dragpix->hide(); +- m_pixmaplist << dragpix; +- if ( m_pixmaplist.size() == 1 ) +- { +- dragpix->show(); +- m_timer->start( m_interval ); ++ break; + } ++ case PHOTOS_MODE_FADING : ++ { + +- break; ++ DragPixmapItem *dragpix = new DragPixmapItem( this ); ++ dragpix->setPixmap( The::svgHandler()->addBordersToPixmap( ++ item->photo->scaledToHeight( (int) size().height() - 4 * m_margin, Qt::SmoothTransformation ), 5, "", true ) ); ++ dragpix->setPos( ( size().width() - dragpix->boundingRect().width() ) / 2, 0 ); ++ dragpix->SetClickableUrl( item->urlpage ); ++ dragpix->hide(); ++ m_pixmaplist << dragpix; ++ if ( m_pixmaplist.size() == 1 ) ++ { ++ dragpix->show(); ++ m_timer->start( m_interval ); ++ } ++ ++ break; ++ } + } + } + } + } + m_currentlist = list; +- debug() << "total count: " << m_pixmaplist.count(); ++ // debug() << "total count: " << m_pixmaplist.count(); + } + + void PhotosScrollWidget::hoverEnterEvent(QGraphicsSceneHoverEvent*) +@@ -266,10 +270,13 @@ void PhotosScrollWidget::resize(qreal wid, qreal hei) + { + foreach (DragPixmapItem *item, m_pixmaplist) + { +- if ( size().height() != hei ) +- item->setPixmap( item->pixmap().scaledToHeight( (int) hei - 4 * m_margin, Qt::SmoothTransformation ) ); +- if ( size().width() != wid ) +- item->setPos( ( wid - item->boundingRect().width() ) / 2, 0 ); ++ if ( !item->pixmap().isNull() ) ++ { ++ if ( size().height() != hei ) ++ item->setPixmap( item->pixmap().scaledToHeight( (int) hei - 4 * m_margin, Qt::SmoothTransformation ) ); ++ if ( size().width() != wid ) ++ item->setPos( ( wid - item->boundingRect().width() ) / 2, 0 ); ++ } + } + break; + } +diff --git a/src/context/applets/photos/amarok-context-applet-photos.desktop b/src/context/applets/photos/amarok-context-applet-photos.desktop +index 2fed337..86662e8 100644 +--- a/src/context/applets/photos/amarok-context-applet-photos.desktop ++++ b/src/context/applets/photos/amarok-context-applet-photos.desktop +@@ -17,6 +17,7 @@ Name[nn]=Bilete + Name[pl]=Zdjęcia + Name[pt]=Fotografias + Name[pt_BR]=Fotos ++Name[ru]=Фотографии + Name[sr]=Фотографије + Name[sr@latin]=Fotografije + Name[sv]=Foton +diff --git a/src/context/engines/current/amarok-data-engine-current.desktop b/src/context/engines/current/amarok-data-engine-current.desktop +index 663153f..45354b9 100644 +--- a/src/context/engines/current/amarok-data-engine-current.desktop ++++ b/src/context/engines/current/amarok-data-engine-current.desktop +@@ -33,7 +33,7 @@ Name[pl]=Moduł danych bieżących informacji + Name[pt]=Motor de Dados da Informação Actual + Name[pt_BR]=Mecanismo de Dados das Informações Atuais + Name[ro]=Motor de date Informație curentă +-Name[ru]=Движок данных для текущих сведений ++Name[ru]=Источник данных для текущих сведений + Name[sl]=Podatkovni pogon za podatke trenutni skladbi + Name[sr]=Датомотор текућих података + Name[sr@latin]=Datomotor tekućih podataka +diff --git a/src/context/engines/info/amarok-data-engine-info.desktop b/src/context/engines/info/amarok-data-engine-info.desktop +index a29040c..de16b6b 100644 +--- a/src/context/engines/info/amarok-data-engine-info.desktop ++++ b/src/context/engines/info/amarok-data-engine-info.desktop +@@ -14,6 +14,7 @@ Name[nn]=Datamotor for informasjon + Name[pl]=Moduł danych informacji + Name[pt]=Motor de Dados da Informação + Name[pt_BR]=Mecanismo de Dados das Informações ++Name[ru]=Источник данных для сведений + Name[sr]=Датомотор података + Name[sr@latin]=Datomotor podataka + Name[sv]=Datagränssnitt för information +diff --git a/src/context/engines/lyrics/amarok-data-engine-lyrics.desktop b/src/context/engines/lyrics/amarok-data-engine-lyrics.desktop +index fcdb189..134176e 100644 +--- a/src/context/engines/lyrics/amarok-data-engine-lyrics.desktop ++++ b/src/context/engines/lyrics/amarok-data-engine-lyrics.desktop +@@ -33,7 +33,7 @@ Name[pl]=Moduł danych tekstów + Name[pt]=Motor de Dados de Letras Musicais + Name[pt_BR]=Mecanismo de Dados das Letras + Name[ro]=Motor de date Versuri +-Name[ru]=Движок данных для текстов песен ++Name[ru]=Источник данных для текстов песен + Name[sl]=Podatkovni pogon za besedila + Name[sr]=Датомотор стихова + Name[sr@latin]=Datomotor stihova +diff --git a/src/context/engines/photos/PhotosEngine.cpp b/src/context/engines/photos/PhotosEngine.cpp +index 7558da8..dfb13af 100644 +--- a/src/context/engines/photos/PhotosEngine.cpp ++++ b/src/context/engines/photos/PhotosEngine.cpp +@@ -65,6 +65,7 @@ PhotosEngine::sources() const + bool + PhotosEngine::sourceRequestEvent( const QString& name ) + { ++ DEBUG_BLOCK + m_requested = true; // someone is asking for data, so we turn ourselves on :) + QStringList tokens = name.split( ':' ); + +@@ -86,7 +87,18 @@ PhotosEngine::sourceRequestEvent( const QString& name ) + m_reload = true; + } + } +- ++ ++ // we've been notified by the applet to be in state stop <3 ++ else if ( tokens.contains( "stopped" ) && tokens.size() > 1 ) ++ { ++ if ( tokens.at( 1 ) == QString( "stopped" ) ) ++ { ++ removeSource( "photos" ); ++ m_reload = true; ++ return false; ++ } ++ } ++ + removeAllData( name ); + setData( name, QVariant() ); + update(); +diff --git a/src/context/engines/photos/amarok-data-engine-photos.desktop b/src/context/engines/photos/amarok-data-engine-photos.desktop +index c0e893f..d11c43c 100644 +--- a/src/context/engines/photos/amarok-data-engine-photos.desktop ++++ b/src/context/engines/photos/amarok-data-engine-photos.desktop +@@ -15,6 +15,7 @@ Name[nn]=Datamotor for bilete + Name[pl]=Moduł danych zdjęć + Name[pt]=Motor de Dados de Fotografias + Name[pt_BR]=Mecanismo de Dados de Fotos ++Name[ru]=Источник данных фотографий + Name[sr]=Датомотор фотографија + Name[sr@latin]=Datomotor fotografija + Name[sv]=Datagränssnitt för foton +diff --git a/src/context/engines/songkick/amarok-data-engine-songkick.desktop b/src/context/engines/songkick/amarok-data-engine-songkick.desktop +index ee1ca93..2213533 100644 +--- a/src/context/engines/songkick/amarok-data-engine-songkick.desktop ++++ b/src/context/engines/songkick/amarok-data-engine-songkick.desktop +@@ -33,7 +33,7 @@ Name[pl]=Moduł danych Songkick + Name[pt]=Motor de Dados do Songkick + Name[pt_BR]=Mecanismo de Dados do Songkick + Name[ro]=Motor de date Songkick +-Name[ru]=Движок данных Songkick ++Name[ru]=Источник данных Songkick + Name[sl]=Podatkovni pogon za Songkick + Name[sr]=Датомотор Сонгкика + Name[sr@latin]=Datomotor Songkicka +diff --git a/src/context/engines/videoclip/amarok-data-engine-videoclip.desktop b/src/context/engines/videoclip/amarok-data-engine-videoclip.desktop +index 9fce5d7..7d3c98b 100644 +--- a/src/context/engines/videoclip/amarok-data-engine-videoclip.desktop ++++ b/src/context/engines/videoclip/amarok-data-engine-videoclip.desktop +@@ -20,7 +20,7 @@ Name[pa]=ਵੀਡਿਓ ਕਲਿੱਪ ਡਾਟਾ ਇੰਜਣ + Name[pl]=Moduł danych klipów wideo + Name[pt]=Motor de Dados de 'Clips' de Vídeo + Name[pt_BR]=Motor de dados de clipe de vídeo +-Name[ru]=Движок данных для видеоклипов ++Name[ru]=Источник данных для видеоклипов + Name[sl]=Podatkovni pogon za video posnetke + Name[sr]=Датомотор видео исечака + Name[sr@latin]=Datomotor video isečaka +diff --git a/src/context/engines/wikipedia/WikipediaEngine.cpp b/src/context/engines/wikipedia/WikipediaEngine.cpp +index 11023cb..13de58d 100644 +--- a/src/context/engines/wikipedia/WikipediaEngine.cpp ++++ b/src/context/engines/wikipedia/WikipediaEngine.cpp +@@ -222,9 +222,11 @@ WikipediaEngine::wikiResult( KJob* job ) + m_wiki = QString::fromUtf8( storedJob->data().data(), storedJob->data().size() ); + + +- // Refined search thing ++ // FIXME: For now we test if we got an article or not with a test on this string "wgArticleId=0" ++ // This is bad + if( m_wiki.contains( "wgArticleId=0" ) ) // The article does not exist + { ++ // Refined search is done here + if ( m_triedRefinedSearch == -1 ) + { + debug() << "We already tried some refined search. Lets end this madness..."; +diff --git a/src/context/engines/wikipedia/amarok-data-engine-wikipedia.desktop b/src/context/engines/wikipedia/amarok-data-engine-wikipedia.desktop +index 4e864eb..a97fc3c 100644 +--- a/src/context/engines/wikipedia/amarok-data-engine-wikipedia.desktop ++++ b/src/context/engines/wikipedia/amarok-data-engine-wikipedia.desktop +@@ -33,7 +33,7 @@ Name[pl]=Moduł danych Wikipedii + Name[pt]=Motor de Dados do Wikipédia + Name[pt_BR]=Mecanismo de Dados da Wikipedia + Name[ro]=Motor de date Wikipedia +-Name[ru]=Движок данных Википедии ++Name[ru]=Источник данных Википедии + Name[sl]=Podatkovni pogon za Wikipedijo + Name[sr]=Датомотор Википедије + Name[sr@latin]=Datomotor Wikipedije +diff --git a/src/context/scriptengine/javascript/amarok-scriptengine-applet-simple-javascript.desktop b/src/context/scriptengine/javascript/amarok-scriptengine-applet-simple-javascript.desktop +index 499c587..d4b50e9 100644 +--- a/src/context/scriptengine/javascript/amarok-scriptengine-applet-simple-javascript.desktop ++++ b/src/context/scriptengine/javascript/amarok-scriptengine-applet-simple-javascript.desktop +@@ -18,6 +18,7 @@ Name[nn]=JavaScript-element for Amarok + Name[pl]=Aplet JavaScriptu Amaroka + Name[pt]='Applet' de JavaScript do Amarok + Name[pt_BR]=Miniaplicativo JavaScript do Amarok ++Name[ru]=Аплет JavaScript для Amarok + Name[sr]=Јаваскриптни аплет за Амарок + Name[sr@latin]=Javascript aplet za Amarok + Name[sv]=Amarok Javascript-miniprogram +@@ -45,6 +46,7 @@ Comment[nn]=Innebygd Amarok-element skriven i JavaScript + Comment[pl]=Natywny applet Amaroka napisany w JavaScripcie + Comment[pt]=Uma 'applet' nativa do Amarok, feita em JavaScript + Comment[pt_BR]=Miniaplicativo nativo do Amarok escrito em JavaScript ++Comment[ru]=Аплет Amarok, написанный на языке JavaScript + Comment[sr]=Самосвојни Амароков аплет написан у јаваскрипту + Comment[sr@latin]=Samosvojni Amarokov aplet napisan u JavaScriptu + Comment[sv]=Eget Amarok miniprogram skrivet i Javascript +diff --git a/src/context/scriptengine/javascript/amarok-scriptengine-runner-javascript.desktop b/src/context/scriptengine/javascript/amarok-scriptengine-runner-javascript.desktop +index aa79d73..5672b8f 100644 +--- a/src/context/scriptengine/javascript/amarok-scriptengine-runner-javascript.desktop ++++ b/src/context/scriptengine/javascript/amarok-scriptengine-runner-javascript.desktop +@@ -17,6 +17,7 @@ Name[nn]=JavaScript-køyrar for Amarok + Name[pl]=JavaScript Runner Amaroka + Name[pt]=Execução de JavaScript do Amarok + Name[pt_BR]=Executor JavaScript do Amarok ++Name[ru]=Модуль запуска JavaScript для Amarok + Name[sr]=Амароков извођач јаваскрипта + Name[sr@latin]=Amarokov izvođač JavaScripta + Name[sv]=Amarok Javascript-körprogram +diff --git a/src/context/servicetypes/amarok_data_engine.desktop b/src/context/servicetypes/amarok_data_engine.desktop +index 6e42b2b..fac1d1f 100644 +--- a/src/context/servicetypes/amarok_data_engine.desktop ++++ b/src/context/servicetypes/amarok_data_engine.desktop +@@ -33,7 +33,7 @@ Name[pl]=Moduł danych Amaroka + Name[pt]=Motor de Dados do Amarok + Name[pt_BR]=Motor de Dados do Amarok + Name[ro]=Motor de date Amarok +-Name[ru]=Движок данных Amarok ++Name[ru]=Источник данных Amarok + Name[sl]=Podatkovni pogon za Amarok + Name[sr]=Датомотор Амарока + Name[sr@latin]=Datomotor Amaroka +@@ -83,7 +83,7 @@ Comment[pl]=Moduł danych Amaroka + Comment[pt]=Motor de Dados do Amarok + Comment[pt_BR]=Mecanismo de Dados do Amarok + Comment[ro]=Motor de date Amarok +-Comment[ru]=Движок данных Amarok ++Comment[ru]=Источник данных Amarok + Comment[sl]=Podatkovni pogon za Amarok + Comment[sr]=Датомотор Амарока + Comment[sr@latin]=Datomotor Amaroka +diff --git a/src/dialogs/TagDialog.cpp b/src/dialogs/TagDialog.cpp +index 58f2ef4..08df868 100644 +--- a/src/dialogs/TagDialog.cpp ++++ b/src/dialogs/TagDialog.cpp +@@ -888,7 +888,7 @@ void TagDialog::readTags() + if( m_currentData.contains( Meta::Field::COMPOSER ) ) + selectOrInsertText( m_currentData.value( Meta::Field::COMPOSER ).toString(), ui->kComboBox_composer ); + else +- selectOrInsertText( QString(), ui->kComboBox_genre ); ++ selectOrInsertText( QString(), ui->kComboBox_composer ); + ui->ratingWidget->setRating( m_currentData.value( Meta::Field::RATING ).toInt() ); + ui->ratingWidget->setMaxRating( 10 ); + ui->qSpinBox_track->setValue( m_currentData.value( Meta::Field::TRACKNUMBER ).toInt() ); +diff --git a/src/images/splash_screen.jpg b/src/images/splash_screen.jpg +index 6521ead..70a633b 100644 +Binary files a/src/images/splash_screen.jpg and b/src/images/splash_screen.jpg differ +diff --git a/src/main.cpp b/src/main.cpp +index 85e7c88..ebc8300 100644 +--- a/src/main.cpp ++++ b/src/main.cpp +@@ -40,7 +40,7 @@ int main( int argc, char *argv[] ) + ki18n("Developer (hydrogen)"), "parallelgrapefruit@gmail.com" ); + aboutData.addAuthor( ki18n("Ian 'The Beard' Monroe"), + ki18n("Developer (eean)"), "ian@monroe.nu", "http://www.monroe.nu/" ); +- aboutData.addAuthor( ki18n("Jeff 'IROCKSOHARD' Mitchell"), ++ aboutData.addAuthor( ki18n("Jeff 'IROKSOHARD' Mitchell"), + ki18n("Developer (jefferai)"), "mitchell@kde.org", "http://amarok.kde.org/blog/categories/13-jefferai" ); + aboutData.addAuthor( ki18n("Leo Franchi"), + ki18n("Developer (lfranchi)"), "lfranchi@kde.org" ); +diff --git a/src/playlist/PlaylistModel.cpp b/src/playlist/PlaylistModel.cpp +index b46300c..c6ad616 100644 +--- a/src/playlist/PlaylistModel.cpp ++++ b/src/playlist/PlaylistModel.cpp +@@ -610,6 +610,7 @@ Playlist::Model::metadataChanged( Meta::TrackPtr track ) + { + emit dataChanged( createIndex( i, 0 ), createIndex( i, columnCount() - 1 ) ); + emit metadataUpdated(); ++ debug()<<"Metadata updated for track"<prettyName(); + break; + } + } +@@ -621,13 +622,12 @@ Playlist::Model::metadataChanged( Meta::AlbumPtr album ) + Meta::TrackList tracks = album->tracks(); + foreach( Meta::TrackPtr track, tracks ) + metadataChanged( track ); ++ debug()<<"Album metadata changed"; + } + + bool + Playlist::Model::exportPlaylist( const QString &path ) const + { +- DEBUG_BLOCK +- debug() << "WARNING: You shouldn't see this at any time except on exit."; + return The::playlistManager()->exportPlaylist( tracks(), path ); + } + +diff --git a/src/playlist/proxymodels/FilterProxy.cpp b/src/playlist/proxymodels/FilterProxy.cpp +index 2341be4..5254236 100644 +--- a/src/playlist/proxymodels/FilterProxy.cpp ++++ b/src/playlist/proxymodels/FilterProxy.cpp +@@ -32,7 +32,7 @@ FilterProxy::FilterProxy( AbstractModel *belowModel, QObject *parent ) + connect( sourceModel(), SIGNAL( removedIds( const QList& ) ), this, SLOT( slotRemovedIds( const QList& ) ) ); + connect( sourceModel(), SIGNAL( activeTrackChanged( const quint64 ) ), this, SIGNAL( activeTrackChanged( quint64 ) ) ); + connect( sourceModel(), SIGNAL( metadataUpdated() ), this, SIGNAL( metadataUpdated() ) ); +- connect( this, SIGNAL( metadataUpdated() ), this, SLOT( invalidate() ) ); ++ connect( this, SIGNAL( metadataUpdated() ), this, SLOT( slotInvalidateFilter() ) ); + + KConfigGroup config = Amarok::config("Playlist Search"); + m_passThrough = !config.readEntry( "ShowOnlyMatches", true ); +diff --git a/src/playlist/proxymodels/FilterProxy.h b/src/playlist/proxymodels/FilterProxy.h +index 47876ad..65ece09 100644 +--- a/src/playlist/proxymodels/FilterProxy.h ++++ b/src/playlist/proxymodels/FilterProxy.h +@@ -122,6 +122,12 @@ protected slots: + */ + void slotRemovedIds( const QList &ids ); + ++ /** ++ * Slot that wraps around the method invalidateFilter() so one doesn't trigger the ++ * sorting invalidation too by using invalidate(). ++ */ ++ void slotInvalidateFilter(){ invalidateFilter(); } ++ + signals: + /** + * Signal forwarded from the source model. +diff --git a/src/playlist/proxymodels/SortProxy.cpp b/src/playlist/proxymodels/SortProxy.cpp +index 46653c1..efba2cd 100644 +--- a/src/playlist/proxymodels/SortProxy.cpp ++++ b/src/playlist/proxymodels/SortProxy.cpp +@@ -35,7 +35,7 @@ SortProxy::SortProxy( AbstractModel *belowModel, QObject *parent ) + connect( sourceModel(), SIGNAL( removedIds( const QList& ) ), this, SIGNAL( removedIds( const QList< quint64 >& ) ) ); + connect( sourceModel(), SIGNAL( activeTrackChanged( const quint64 ) ), this, SIGNAL( activeTrackChanged( quint64 ) ) ); + connect( sourceModel(), SIGNAL( metadataUpdated() ), this, SIGNAL( metadataUpdated() ) ); +- connect( this, SIGNAL( metadataUpdated() ), this, SLOT( invalidate() ) ); ++ connect( this, SIGNAL( metadataUpdated() ), this, SLOT( invalidateSorting() ) ); + + //needed by GroupingProxy: + connect( sourceModel(), SIGNAL( layoutChanged() ), this, SIGNAL( layoutChanged() ) ); +@@ -48,6 +48,27 @@ SortProxy::~SortProxy() + void + SortProxy::invalidateSorting() + { ++ if( m_scheme.length() ) ++ { ++ if( !( m_scheme.level( m_scheme.length() - 1 ).category() == -1 ) ) //if it's not random ++ { ++ invalidate(); ++ } ++ } ++ else ++ invalidate(); ++ //FIXME: this is a band-aid so that the playlist doesn't reshuffle every time the current track changes ++ // However the real issue is deeper, the Observer seems to notify metadataChanged() even if the metadata ++ // of a track doesn't change but just the currently active track changes, and this results in the playlist ++ // being resorted on every "next", "previous" or track selection. Twice. This is a Bad Thing (TM) and very ++ // inefficient. ++ // We're shipping 2.2 as it is, because it's way too late to go poking around Observer, but this needs ++ // to be solved ASAP post-2.2. --Téo 23/9/2009 ++} ++ ++void ++SortProxy::resetSorting() ++{ + m_scheme = SortScheme(); + reset(); + } +@@ -64,7 +85,7 @@ SortProxy::lessThan( const QModelIndex & left, const QModelIndex & right ) const + void + SortProxy::updateSortMap( SortScheme scheme ) + { +- invalidateSorting(); ++ resetSorting(); + m_scheme = scheme; + sort( 0 ); //0 is a dummy column + //HACK: sort() inverts the sortOrder on each call, this keeps the order ascending. +diff --git a/src/playlist/proxymodels/SortProxy.h b/src/playlist/proxymodels/SortProxy.h +index ebc745f..36cb704 100644 +--- a/src/playlist/proxymodels/SortProxy.h ++++ b/src/playlist/proxymodels/SortProxy.h +@@ -63,7 +63,7 @@ public slots: + /** + * Resets the proxy to its original pass-through state. + */ +- void invalidateSorting(); ++ void resetSorting(); + + protected: + /** +@@ -82,6 +82,12 @@ protected: + */ + virtual int rowToSource( int row ) const; + ++protected slots: ++ /** ++ * Reapplies the current sorting scheme. ++ */ ++ void invalidateSorting(); ++ + private: + SortScheme m_scheme; //! The current sorting scheme. + }; +diff --git a/src/services/mp3tunes/amarok_service_mp3tunes.desktop b/src/services/mp3tunes/amarok_service_mp3tunes.desktop +index d2b3a79..8b0937d 100644 +--- a/src/services/mp3tunes/amarok_service_mp3tunes.desktop ++++ b/src/services/mp3tunes/amarok_service_mp3tunes.desktop +@@ -70,7 +70,7 @@ Comment[pl]=Przeglądaj i słuchaj muzyki przechowywanej na twoim koncie Mp3tune + Comment[pt]=Navegar e escutar a música gravada na sua conta do mp3tunes + Comment[pt_BR]=Navegue e escute as músicas armazenadas na sua conta do mp3tunes + Comment[ro]=Răsfoiți și ascultați muzica stocată în contul dumneavoastră mp3tunes +-Comment[ru]=Обзор и прослушивание музыки, сохраненной в аккаунте Mp3tunes ++Comment[ru]=Обзор и прослушивание музыки, сохраненной в учётной записи Mp3tunes + Comment[sl]=Brskajte po glasbi, ki jo imate shranjeno na svojem računu MP3tunes, in jo poslušajte + Comment[sr]=Прегледајте и слушајте музику са свог налога на МП3‑тјунсу + Comment[sr@latin]=Pregledajte i slušajte muziku sa svog naloga na MP3Tunesu +diff --git a/src/services/opmldirectory/amarok_service_opmldirectory.desktop b/src/services/opmldirectory/amarok_service_opmldirectory.desktop +index f821e17..03c08c8 100644 +--- a/src/services/opmldirectory/amarok_service_opmldirectory.desktop ++++ b/src/services/opmldirectory/amarok_service_opmldirectory.desktop +@@ -27,7 +27,7 @@ Name[pl]=Katalog podcastów + Name[pt]=Pasta de 'Podcasts' + Name[pt_BR]=Podcast Directory + Name[ro]=Director Podcast +-Name[ru]=Каталог для podcast'ов ++Name[ru]=Каталог подкастов + Name[sl]=Imenik podcastov + Name[sr]=Фасцикла подемисија + Name[sr@latin]=Fascikla podemisija +@@ -69,7 +69,7 @@ Comment[pl]=Przeglądaj i zapisz się do ogromnej listy podcastów + Comment[pt]=Navegar e inscrever numa enorme lista de 'podcasts' + Comment[pt_BR]=Navegue e inscrêva-se à uma lista enorme de podcasts + Comment[ro]=Răsfoiți și abonați-vă la o listă uriașă de podcasturi +-Comment[ru]=Обзор и подписка на огромный список podcast'ов ++Comment[ru]=Обзор и подписка на огромный список подкастов + Comment[sl]=Brskajte po obsežni zbirki podcastov in se naročite nanje + Comment[sr]=Прегледајте и претплатите се на огромну листу подемисија + Comment[sr@latin]=Pregledajte i pretplatite se na ogromnu listu podemisija From ac268487641dc3583db8a8e961996fbb85a58c16 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Tue, 29 Sep 2009 11:50:42 +0000 Subject: [PATCH 06/32] - amarok-2.2.0 --- .cvsignore | 2 +- amarok.spec | 20 +- post-2.1.90-20090923git.patch | 1340 --------------------------------- sources | 2 +- 4 files changed, 10 insertions(+), 1354 deletions(-) delete mode 100644 post-2.1.90-20090923git.patch diff --git a/.cvsignore b/.cvsignore index 0615ee7..e81d1cb 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -amarok-2.1.90.tar.bz2 +amarok-2.2.0.tar.bz2 diff --git a/amarok.spec b/amarok.spec index c7ab8ca..313758e 100644 --- a/amarok.spec +++ b/amarok.spec @@ -1,23 +1,17 @@ -%define snap 20090923git - Name: amarok Summary: Media player -Version: 2.1.90 -Release: 2.%{snap}%{?dist} +Version: 2.2.0 +Release: 1%{?dist} Group: Applications/Multimedia License: GPLv2+ Url: http://amarok.kde.org/ -Source0: http://download.kde.org/unstable/amarok/%{version}/src/amarok-%{version}.tar.bz2 -#Source0: amarok-%{version}-%{snap}.tar.bz2 +Source0: http://download.kde.org/stable/amarok/%{version}/src/amarok-%{version}.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Patch50: amarok-2.0.90-qtscript_not_required.patch -# mostly a: git diff v2.1.90 -Patch100: post-2.1.90-%{snap}.patch - BuildRequires: curl-devel BuildRequires: desktop-file-utils BuildRequires: gettext @@ -38,8 +32,7 @@ BuildRequires: soprano-devel BuildRequires: taglib-devel >= 1.6 BuildRequires: taglib-extras-devel >= 1.0.0 -%global kdelibs4_version %((kde4-config --version 2>/dev/null || echo KDE 4.2.0) | grep '^KDE' | cut -d' ' -f2 | cut -d'-' -f1) -%{?_qt4_version:Requires: qt4%{?_isa} >= %{_qt4_version}} +%global kdelibs4_version %((kde4-config --version 2>/dev/null || echo KDE 4.3.0) | grep '^KDE' | cut -d' ' -f2 | cut -d'-' -f1) BuildRequires: qtscriptbindings Requires: qtscriptbindings%{?_isa} Requires: %{name}-utils = %{version}-%{release} @@ -65,6 +58,7 @@ Summary: Runtime libraries for %{name} Group: System Environment/Libraries Requires: %{name} = %{version}-%{release} %{?kdelibs4_version:Requires: kdelibs4%{?_isa} >= %{kdelibs4_version}} +%{?_qt4_version:Requires: qt4%{?_isa} >= %{_qt4_version}} %description libs %{summary}. @@ -81,7 +75,6 @@ Obsoletes: amarok-utilities < 2.0.96 %setup -q %patch50 -p1 -b .qtscript_not_required -%patch100 -p1 -b .20090923git %build @@ -173,6 +166,9 @@ fi %changelog +* Tue Sep 29 2009 Rex Dieter 2.2.0-1 +- amarok-2.2.0 + * Wed Sep 23 2009 Rex Dieter 2.1.90-2.20090923git - 20090923git snapshot diff --git a/post-2.1.90-20090923git.patch b/post-2.1.90-20090923git.patch deleted file mode 100644 index f7b144e..0000000 --- a/post-2.1.90-20090923git.patch +++ /dev/null @@ -1,1340 +0,0 @@ -diff --git a/ChangeLog b/ChangeLog -index 2d97559..6a4e307 100644 ---- a/ChangeLog -+++ b/ChangeLog -@@ -2,6 +2,20 @@ Amarok ChangeLog - ================ - (C) 2002-2009 the Amarok authors. - -+VERSION 2.2 -+ CHANGES: -+ * More collection scanning speedups. -+ -+ BUGFIXES: -+ * Fix photos applet not working after resuming playback. (BR 206829) -+ * Fix regression where the genre field in the Tag Dialog would show the -+ composer of the track. (BR 208255) -+ * Don't reshuffle the playlist every time the active track changes when -+ * using a random sort order. -+ * Fix the Various Artist node sometimes being shown in the Collection -+ Browser with nothing underneath it (or an empty "Unknown" album). -+ * Fix some tracks' tags not being saved correctly to the database. -+ (BR 202021) - - VERSION 2.2-rc1 - FEATURES: -@@ -23,6 +37,7 @@ VERSION 2.2-rc1 - * Added "Lock layout" option to the main window's context menu. - - BUGFIXES: -+ * Fix wikipedia engine refined search broken. (BR 208024) - * Crash in QTextCodec while scanning collection has been fixed. - Apparently. (BR 191447) - * A dialog with "Can not write playlist (/)" was displayed when using -diff --git a/src/collection/iphoneos/amarok_collection-iphoneoscollection.desktop b/src/collection/iphoneos/amarok_collection-iphoneoscollection.desktop -index 80396ef..373d71c 100644 ---- a/src/collection/iphoneos/amarok_collection-iphoneoscollection.desktop -+++ b/src/collection/iphoneos/amarok_collection-iphoneoscollection.desktop -@@ -17,6 +17,7 @@ Name[nn]=Skriveverna samling for iPhone OS 3.0 - Name[pl]=Kolekcja tylko-do-odczytu iPhone OS 3.0 - Name[pt]=Colecção Apenas para Leitura do iPhone OS 3.0 - Name[pt_BR]=Coleção Somente para Leitura do iPhone OS 3.0 -+Name[ru]=Коллекция iPhone OS 3.0 (только для чтения) - Name[sr]=Збирка И‑фон ОС‑а 3.0 (само за читање) - Name[sr@latin]=Zbirka iPhoneOS‑a 3.0 (samo za čitanje) - Name[sv]=iPhone OS 3.0 skrivskyddad samling -@@ -40,6 +41,7 @@ Comment[nn]=Amarok-samlingstillegg for iPhone OS 3.0 - Comment[pl]=Wtyczka kolekcji tylko-do-odczytu iPhone OS 3.0 dla Amaroka - Comment[pt]=Um 'plugin' da colecção, apenas para leitura, do iPhone OS 3.0 para o Amarok - Comment[pt_BR]=Plugin de coleção somente para Leitura do iPhone OS 3.0, para o Amarok -+Comment[ru]=Модуль коллекция iPhone OS 3.0 (только для чтения) - Comment[sr]=Прикључак збирке на И‑фон ОС‑у 3.0 (само за читање) за Амарок - Comment[sr@latin]=Priključak zbirke na iPhoneOS‑u 3.0 (samo za čitanje) za Amarok - Comment[sv]=Insticksprogram med iPhone OS 3.0 skrivskyddad samling för Amarok -diff --git a/src/collection/ipodcollection/amarok_collection-ipodcollection.desktop b/src/collection/ipodcollection/amarok_collection-ipodcollection.desktop -index 4fda617..48c640a 100644 ---- a/src/collection/ipodcollection/amarok_collection-ipodcollection.desktop -+++ b/src/collection/ipodcollection/amarok_collection-ipodcollection.desktop -@@ -36,7 +36,7 @@ Name[pl]=Kolekcja iPod - Name[pt]=Colecção do IPod - Name[pt_BR]=Coleção iPod - Name[ro]=Colecție Ipod --Name[ru]=Коллекция Ipod -+Name[ru]=Коллекция iPod - Name[sl]=Zbirka iPod - Name[sr]=Збирка и‑пода - Name[sr@latin]=Zbirka iPoda -@@ -84,7 +84,7 @@ Comment[pl]=Wtyczka kolekcji iPoda dla Amaroka - Comment[pt]=Um 'plugin' da colecção do IPod para o Amarok - Comment[pt_BR]=Plug-in de coleção iPod para o Amarok - Comment[ro]=Modul de colecție Ipod pentru Amarok --Comment[ru]=Модуль коллекции Ipod для Amarok -+Comment[ru]=Модуль коллекции iPod для Amarok - Comment[sl]=Vstavek za zbirko iPod za Amarok - Comment[sr]=Прикључак збирке на и‑поду за Амарок - Comment[sr@latin]=Priključak zbirke na iPodu za Amarok -diff --git a/src/collection/mysqlecollection/amarok_collection-mysqlecollection.desktop b/src/collection/mysqlecollection/amarok_collection-mysqlecollection.desktop -index c3ae12d..1decebb 100644 ---- a/src/collection/mysqlecollection/amarok_collection-mysqlecollection.desktop -+++ b/src/collection/mysqlecollection/amarok_collection-mysqlecollection.desktop -@@ -18,6 +18,7 @@ Name[nn]=MySQLe-samling - Name[pl]=Kolekcja MySQLe - Name[pt]=Colecção de MySQLe - Name[pt_BR]=Coleção MySQLe -+Name[ru]=Коллекция MySQLe - Name[sr]=Збирка на МајСКуЛe‑у - Name[sr@latin]=Zbirka na MySQLe‑u - Name[sv]=MySQL-samling -diff --git a/src/collection/mysqlservercollection/amarok_collection-mysqlservercollection.desktop b/src/collection/mysqlservercollection/amarok_collection-mysqlservercollection.desktop -index 3957d65..d2726d2 100644 ---- a/src/collection/mysqlservercollection/amarok_collection-mysqlservercollection.desktop -+++ b/src/collection/mysqlservercollection/amarok_collection-mysqlservercollection.desktop -@@ -18,6 +18,7 @@ Name[nn]=MySQLServer-samling - Name[pl]=Kolekcja MySQLServer - Name[pt]=Colecção de MySQL (Servidor) - Name[pt_BR]=Coleção MySQLServer -+Name[ru]=Коллекция MySQLServer - Name[sr]=Збирка на серверу МајСКуЛ‑а - Name[sr@latin]=Zbirka na serveru MySQL‑a - Name[sv]=MySQLServer-samling -diff --git a/src/collection/sqlcollection/ScanResultProcessor.cpp b/src/collection/sqlcollection/ScanResultProcessor.cpp -index dcc45f8..c9694f4 100644 ---- a/src/collection/sqlcollection/ScanResultProcessor.cpp -+++ b/src/collection/sqlcollection/ScanResultProcessor.cpp -@@ -114,7 +114,7 @@ ScanResultProcessor::doneWithImages() - if( key.first.isEmpty() || key.second.isEmpty() ) - continue; - -- int artist = artistId( key.first ); -+ int artist = genericId( "artists", key.first ); - int album = albumId( key.second, artist ); - - // Will automatically add the image path to the database if needed -@@ -261,7 +261,7 @@ ScanResultProcessor::processDirectory( const QList &data ) - { - foreach( const QVariantMap &row, data ) - { -- int artist = artistId( row.value( Field::ARTIST ).toString() ); -+ int artist = genericId( "artists", row.value( Field::ARTIST ).toString() ); - addTrack( row, artist ); - } - } -@@ -269,7 +269,7 @@ ScanResultProcessor::processDirectory( const QList &data ) - { - QString albumArtist = findAlbumArtist( artists, data.count() ); - //an empty string means that no albumartist was found -- int artist = albumArtist.isEmpty() ? 0 : artistId( albumArtist ); -+ int artist = albumArtist.isEmpty() ? 0 : genericId( "artists", albumArtist ); - - debug() << "albumartist " << albumArtist << "for artists" << artists; - foreach( const QVariantMap &row, data ) -@@ -383,37 +383,23 @@ ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) - } - - if( dir.count() == 1 ) -- { - compilationId = checkExistingAlbums( albumName ); -- } - -- if( 0 == compilationId ) -- { -- album = albumId( albumName, albumArtistId ); -- } -+ //run a single query to fetch these at once, to save time -+ //then values will be cached in local maps, so can use the same calls below -+ databaseIdFetch( trackData.value( Field::ARTIST ).toString(), -+ trackData.value( Field::GENRE ).toString(), -+ trackData.value( Field::COMPOSER ).toString(), -+ trackData.value( Field::YEAR ).toString(), -+ albumName, albumArtistId, compilationId ); - -- bool needToQuery = false; -- if( !m_artists.contains( trackData.value( Field::ARTIST ).toString() ) || -- !m_genre.contains( trackData.value( Field::GENRE ).toString() ) || -- !m_composer.contains( trackData.value( Field::COMPOSER ).toString() ) || -- !m_year.contains( trackData.value( Field::YEAR ).toString() ) ) -- needToQuery = true; -+ int artist = genericId( "artists", trackData.value( Field::ARTIST ).toString() ); -+ int genre = genericId( "genres", trackData.value( Field::GENRE ).toString() ); -+ int composer = genericId( "composers", trackData.value( Field::COMPOSER ).toString() ); -+ int year = genericId( "years", trackData.value( Field::YEAR ).toString() ); - -- if( needToQuery ) -- { -- //run a single query to fetch these at once, to save time -- //then values will be cached in local maps, so can use the same calls below -- databaseIdFetch( trackData.value( Field::ARTIST ).toString(), -- trackData.value( Field::GENRE ).toString(), -- trackData.value( Field::COMPOSER ).toString(), -- trackData.value( Field::YEAR ).toString(), -- albumName, albumArtistId ); -- } -- -- int artist = artistId( trackData.value( Field::ARTIST ).toString() ); -- int genre = genreId( trackData.value( Field::GENRE ).toString() ); -- int composer = composerId( trackData.value( Field::COMPOSER ).toString() ); -- int year = yearId( trackData.value( Field::YEAR ).toString() ); -+ if( !compilationId ) -+ album = albumId( albumName, albumArtistId ); - - QString uid = trackData.value( Field::UNIQUEID ).toString(); - -@@ -473,131 +459,86 @@ ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) - } - - int --ScanResultProcessor::artistId( const QString &artist ) -+ScanResultProcessor::genericId( const QString &key, const QString &value ) - { -- if( m_artists.contains( artist ) ) -- return m_artists.value( artist ); -- QString query = QString( "SELECT id FROM artists_temp WHERE name = '%1';" ).arg( m_collection->escape( artist ) ); -- QStringList res = m_collection->query( query ); -- int id = 0; -- if( res.isEmpty() ) -- id = artistInsert( artist ); -+ QMap *currMap; -+ if( key == "artists" ) -+ currMap = &m_artists; -+ else if( key == "genres" ) -+ currMap = &m_genres; -+ else if( key == "years" ) -+ currMap = &m_years; -+ else if( key == "composers" ) -+ currMap = &m_composers; - else -- id = res[0].toInt(); -- m_artists.insert( artist, id ); -- return id; --} -- --int --ScanResultProcessor::artistInsert( const QString &artist ) --{ -- QString insert = QString( "INSERT INTO artists_temp( name ) VALUES ('%1');" ).arg( m_collection->escape( artist ) ); -- int id = m_collection->insert( insert, "artists_temp" ); -- return id; --} -- --int --ScanResultProcessor::genreId( const QString &genre ) --{ -- if( m_genre.contains( genre ) ) -- return m_genre.value( genre ); -- QString query = QString( "SELECT id FROM genres_temp WHERE name = '%1';" ).arg( m_collection->escape( genre ) ); -- QStringList res = m_collection->query( query ); -- int id = 0; -- if( res.isEmpty() ) -- id = genreInsert( genre ); -- else -- id = res[0].toInt(); -- m_genre.insert( genre, id ); -- return id; --} -- --int --ScanResultProcessor::genreInsert( const QString &genre ) --{ -- QString insert = QString( "INSERT INTO genres_temp( name ) VALUES ('%1');" ).arg( m_collection->escape( genre ) ); -- int id = m_collection->insert( insert, "genres_temp" ); -- return id; --} -- --int --ScanResultProcessor::composerId( const QString &composer ) --{ -- if( m_composer.contains( composer ) ) -- return m_composer.value( composer ); -- QString query = QString( "SELECT id FROM composers_temp WHERE name = '%1';" ).arg( m_collection->escape( composer ) ); -- QStringList res = m_collection->query( query ); -- int id = 0; -- if( res.isEmpty() ) -- id = composerInsert( composer ); -- else -- id = res[0].toInt(); -- m_composer.insert( composer, id ); -- return id; --} -+ { -+ debug() << "Holy hell Batman, what just happened in genericId?"; -+ return -9999; -+ } - --int --ScanResultProcessor::composerInsert( const QString &composer ) --{ -- QString insert = QString( "INSERT INTO composers_temp( name ) VALUES ('%1');" ).arg( m_collection->escape( composer ) ); -- int id = m_collection->insert( insert, "composers_temp" ); -- return id; --} -+ if( currMap->contains( value ) ) -+ return currMap->value( value ); - --int --ScanResultProcessor::yearId( const QString &year ) --{ -- if( m_year.contains( year ) ) -- return m_year.value( year ); -- QString query = QString( "SELECT id FROM years_temp WHERE name = '%1';" ).arg( m_collection->escape( year ) ); -+ QString query = QString( "SELECT id FROM %1_temp WHERE name = '%2';" ).arg( key, m_collection->escape( value ) ); - QStringList res = m_collection->query( query ); - int id = 0; - if( res.isEmpty() ) -- id = yearInsert( year ); -+ id = genericInsert( key, value ); - else - id = res[0].toInt(); -- m_year.insert( year, id ); -+ currMap->insert( value, id ); - return id; - } - - int --ScanResultProcessor::yearInsert( const QString &year ) -+ScanResultProcessor::genericInsert( const QString &key, const QString &value ) - { -- QString insert = QString( "INSERT INTO years_temp( name ) VALUES ('%1');" ).arg( m_collection->escape( year ) ); -- int id = m_collection->insert( insert, "years_temp" ); -+ QString insert = QString( "INSERT INTO %1_temp( name ) VALUES ('%2');" ).arg( key, m_collection->escape( value ) ); -+ int id = m_collection->insert( insert, QString( "%1_temp" ).arg( key ) ); - return id; - } - - void --ScanResultProcessor::databaseIdFetch( const QString &artist, const QString &genre, const QString &composer, const QString &year, const QString &album, int albumArtistId ) -+ScanResultProcessor::databaseIdFetch( const QString &artist, const QString &genre, const QString &composer, const QString &year, const QString &album, int albumArtistId, int compilationId ) - { - //DEBUG_BLOCK -- Q_UNUSED( album ); -- Q_UNUSED( albumArtistId ); -+ QPair albumKey( album, albumArtistId ); -+ bool albumFound = compilationId || m_albums.contains( albumKey ); -+ bool artistFound = m_artists.contains( artist ); -+ bool genreFound = m_genres.contains( genre ); -+ bool composerFound = m_composers.contains( composer ); -+ bool yearFound = m_years.contains( year ); -+ -+ if( albumFound && artistFound && genreFound && composerFound && yearFound ) -+ return; //nothing to do -+ - int l = 0; //album -- bool albumFound = false; - int a = 0; //artist -- bool artistFound = false; - int g = 0; //genre -- bool genreFound = false; - int c = 0; //composer -- bool composerFound = false; - int y = 0; //year -- bool yearFound = false; - - QString query; --/* -- if( albumArtistId == 0 ) -- query += QString( "SELECT id, CONCAT('ALBUMNAME_', name) AS name FROM albums_temp WHERE artist IS NULL AND name = '%1' " ) -- .arg( m_collection->escape( album ) ); -- else -- query += QString( "SELECT id, CONCAT('ALBUMNAME_', name) AS name FROM albums_temp WHERE artist = %1 AND name = '%2' " ) -- .arg( QString::number( albumArtistId ), m_collection->escape( album ) ); --*/ -- query += QString( "SELECT id, CONCAT('ARTISTNAME_', name) AS name FROM artists_temp WHERE name = '%1' " ).arg( m_collection->escape( artist ) ); -- query += QString( "UNION ALL SELECT id, CONCAT('GENRENAME_', name) AS name FROM genres_temp WHERE name = '%1' " ).arg( m_collection->escape( genre ) ); -- query += QString( "UNION ALL SELECT id, CONCAT('COMPOSERNAME_', name) AS name FROM composers_temp WHERE name = '%1' " ).arg( m_collection->escape( composer ) ); -- query += QString( "UNION ALL SELECT id, CONCAT('YEARSNAME_', name) AS name FROM years_temp WHERE name = '%1';" ).arg( m_collection->escape( year ) ); -+ if( !albumFound ) -+ { -+ if( albumArtistId == 0 ) -+ query += QString( "SELECT id, CONCAT('ALBUMNAME_', name) AS name FROM albums_temp WHERE artist IS NULL AND name = '%1' " ) -+ .arg( m_collection->escape( album ) ); -+ else -+ query += QString( "SELECT id, CONCAT('ALBUMNAME_', name) AS name FROM albums_temp WHERE artist = %1 AND name = '%2' " ) -+ .arg( QString::number( albumArtistId ), m_collection->escape( album ) ); -+ } -+ if( !artistFound ) -+ query += QString( "UNION ALL SELECT id, CONCAT('ARTISTNAME_', name) AS name FROM artists_temp WHERE name = '%1' " ).arg( m_collection->escape( artist ) ); -+ if( !genreFound ) -+ query += QString( "UNION ALL SELECT id, CONCAT('GENRENAME_', name) AS name FROM genres_temp WHERE name = '%1' " ).arg( m_collection->escape( genre ) ); -+ if( !composerFound ) -+ query += QString( "UNION ALL SELECT id, CONCAT('COMPOSERNAME_', name) AS name FROM composers_temp WHERE name = '%1' " ).arg( m_collection->escape( composer ) ); -+ if( !yearFound ) -+ query += QString( "UNION ALL SELECT id, CONCAT('YEARSNAME_', name) AS name FROM years_temp WHERE name = '%1';" ).arg( m_collection->escape( year ) ); -+ if( query.startsWith( "UNION ALL " ) ) -+ query.remove( 0, 10 ); -+ - QStringList res = m_collection->query( query ); - int index = 0; - QString first; -@@ -607,58 +548,55 @@ ScanResultProcessor::databaseIdFetch( const QString &artist, const QString &genr - first = res.at( index++ ); - second = res.at( index++ ); - a = first.toInt(); -- if( second == QString( "ALBUMNAME_" + album ) ) -+ if( !albumFound && second == QString( "ALBUMNAME_" + album ) ) - { - l = first.toInt(); - albumFound = true; - } -- else if( second == QString( "ARTISTNAME_" + artist ) ) -+ else if( !artistFound && second == QString( "ARTISTNAME_" + artist ) ) - { - a = first.toInt(); - artistFound = true; - } -- else if( second == QString( "GENRENAME_" + genre ) ) -+ else if( !genreFound && second == QString( "GENRENAME_" + genre ) ) - { - g = first.toInt(); - genreFound = true; - } -- else if( second == QString( "COMPOSERNAME_" + composer ) ) -+ else if( !composerFound && second == QString( "COMPOSERNAME_" + composer ) ) - { - c = first.toInt(); - composerFound = true; - } -- else if( second == QString( "YEARSNAME_" + year ) ) -+ else if( !yearFound && second == QString( "YEARSNAME_" + year ) ) - { - y = first.toInt(); - yearFound = true; - } - } -- /* - if( !albumFound ) - { -- QPair key( album, albumArtistId ); -- m_albums.insert( key, albumInsert( album, albumArtistId ) ); -+ m_albums.insert( albumKey, albumInsert( album, albumArtistId ) ); - albumFound = true; - } -- */ - if( !artistFound ) - { -- m_artists.insert( artist, artistInsert( artist ) ); -+ m_artists.insert( artist, genericInsert( "artists", artist ) ); - artistFound = true; - } - if( !genreFound ) - { -- m_genre.insert( genre, genreInsert( genre ) ); -+ m_genres.insert( genre, genericInsert( "genres", genre ) ); - genreFound = true; - } - if( !composerFound ) - { -- m_composer.insert( composer, composerInsert( composer ) ); -+ m_composers.insert( composer, genericInsert( "composers", composer ) ); - composerFound = true; - } - if( !yearFound ) - { -- m_year.insert( year, yearInsert( year ) ); -+ m_years.insert( year, genericInsert( "years", year ) ); - yearFound = true; - } - } -diff --git a/src/collection/sqlcollection/ScanResultProcessor.h b/src/collection/sqlcollection/ScanResultProcessor.h -index fffc9e7..49c2b8b 100644 ---- a/src/collection/sqlcollection/ScanResultProcessor.h -+++ b/src/collection/sqlcollection/ScanResultProcessor.h -@@ -58,15 +58,9 @@ class ScanResultProcessor : public QObject - private: - void addTrack( const QVariantMap &trackData, int albumArtistId ); - -- int artistId( const QString &artist ); -- int artistInsert( const QString &artist ); -- int genreId( const QString &genre ); -- int genreInsert( const QString &genre ); -- int composerId( const QString &composer ); -- int composerInsert( const QString &composer ); -- int yearId( const QString &year ); -- int yearInsert( const QString &year ); -- void databaseIdFetch( const QString &artist, const QString &genre, const QString &composer, const QString &year, const QString &album, int albumArtistId ); -+ int genericId( const QString &key, const QString &value ); -+ int genericInsert( const QString &key, const QString &value ); -+ void databaseIdFetch( const QString &artist, const QString &genre, const QString &composer, const QString &year, const QString &album, int albumArtistId, int compilationId ); - int imageId( const QString &image, int albumId ); - int albumId( const QString &album, int artistId ); - int albumInsert( const QString &album, int artistId ); -@@ -90,9 +84,9 @@ class ScanResultProcessor : public QObject - bool m_setupComplete; - - QMap m_artists; -- QMap m_genre; -- QMap m_year; -- QMap m_composer; -+ QMap m_genres; -+ QMap m_years; -+ QMap m_composers; - QMap, int> m_albums; - QMap, int> m_images; - QMap m_directories; -diff --git a/src/collection/sqlcollection/SqlQueryMaker.cpp b/src/collection/sqlcollection/SqlQueryMaker.cpp -index a6f98fb..10cc629 100644 ---- a/src/collection/sqlcollection/SqlQueryMaker.cpp -+++ b/src/collection/sqlcollection/SqlQueryMaker.cpp -@@ -992,6 +992,7 @@ SqlQueryMaker::handleArtists( const QStringList &result ) - void - SqlQueryMaker::handleAlbums( const QStringList &result ) - { -+ DEBUG_BLOCK - AlbumList albums; - SqlRegistry* reg = m_collection->registry(); - for( QStringListIterator iter( result ); iter.hasNext(); ) -@@ -999,6 +1000,10 @@ SqlQueryMaker::handleAlbums( const QStringList &result ) - QString name = iter.next(); - QString id = iter.next(); - QString artist = iter.next(); -+ //HACK: The following is a HACK and should be fixed by fixing the HACK -+ //of always including the "tracks" table in queries in SqlQueryMaker -+ if( name.isEmpty() && id.isEmpty() && artist.isEmpty() ) -+ continue; - albums.append( reg->getAlbum( name, id.toInt(), artist.toInt() ) ); - } - emitOrStoreProperResult( AlbumPtr, albums ); -diff --git a/src/collection/umscollection/amarok_collection-umscollection.desktop b/src/collection/umscollection/amarok_collection-umscollection.desktop -index 0124c1b..1b016e0 100644 ---- a/src/collection/umscollection/amarok_collection-umscollection.desktop -+++ b/src/collection/umscollection/amarok_collection-umscollection.desktop -@@ -15,6 +15,7 @@ Name[nn]=Universell masselagringssamling - Name[pl]=Kolekcja na urządzeniu danych - Name[pt]=Colecção de Armazenamento em Massa Universal - Name[pt_BR]=Coleção de Armazenamento Universal em Massa -+Name[ru]=Коллекция UMS - Name[sr]=Збирка на универзалном масовном складишту - Name[sr@latin]=Zbirka na univerzalnom masovnom skladištu - Name[sv]=Samling på generell lagringsenhet -diff --git a/src/context/Applet.cpp b/src/context/Applet.cpp -index 38bc709..ab2c0ac 100644 ---- a/src/context/Applet.cpp -+++ b/src/context/Applet.cpp -@@ -39,7 +39,8 @@ namespace Context - Context::Applet::Applet( QObject * parent, const QVariantList& args ) - : Plasma::Applet( parent, args ) - , m_collapsed( false ) -- , m_animationId( 0 ) -+ , m_animationIdOn( 0 ) -+ , m_animationIdOff( 0 ) - , m_transient( 0 ) - , m_standardPadding( 6.0 ) - , m_textBackground( 0 ) -@@ -50,8 +51,10 @@ Context::Applet::Applet( QObject * parent, const QVariantList& args ) - - Context::Applet::~Applet( ) - { -- if ( m_animationId != 0) -- Plasma::Animator::self()->stopCustomAnimation( m_animationId ); -+ if ( m_animationIdOn != 0 ) -+ Plasma::Animator::self()->stopCustomAnimation( m_animationIdOn ); -+ if ( m_animationIdOff != 0 ) -+ Plasma::Animator::self()->stopCustomAnimation( m_animationIdOff ); - } - - -@@ -228,39 +231,51 @@ Context::Applet::addAction( QAction *action, const int size ) - void - Context::Applet::setCollapseOn() - { -+ // We are asked to collapse, but the applet is already animating to collapse, do nothing -+ if ( m_animationIdOn != 0 ) -+ return; -+ -+ // We are already collapsed - if ( size().height() == m_heightCollapseOn ) - return; -+ - debug() << "collapsing applet to..." << m_heightCollapseOn; - if( m_heightCollapseOff == -1 ) - m_animFromHeight = size().height(); - else - m_animFromHeight = m_heightCollapseOff; - -- if ( m_animationId != 0 ) // warning we are moving right now -+ if ( m_animationIdOff != 0 ) // warning we are extanding right now we should stop - { - // stop the anim -- Plasma::Animator::self()->stopCustomAnimation( m_animationId ); -- m_animationId = 0; -+ Plasma::Animator::self()->stopCustomAnimation( m_animationIdOff ); -+ m_animationIdOff = 0; - } - m_collapsed = false; -- m_animationId = Plasma::Animator::self()->customAnimation(20, 1000, Plasma::Animator::EaseInCurve, this, "animateOn" ); -+ m_animationIdOn = Plasma::Animator::self()->customAnimation(20, 1000, Plasma::Animator::EaseInCurve, this, "animateOn" ); - } - - void - Context::Applet::setCollapseOff() - { - DEBUG_BLOCK -- debug() << "height:" << size().height() << "target:" << m_heightCollapseOff << "m_collapsed:" << m_collapsed; -+ -+ // We are asked to extend, but the applet is already animating to extend, do nothing -+ if ( m_animationIdOff != 0 ) -+ return; -+ -+ // Applet already extended - if ( size().height() == m_heightCollapseOff ) - return; - -+ debug() << "height:" << size().height() << "target:" << m_heightCollapseOff << "m_collapsed:" << m_collapsed; - if( m_heightCollapseOff == -1) // if it's self-expanding, don't animate as we don't know where we're going. also, if we're shrinking - { // stop that and expand regardless -- // stop the anim -- if( m_animationId != 0 ) -+ // stop the animation on now -+ if( m_animationIdOn != 0 ) - { -- Plasma::Animator::self()->stopCustomAnimation( m_animationId ); -- m_animationId = 0; -+ Plasma::Animator::self()->stopCustomAnimation( m_animationIdOn ); -+ m_animationIdOn = 0; - } - m_heightCurrent = m_heightCollapseOff; - emit sizeHintChanged(Qt::PreferredSize); -@@ -269,14 +284,14 @@ Context::Applet::setCollapseOff() - return; - } - -- if ( m_animationId != 0 ) // warning we are moving right now -+ if ( m_animationIdOn != 0 ) // warning we are collapsing right now, stop that and reverse it ! - { - // stop the anim -- Plasma::Animator::self()->stopCustomAnimation( m_animationId ); -- m_animationId = 0; -+ Plasma::Animator::self()->stopCustomAnimation( m_animationIdOn ); -+ m_animationIdOn = 0; - } - m_collapsed = true ; -- m_animationId = Plasma::Animator::self()->customAnimation(20, 1000, Plasma::Animator::EaseInCurve, this, "animateOff" ); -+ m_animationIdOff = Plasma::Animator::self()->customAnimation(20, 1000, Plasma::Animator::EaseInCurve, this, "animateOff" ); - } - - void -@@ -285,6 +300,19 @@ Context::Applet::setCollapseHeight( int h ) - m_heightCollapseOn = h; - } - -+bool -+Context::Applet::isAppletCollapsed() -+{ -+ return ( m_heightCollapseOn == m_heightCurrent ); -+} -+ -+bool -+Context::Applet::isAppletExtended() -+{ -+ return ( m_heightCollapseOff == m_heightCurrent ); -+} -+ -+ - void - Context::Applet::animateOn( qreal anim ) - { -@@ -302,22 +330,20 @@ Context::Applet::animateOff( qreal anim ) - void - Context::Applet::animateEnd( int id ) - { -- if( id == m_animationId ) -+ if( id == m_animationIdOn ) - { -- if( !m_collapsed ) -- { -- Plasma::Applet::resize( size().width(), m_heightCollapseOn ); -- m_collapsed = true; -- } -- else -- { -- Plasma::Applet::resize( size().width(), m_heightCollapseOff ); -- m_collapsed = false; -- } -- updateGeometry(); -- emit sizeHintChanged(Qt::PreferredSize); -- m_animationId = 0; -+ Plasma::Applet::resize( size().width(), m_heightCollapseOn ); -+ m_collapsed = true; -+ m_animationIdOn = 0; -+ } -+ if ( id == m_animationIdOff ) -+ { -+ Plasma::Applet::resize( size().width(), m_heightCollapseOff ); -+ m_collapsed = false; -+ m_animationIdOff = 0; - } -+ updateGeometry(); -+ emit sizeHintChanged(Qt::PreferredSize); - } - - -diff --git a/src/context/Applet.h b/src/context/Applet.h -index 7811624..9f86158 100644 ---- a/src/context/Applet.h -+++ b/src/context/Applet.h -@@ -62,6 +62,9 @@ class AMAROK_EXPORT Applet : public Plasma::Applet - void setCollapseOff(); - void setCollapseHeight( int ); - -+ bool isAppletCollapsed(); -+ bool isAppletExtended(); -+ - /** - * sizeHint is reimplemented here only for all the applet. - */ -@@ -86,7 +89,8 @@ class AMAROK_EXPORT Applet : public Plasma::Applet - int m_heightCurrent; - int m_heightCollapseOn; - int m_heightCollapseOff; -- int m_animationId; -+ int m_animationIdOn; -+ int m_animationIdOff; - int m_animFromHeight; - - private: -diff --git a/src/context/applets/info/amarok-context-applet-info.desktop b/src/context/applets/info/amarok-context-applet-info.desktop -index 7c61815..81f2e1d 100644 ---- a/src/context/applets/info/amarok-context-applet-info.desktop -+++ b/src/context/applets/info/amarok-context-applet-info.desktop -@@ -16,6 +16,7 @@ Name[nn]=Info - Name[pl]=Informacja - Name[pt]=Informação - Name[pt_BR]=Informação -+Name[ru]=Сведения - Name[sr]=Подаци - Name[sr@latin]=Podaci - Name[sv]=Information -diff --git a/src/context/applets/photos/PhotosApplet.cpp b/src/context/applets/photos/PhotosApplet.cpp -index 4cc4714..884a7f3 100644 ---- a/src/context/applets/photos/PhotosApplet.cpp -+++ b/src/context/applets/photos/PhotosApplet.cpp -@@ -116,7 +116,7 @@ PhotosApplet::~PhotosApplet() - void - PhotosApplet::engineNewTrackPlaying( ) - { -- // DEBUG_BLOCK -+ DEBUG_BLOCK - m_stoppedstate = false; - dataEngine( "amarok-photos" )->query( QString( "photos" ) ); - } -@@ -124,13 +124,14 @@ PhotosApplet::engineNewTrackPlaying( ) - void - PhotosApplet::enginePlaybackEnded( int, int, PlaybackEndedReason ) - { --// DEBUG_BLOCK -+ DEBUG_BLOCK - m_stoppedstate = true;; - m_headerText->setText( i18n( "Photos" ) + QString( " : " ) + i18n( "No track playing" ) ); - m_widget->clear(); - m_widget->hide(); - setBusy( false ); - setCollapseOn(); -+ dataEngine( "amarok-photos" )->query( QString( "photos:stopped" ) ); - } - - void -@@ -215,14 +216,22 @@ PhotosApplet::dataUpdated( const QString& name, const Plasma::DataEngine::Data& - } - else if ( data.contains( "data" ) ) - { -- m_headerText->setText( i18n( "Photos" ) + QString( " : " ) + data[ "artist" ].toString() ); -- updateConstraints(); -- update(); -- setCollapseOff(); -- // Send the data to the scrolling widget -- m_widget->setPixmapList( data[ "data" ].value< QList < PhotosInfo * > >() ); -- m_widget->show(); -- setBusy(false); -+ // Do not show some picture if we're still animating as it can lead to trouble -+ // let's hope animating time will be shorter than fetching time of all the picture :/ -+ // this also prevent the stupid effect of reanimating several time. -+ if ( isAppletExtended() ) -+ { -+ m_headerText->setText( i18n( "Photos" ) + QString( " : " ) + data[ "artist" ].toString() ); -+ updateConstraints(); -+ update(); -+ setCollapseOff(); -+ // Send the data to the scrolling widget -+ m_widget->setPixmapList( data[ "data" ].value< QList < PhotosInfo * > >() ); -+ m_widget->show(); -+ setBusy(false); -+ } -+ else -+ return; - } - updateConstraints(); - update(); -diff --git a/src/context/applets/photos/PhotosScrollWidget.cpp b/src/context/applets/photos/PhotosScrollWidget.cpp -index 71d3d28..31c71ad 100644 ---- a/src/context/applets/photos/PhotosScrollWidget.cpp -+++ b/src/context/applets/photos/PhotosScrollWidget.cpp -@@ -112,90 +112,94 @@ void PhotosScrollWidget::setPixmapList (QList < PhotosInfo * > list) - if ( list == m_currentlist ) - return; - -- debug() << "adding " << list.count() << "new pics"; -+ // debug() << "adding " << list.count() << "new pics"; - // If a new one arrived, we change. - foreach( PhotosInfo *item, list ) - { - if ( !m_currentlist.contains( item ) ) - { -- switch ( m_mode ) -+ if ( !item->photo->isNull() ) - { -- case PHOTOS_MODE_INTERACTIVE : -+ switch ( m_mode ) - { -- -- if ( !m_id ) // careful we're animating -+ case PHOTOS_MODE_INTERACTIVE : - { -- Plasma::Animator::self()->stopCustomAnimation( m_id ); -- m_id = 0; -- } -- DragPixmapItem *dragpix = new DragPixmapItem( this ); -- dragpix->setPixmap( The::svgHandler()->addBordersToPixmap( -- item->photo->scaledToHeight( (int) size().height() - 4 * m_margin, Qt::SmoothTransformation ), 5, "", true ) ); -- dragpix->setPos( m_actualpos, 0 ); -- dragpix->SetClickableUrl( item->urlpage ); -- dragpix->show(); - -- m_pixmaplist << dragpix; -+ if ( !m_id ) // careful we're animating -+ { -+ Plasma::Animator::self()->stopCustomAnimation( m_id ); -+ m_id = 0; -+ } - -- int delta = dragpix->boundingRect().width() + m_margin; -- m_scrollmax += delta; -- m_actualpos += delta; -+ DragPixmapItem *dragpix = new DragPixmapItem( this ); -+ dragpix->setPixmap( The::svgHandler()->addBordersToPixmap( -+ item->photo->scaledToHeight( (int) size().height() - 4 * m_margin, Qt::SmoothTransformation ), 5, "", true ) ); -+ dragpix->setPos( m_actualpos, 0 ); -+ dragpix->SetClickableUrl( item->urlpage ); -+ dragpix->show(); - -- break; -- } -- case PHOTOS_MODE_AUTOMATIC : -- { -+ m_pixmaplist << dragpix; - -- DragPixmapItem *dragpix = new DragPixmapItem( this ); -- dragpix->setPixmap( The::svgHandler()->addBordersToPixmap( -- item->photo->scaledToHeight( (int) size().height() - 4 * m_margin, Qt::SmoothTransformation ), 5, "", true ) ); -- dragpix->SetClickableUrl( item->urlpage ); -+ int delta = dragpix->boundingRect().width() + m_margin; -+ m_scrollmax += delta; -+ m_actualpos += delta; - -- if ( m_id == 0 ) // only pos and show if no animation, otherwise it will be set at the end automatically -+ break; -+ } -+ case PHOTOS_MODE_AUTOMATIC : - { -- if ( ! m_pixmaplist.empty() ) -- { -- dragpix->setPos( m_pixmaplist.last()->boundingRect().width() + m_pixmaplist.last()->pos().x() + m_margin , 0 ) ; -- dragpix->show(); -- } -- else -+ -+ DragPixmapItem *dragpix = new DragPixmapItem( this ); -+ dragpix->setPixmap( The::svgHandler()->addBordersToPixmap( -+ item->photo->scaledToHeight( (int) size().height() - 4 * m_margin, Qt::SmoothTransformation ), 5, "", true ) ); -+ dragpix->SetClickableUrl( item->urlpage ); -+ -+ if ( m_id == 0 ) // only pos and show if no animation, otherwise it will be set at the end automatically - { -- m_actualpos = 0; -- dragpix->setPos( m_actualpos, 0 ) ; -- dragpix->show(); -+ if ( ! m_pixmaplist.empty() ) -+ { -+ dragpix->setPos( m_pixmaplist.last()->boundingRect().width() + m_pixmaplist.last()->pos().x() + m_margin , 0 ) ; -+ dragpix->show(); -+ } -+ else -+ { -+ m_actualpos = 0; -+ dragpix->setPos( m_actualpos, 0 ) ; -+ dragpix->show(); -+ } - } -- } - -- m_pixmaplist << dragpix; -+ m_pixmaplist << dragpix; - -- // set a timer after and launch -- QTimer::singleShot( m_interval, this, SLOT( automaticAnimBegin() ) ); -+ // set a timer after and launch -+ QTimer::singleShot( m_interval, this, SLOT( automaticAnimBegin() ) ); - -- break; -- } -- case PHOTOS_MODE_FADING : -- { -- -- DragPixmapItem *dragpix = new DragPixmapItem( this ); -- dragpix->setPixmap( The::svgHandler()->addBordersToPixmap( -- item->photo->scaledToHeight( (int) size().height() - 4 * m_margin, Qt::SmoothTransformation ), 5, "", true ) ); -- dragpix->setPos( ( size().width() - dragpix->boundingRect().width() ) / 2, 0 ); -- dragpix->SetClickableUrl( item->urlpage ); -- dragpix->hide(); -- m_pixmaplist << dragpix; -- if ( m_pixmaplist.size() == 1 ) -- { -- dragpix->show(); -- m_timer->start( m_interval ); -+ break; - } -+ case PHOTOS_MODE_FADING : -+ { - -- break; -+ DragPixmapItem *dragpix = new DragPixmapItem( this ); -+ dragpix->setPixmap( The::svgHandler()->addBordersToPixmap( -+ item->photo->scaledToHeight( (int) size().height() - 4 * m_margin, Qt::SmoothTransformation ), 5, "", true ) ); -+ dragpix->setPos( ( size().width() - dragpix->boundingRect().width() ) / 2, 0 ); -+ dragpix->SetClickableUrl( item->urlpage ); -+ dragpix->hide(); -+ m_pixmaplist << dragpix; -+ if ( m_pixmaplist.size() == 1 ) -+ { -+ dragpix->show(); -+ m_timer->start( m_interval ); -+ } -+ -+ break; -+ } - } - } - } - } - m_currentlist = list; -- debug() << "total count: " << m_pixmaplist.count(); -+ // debug() << "total count: " << m_pixmaplist.count(); - } - - void PhotosScrollWidget::hoverEnterEvent(QGraphicsSceneHoverEvent*) -@@ -266,10 +270,13 @@ void PhotosScrollWidget::resize(qreal wid, qreal hei) - { - foreach (DragPixmapItem *item, m_pixmaplist) - { -- if ( size().height() != hei ) -- item->setPixmap( item->pixmap().scaledToHeight( (int) hei - 4 * m_margin, Qt::SmoothTransformation ) ); -- if ( size().width() != wid ) -- item->setPos( ( wid - item->boundingRect().width() ) / 2, 0 ); -+ if ( !item->pixmap().isNull() ) -+ { -+ if ( size().height() != hei ) -+ item->setPixmap( item->pixmap().scaledToHeight( (int) hei - 4 * m_margin, Qt::SmoothTransformation ) ); -+ if ( size().width() != wid ) -+ item->setPos( ( wid - item->boundingRect().width() ) / 2, 0 ); -+ } - } - break; - } -diff --git a/src/context/applets/photos/amarok-context-applet-photos.desktop b/src/context/applets/photos/amarok-context-applet-photos.desktop -index 2fed337..86662e8 100644 ---- a/src/context/applets/photos/amarok-context-applet-photos.desktop -+++ b/src/context/applets/photos/amarok-context-applet-photos.desktop -@@ -17,6 +17,7 @@ Name[nn]=Bilete - Name[pl]=Zdjęcia - Name[pt]=Fotografias - Name[pt_BR]=Fotos -+Name[ru]=Фотографии - Name[sr]=Фотографије - Name[sr@latin]=Fotografije - Name[sv]=Foton -diff --git a/src/context/engines/current/amarok-data-engine-current.desktop b/src/context/engines/current/amarok-data-engine-current.desktop -index 663153f..45354b9 100644 ---- a/src/context/engines/current/amarok-data-engine-current.desktop -+++ b/src/context/engines/current/amarok-data-engine-current.desktop -@@ -33,7 +33,7 @@ Name[pl]=Moduł danych bieżących informacji - Name[pt]=Motor de Dados da Informação Actual - Name[pt_BR]=Mecanismo de Dados das Informações Atuais - Name[ro]=Motor de date Informație curentă --Name[ru]=Движок данных для текущих сведений -+Name[ru]=Источник данных для текущих сведений - Name[sl]=Podatkovni pogon za podatke trenutni skladbi - Name[sr]=Датомотор текућих података - Name[sr@latin]=Datomotor tekućih podataka -diff --git a/src/context/engines/info/amarok-data-engine-info.desktop b/src/context/engines/info/amarok-data-engine-info.desktop -index a29040c..de16b6b 100644 ---- a/src/context/engines/info/amarok-data-engine-info.desktop -+++ b/src/context/engines/info/amarok-data-engine-info.desktop -@@ -14,6 +14,7 @@ Name[nn]=Datamotor for informasjon - Name[pl]=Moduł danych informacji - Name[pt]=Motor de Dados da Informação - Name[pt_BR]=Mecanismo de Dados das Informações -+Name[ru]=Источник данных для сведений - Name[sr]=Датомотор података - Name[sr@latin]=Datomotor podataka - Name[sv]=Datagränssnitt för information -diff --git a/src/context/engines/lyrics/amarok-data-engine-lyrics.desktop b/src/context/engines/lyrics/amarok-data-engine-lyrics.desktop -index fcdb189..134176e 100644 ---- a/src/context/engines/lyrics/amarok-data-engine-lyrics.desktop -+++ b/src/context/engines/lyrics/amarok-data-engine-lyrics.desktop -@@ -33,7 +33,7 @@ Name[pl]=Moduł danych tekstów - Name[pt]=Motor de Dados de Letras Musicais - Name[pt_BR]=Mecanismo de Dados das Letras - Name[ro]=Motor de date Versuri --Name[ru]=Движок данных для текстов песен -+Name[ru]=Источник данных для текстов песен - Name[sl]=Podatkovni pogon za besedila - Name[sr]=Датомотор стихова - Name[sr@latin]=Datomotor stihova -diff --git a/src/context/engines/photos/PhotosEngine.cpp b/src/context/engines/photos/PhotosEngine.cpp -index 7558da8..dfb13af 100644 ---- a/src/context/engines/photos/PhotosEngine.cpp -+++ b/src/context/engines/photos/PhotosEngine.cpp -@@ -65,6 +65,7 @@ PhotosEngine::sources() const - bool - PhotosEngine::sourceRequestEvent( const QString& name ) - { -+ DEBUG_BLOCK - m_requested = true; // someone is asking for data, so we turn ourselves on :) - QStringList tokens = name.split( ':' ); - -@@ -86,7 +87,18 @@ PhotosEngine::sourceRequestEvent( const QString& name ) - m_reload = true; - } - } -- -+ -+ // we've been notified by the applet to be in state stop <3 -+ else if ( tokens.contains( "stopped" ) && tokens.size() > 1 ) -+ { -+ if ( tokens.at( 1 ) == QString( "stopped" ) ) -+ { -+ removeSource( "photos" ); -+ m_reload = true; -+ return false; -+ } -+ } -+ - removeAllData( name ); - setData( name, QVariant() ); - update(); -diff --git a/src/context/engines/photos/amarok-data-engine-photos.desktop b/src/context/engines/photos/amarok-data-engine-photos.desktop -index c0e893f..d11c43c 100644 ---- a/src/context/engines/photos/amarok-data-engine-photos.desktop -+++ b/src/context/engines/photos/amarok-data-engine-photos.desktop -@@ -15,6 +15,7 @@ Name[nn]=Datamotor for bilete - Name[pl]=Moduł danych zdjęć - Name[pt]=Motor de Dados de Fotografias - Name[pt_BR]=Mecanismo de Dados de Fotos -+Name[ru]=Источник данных фотографий - Name[sr]=Датомотор фотографија - Name[sr@latin]=Datomotor fotografija - Name[sv]=Datagränssnitt för foton -diff --git a/src/context/engines/songkick/amarok-data-engine-songkick.desktop b/src/context/engines/songkick/amarok-data-engine-songkick.desktop -index ee1ca93..2213533 100644 ---- a/src/context/engines/songkick/amarok-data-engine-songkick.desktop -+++ b/src/context/engines/songkick/amarok-data-engine-songkick.desktop -@@ -33,7 +33,7 @@ Name[pl]=Moduł danych Songkick - Name[pt]=Motor de Dados do Songkick - Name[pt_BR]=Mecanismo de Dados do Songkick - Name[ro]=Motor de date Songkick --Name[ru]=Движок данных Songkick -+Name[ru]=Источник данных Songkick - Name[sl]=Podatkovni pogon za Songkick - Name[sr]=Датомотор Сонгкика - Name[sr@latin]=Datomotor Songkicka -diff --git a/src/context/engines/videoclip/amarok-data-engine-videoclip.desktop b/src/context/engines/videoclip/amarok-data-engine-videoclip.desktop -index 9fce5d7..7d3c98b 100644 ---- a/src/context/engines/videoclip/amarok-data-engine-videoclip.desktop -+++ b/src/context/engines/videoclip/amarok-data-engine-videoclip.desktop -@@ -20,7 +20,7 @@ Name[pa]=ਵੀਡਿਓ ਕਲਿੱਪ ਡਾਟਾ ਇੰਜਣ - Name[pl]=Moduł danych klipów wideo - Name[pt]=Motor de Dados de 'Clips' de Vídeo - Name[pt_BR]=Motor de dados de clipe de vídeo --Name[ru]=Движок данных для видеоклипов -+Name[ru]=Источник данных для видеоклипов - Name[sl]=Podatkovni pogon za video posnetke - Name[sr]=Датомотор видео исечака - Name[sr@latin]=Datomotor video isečaka -diff --git a/src/context/engines/wikipedia/WikipediaEngine.cpp b/src/context/engines/wikipedia/WikipediaEngine.cpp -index 11023cb..13de58d 100644 ---- a/src/context/engines/wikipedia/WikipediaEngine.cpp -+++ b/src/context/engines/wikipedia/WikipediaEngine.cpp -@@ -222,9 +222,11 @@ WikipediaEngine::wikiResult( KJob* job ) - m_wiki = QString::fromUtf8( storedJob->data().data(), storedJob->data().size() ); - - -- // Refined search thing -+ // FIXME: For now we test if we got an article or not with a test on this string "wgArticleId=0" -+ // This is bad - if( m_wiki.contains( "wgArticleId=0" ) ) // The article does not exist - { -+ // Refined search is done here - if ( m_triedRefinedSearch == -1 ) - { - debug() << "We already tried some refined search. Lets end this madness..."; -diff --git a/src/context/engines/wikipedia/amarok-data-engine-wikipedia.desktop b/src/context/engines/wikipedia/amarok-data-engine-wikipedia.desktop -index 4e864eb..a97fc3c 100644 ---- a/src/context/engines/wikipedia/amarok-data-engine-wikipedia.desktop -+++ b/src/context/engines/wikipedia/amarok-data-engine-wikipedia.desktop -@@ -33,7 +33,7 @@ Name[pl]=Moduł danych Wikipedii - Name[pt]=Motor de Dados do Wikipédia - Name[pt_BR]=Mecanismo de Dados da Wikipedia - Name[ro]=Motor de date Wikipedia --Name[ru]=Движок данных Википедии -+Name[ru]=Источник данных Википедии - Name[sl]=Podatkovni pogon za Wikipedijo - Name[sr]=Датомотор Википедије - Name[sr@latin]=Datomotor Wikipedije -diff --git a/src/context/scriptengine/javascript/amarok-scriptengine-applet-simple-javascript.desktop b/src/context/scriptengine/javascript/amarok-scriptengine-applet-simple-javascript.desktop -index 499c587..d4b50e9 100644 ---- a/src/context/scriptengine/javascript/amarok-scriptengine-applet-simple-javascript.desktop -+++ b/src/context/scriptengine/javascript/amarok-scriptengine-applet-simple-javascript.desktop -@@ -18,6 +18,7 @@ Name[nn]=JavaScript-element for Amarok - Name[pl]=Aplet JavaScriptu Amaroka - Name[pt]='Applet' de JavaScript do Amarok - Name[pt_BR]=Miniaplicativo JavaScript do Amarok -+Name[ru]=Аплет JavaScript для Amarok - Name[sr]=Јаваскриптни аплет за Амарок - Name[sr@latin]=Javascript aplet za Amarok - Name[sv]=Amarok Javascript-miniprogram -@@ -45,6 +46,7 @@ Comment[nn]=Innebygd Amarok-element skriven i JavaScript - Comment[pl]=Natywny applet Amaroka napisany w JavaScripcie - Comment[pt]=Uma 'applet' nativa do Amarok, feita em JavaScript - Comment[pt_BR]=Miniaplicativo nativo do Amarok escrito em JavaScript -+Comment[ru]=Аплет Amarok, написанный на языке JavaScript - Comment[sr]=Самосвојни Амароков аплет написан у јаваскрипту - Comment[sr@latin]=Samosvojni Amarokov aplet napisan u JavaScriptu - Comment[sv]=Eget Amarok miniprogram skrivet i Javascript -diff --git a/src/context/scriptengine/javascript/amarok-scriptengine-runner-javascript.desktop b/src/context/scriptengine/javascript/amarok-scriptengine-runner-javascript.desktop -index aa79d73..5672b8f 100644 ---- a/src/context/scriptengine/javascript/amarok-scriptengine-runner-javascript.desktop -+++ b/src/context/scriptengine/javascript/amarok-scriptengine-runner-javascript.desktop -@@ -17,6 +17,7 @@ Name[nn]=JavaScript-køyrar for Amarok - Name[pl]=JavaScript Runner Amaroka - Name[pt]=Execução de JavaScript do Amarok - Name[pt_BR]=Executor JavaScript do Amarok -+Name[ru]=Модуль запуска JavaScript для Amarok - Name[sr]=Амароков извођач јаваскрипта - Name[sr@latin]=Amarokov izvođač JavaScripta - Name[sv]=Amarok Javascript-körprogram -diff --git a/src/context/servicetypes/amarok_data_engine.desktop b/src/context/servicetypes/amarok_data_engine.desktop -index 6e42b2b..fac1d1f 100644 ---- a/src/context/servicetypes/amarok_data_engine.desktop -+++ b/src/context/servicetypes/amarok_data_engine.desktop -@@ -33,7 +33,7 @@ Name[pl]=Moduł danych Amaroka - Name[pt]=Motor de Dados do Amarok - Name[pt_BR]=Motor de Dados do Amarok - Name[ro]=Motor de date Amarok --Name[ru]=Движок данных Amarok -+Name[ru]=Источник данных Amarok - Name[sl]=Podatkovni pogon za Amarok - Name[sr]=Датомотор Амарока - Name[sr@latin]=Datomotor Amaroka -@@ -83,7 +83,7 @@ Comment[pl]=Moduł danych Amaroka - Comment[pt]=Motor de Dados do Amarok - Comment[pt_BR]=Mecanismo de Dados do Amarok - Comment[ro]=Motor de date Amarok --Comment[ru]=Движок данных Amarok -+Comment[ru]=Источник данных Amarok - Comment[sl]=Podatkovni pogon za Amarok - Comment[sr]=Датомотор Амарока - Comment[sr@latin]=Datomotor Amaroka -diff --git a/src/dialogs/TagDialog.cpp b/src/dialogs/TagDialog.cpp -index 58f2ef4..08df868 100644 ---- a/src/dialogs/TagDialog.cpp -+++ b/src/dialogs/TagDialog.cpp -@@ -888,7 +888,7 @@ void TagDialog::readTags() - if( m_currentData.contains( Meta::Field::COMPOSER ) ) - selectOrInsertText( m_currentData.value( Meta::Field::COMPOSER ).toString(), ui->kComboBox_composer ); - else -- selectOrInsertText( QString(), ui->kComboBox_genre ); -+ selectOrInsertText( QString(), ui->kComboBox_composer ); - ui->ratingWidget->setRating( m_currentData.value( Meta::Field::RATING ).toInt() ); - ui->ratingWidget->setMaxRating( 10 ); - ui->qSpinBox_track->setValue( m_currentData.value( Meta::Field::TRACKNUMBER ).toInt() ); -diff --git a/src/images/splash_screen.jpg b/src/images/splash_screen.jpg -index 6521ead..70a633b 100644 -Binary files a/src/images/splash_screen.jpg and b/src/images/splash_screen.jpg differ -diff --git a/src/main.cpp b/src/main.cpp -index 85e7c88..ebc8300 100644 ---- a/src/main.cpp -+++ b/src/main.cpp -@@ -40,7 +40,7 @@ int main( int argc, char *argv[] ) - ki18n("Developer (hydrogen)"), "parallelgrapefruit@gmail.com" ); - aboutData.addAuthor( ki18n("Ian 'The Beard' Monroe"), - ki18n("Developer (eean)"), "ian@monroe.nu", "http://www.monroe.nu/" ); -- aboutData.addAuthor( ki18n("Jeff 'IROCKSOHARD' Mitchell"), -+ aboutData.addAuthor( ki18n("Jeff 'IROKSOHARD' Mitchell"), - ki18n("Developer (jefferai)"), "mitchell@kde.org", "http://amarok.kde.org/blog/categories/13-jefferai" ); - aboutData.addAuthor( ki18n("Leo Franchi"), - ki18n("Developer (lfranchi)"), "lfranchi@kde.org" ); -diff --git a/src/playlist/PlaylistModel.cpp b/src/playlist/PlaylistModel.cpp -index b46300c..c6ad616 100644 ---- a/src/playlist/PlaylistModel.cpp -+++ b/src/playlist/PlaylistModel.cpp -@@ -610,6 +610,7 @@ Playlist::Model::metadataChanged( Meta::TrackPtr track ) - { - emit dataChanged( createIndex( i, 0 ), createIndex( i, columnCount() - 1 ) ); - emit metadataUpdated(); -+ debug()<<"Metadata updated for track"<prettyName(); - break; - } - } -@@ -621,13 +622,12 @@ Playlist::Model::metadataChanged( Meta::AlbumPtr album ) - Meta::TrackList tracks = album->tracks(); - foreach( Meta::TrackPtr track, tracks ) - metadataChanged( track ); -+ debug()<<"Album metadata changed"; - } - - bool - Playlist::Model::exportPlaylist( const QString &path ) const - { -- DEBUG_BLOCK -- debug() << "WARNING: You shouldn't see this at any time except on exit."; - return The::playlistManager()->exportPlaylist( tracks(), path ); - } - -diff --git a/src/playlist/proxymodels/FilterProxy.cpp b/src/playlist/proxymodels/FilterProxy.cpp -index 2341be4..5254236 100644 ---- a/src/playlist/proxymodels/FilterProxy.cpp -+++ b/src/playlist/proxymodels/FilterProxy.cpp -@@ -32,7 +32,7 @@ FilterProxy::FilterProxy( AbstractModel *belowModel, QObject *parent ) - connect( sourceModel(), SIGNAL( removedIds( const QList& ) ), this, SLOT( slotRemovedIds( const QList& ) ) ); - connect( sourceModel(), SIGNAL( activeTrackChanged( const quint64 ) ), this, SIGNAL( activeTrackChanged( quint64 ) ) ); - connect( sourceModel(), SIGNAL( metadataUpdated() ), this, SIGNAL( metadataUpdated() ) ); -- connect( this, SIGNAL( metadataUpdated() ), this, SLOT( invalidate() ) ); -+ connect( this, SIGNAL( metadataUpdated() ), this, SLOT( slotInvalidateFilter() ) ); - - KConfigGroup config = Amarok::config("Playlist Search"); - m_passThrough = !config.readEntry( "ShowOnlyMatches", true ); -diff --git a/src/playlist/proxymodels/FilterProxy.h b/src/playlist/proxymodels/FilterProxy.h -index 47876ad..65ece09 100644 ---- a/src/playlist/proxymodels/FilterProxy.h -+++ b/src/playlist/proxymodels/FilterProxy.h -@@ -122,6 +122,12 @@ protected slots: - */ - void slotRemovedIds( const QList &ids ); - -+ /** -+ * Slot that wraps around the method invalidateFilter() so one doesn't trigger the -+ * sorting invalidation too by using invalidate(). -+ */ -+ void slotInvalidateFilter(){ invalidateFilter(); } -+ - signals: - /** - * Signal forwarded from the source model. -diff --git a/src/playlist/proxymodels/SortProxy.cpp b/src/playlist/proxymodels/SortProxy.cpp -index 46653c1..efba2cd 100644 ---- a/src/playlist/proxymodels/SortProxy.cpp -+++ b/src/playlist/proxymodels/SortProxy.cpp -@@ -35,7 +35,7 @@ SortProxy::SortProxy( AbstractModel *belowModel, QObject *parent ) - connect( sourceModel(), SIGNAL( removedIds( const QList& ) ), this, SIGNAL( removedIds( const QList< quint64 >& ) ) ); - connect( sourceModel(), SIGNAL( activeTrackChanged( const quint64 ) ), this, SIGNAL( activeTrackChanged( quint64 ) ) ); - connect( sourceModel(), SIGNAL( metadataUpdated() ), this, SIGNAL( metadataUpdated() ) ); -- connect( this, SIGNAL( metadataUpdated() ), this, SLOT( invalidate() ) ); -+ connect( this, SIGNAL( metadataUpdated() ), this, SLOT( invalidateSorting() ) ); - - //needed by GroupingProxy: - connect( sourceModel(), SIGNAL( layoutChanged() ), this, SIGNAL( layoutChanged() ) ); -@@ -48,6 +48,27 @@ SortProxy::~SortProxy() - void - SortProxy::invalidateSorting() - { -+ if( m_scheme.length() ) -+ { -+ if( !( m_scheme.level( m_scheme.length() - 1 ).category() == -1 ) ) //if it's not random -+ { -+ invalidate(); -+ } -+ } -+ else -+ invalidate(); -+ //FIXME: this is a band-aid so that the playlist doesn't reshuffle every time the current track changes -+ // However the real issue is deeper, the Observer seems to notify metadataChanged() even if the metadata -+ // of a track doesn't change but just the currently active track changes, and this results in the playlist -+ // being resorted on every "next", "previous" or track selection. Twice. This is a Bad Thing (TM) and very -+ // inefficient. -+ // We're shipping 2.2 as it is, because it's way too late to go poking around Observer, but this needs -+ // to be solved ASAP post-2.2. --Téo 23/9/2009 -+} -+ -+void -+SortProxy::resetSorting() -+{ - m_scheme = SortScheme(); - reset(); - } -@@ -64,7 +85,7 @@ SortProxy::lessThan( const QModelIndex & left, const QModelIndex & right ) const - void - SortProxy::updateSortMap( SortScheme scheme ) - { -- invalidateSorting(); -+ resetSorting(); - m_scheme = scheme; - sort( 0 ); //0 is a dummy column - //HACK: sort() inverts the sortOrder on each call, this keeps the order ascending. -diff --git a/src/playlist/proxymodels/SortProxy.h b/src/playlist/proxymodels/SortProxy.h -index ebc745f..36cb704 100644 ---- a/src/playlist/proxymodels/SortProxy.h -+++ b/src/playlist/proxymodels/SortProxy.h -@@ -63,7 +63,7 @@ public slots: - /** - * Resets the proxy to its original pass-through state. - */ -- void invalidateSorting(); -+ void resetSorting(); - - protected: - /** -@@ -82,6 +82,12 @@ protected: - */ - virtual int rowToSource( int row ) const; - -+protected slots: -+ /** -+ * Reapplies the current sorting scheme. -+ */ -+ void invalidateSorting(); -+ - private: - SortScheme m_scheme; //! The current sorting scheme. - }; -diff --git a/src/services/mp3tunes/amarok_service_mp3tunes.desktop b/src/services/mp3tunes/amarok_service_mp3tunes.desktop -index d2b3a79..8b0937d 100644 ---- a/src/services/mp3tunes/amarok_service_mp3tunes.desktop -+++ b/src/services/mp3tunes/amarok_service_mp3tunes.desktop -@@ -70,7 +70,7 @@ Comment[pl]=Przeglądaj i słuchaj muzyki przechowywanej na twoim koncie Mp3tune - Comment[pt]=Navegar e escutar a música gravada na sua conta do mp3tunes - Comment[pt_BR]=Navegue e escute as músicas armazenadas na sua conta do mp3tunes - Comment[ro]=Răsfoiți și ascultați muzica stocată în contul dumneavoastră mp3tunes --Comment[ru]=Обзор и прослушивание музыки, сохраненной в аккаунте Mp3tunes -+Comment[ru]=Обзор и прослушивание музыки, сохраненной в учётной записи Mp3tunes - Comment[sl]=Brskajte po glasbi, ki jo imate shranjeno na svojem računu MP3tunes, in jo poslušajte - Comment[sr]=Прегледајте и слушајте музику са свог налога на МП3‑тјунсу - Comment[sr@latin]=Pregledajte i slušajte muziku sa svog naloga na MP3Tunesu -diff --git a/src/services/opmldirectory/amarok_service_opmldirectory.desktop b/src/services/opmldirectory/amarok_service_opmldirectory.desktop -index f821e17..03c08c8 100644 ---- a/src/services/opmldirectory/amarok_service_opmldirectory.desktop -+++ b/src/services/opmldirectory/amarok_service_opmldirectory.desktop -@@ -27,7 +27,7 @@ Name[pl]=Katalog podcastów - Name[pt]=Pasta de 'Podcasts' - Name[pt_BR]=Podcast Directory - Name[ro]=Director Podcast --Name[ru]=Каталог для podcast'ов -+Name[ru]=Каталог подкастов - Name[sl]=Imenik podcastov - Name[sr]=Фасцикла подемисија - Name[sr@latin]=Fascikla podemisija -@@ -69,7 +69,7 @@ Comment[pl]=Przeglądaj i zapisz się do ogromnej listy podcastów - Comment[pt]=Navegar e inscrever numa enorme lista de 'podcasts' - Comment[pt_BR]=Navegue e inscrêva-se à uma lista enorme de podcasts - Comment[ro]=Răsfoiți și abonați-vă la o listă uriașă de podcasturi --Comment[ru]=Обзор и подписка на огромный список podcast'ов -+Comment[ru]=Обзор и подписка на огромный список подкастов - Comment[sl]=Brskajte po obsežni zbirki podcastov in se naročite nanje - Comment[sr]=Прегледајте и претплатите се на огромну листу подемисија - Comment[sr@latin]=Pregledajte i pretplatite se na ogromnu listu podemisija diff --git a/sources b/sources index 45d43d0..83e500c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -ec727ed72c5d371fb659ce0c3c1e6136 amarok-2.1.90.tar.bz2 +5a0188c5eb7d343109b82964942d8eb5 amarok-2.2.0.tar.bz2 From 37968e778d4c899066107d0991a86cc97fa06a5c Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Fri, 2 Oct 2009 13:26:05 +0000 Subject: [PATCH 07/32] - Requires: kdebase-runtime (support for trash protocol needed) --- amarok.spec | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/amarok.spec b/amarok.spec index 313758e..f376e12 100644 --- a/amarok.spec +++ b/amarok.spec @@ -2,7 +2,7 @@ Name: amarok Summary: Media player Version: 2.2.0 -Release: 1%{?dist} +Release: 2%{?dist} Group: Applications/Multimedia License: GPLv2+ @@ -32,11 +32,15 @@ BuildRequires: soprano-devel BuildRequires: taglib-devel >= 1.6 BuildRequires: taglib-extras-devel >= 1.0.0 -%global kdelibs4_version %((kde4-config --version 2>/dev/null || echo KDE 4.3.0) | grep '^KDE' | cut -d' ' -f2 | cut -d'-' -f1) +%global kde4_version %((kde4-config --version 2>/dev/null || echo KDE 4.3.0) | grep '^KDE' | cut -d' ' -f2 | cut -d'-' -f1) BuildRequires: qtscriptbindings Requires: qtscriptbindings%{?_isa} Requires: %{name}-utils = %{version}-%{release} +# for trash protocol support, phonon kcm, etc... +# FIXME: should probably be handled lower in the stack +Requires: kdebase-runtime >= %{kde4_version} + # when we grew a -libs subpkg, multilib love Obsoletes: amarok < 2.1.80 Requires: %{name}-libs%{?_isa} = %{version}-%{release} @@ -166,6 +170,9 @@ fi %changelog +* Fri Oct 02 2009 Rex Dieter 2.2.0-2 +- Requires: kdebase-runtime (support for trash protocol needed) + * Tue Sep 29 2009 Rex Dieter 2.2.0-1 - amarok-2.2.0 From 12df7b1b4c33ee23f8ff093dcdcf193fa32055e3 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Fri, 2 Oct 2009 14:11:53 +0000 Subject: [PATCH 08/32] 3rd time's a charm --- amarok.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amarok.spec b/amarok.spec index f376e12..4ba9616 100644 --- a/amarok.spec +++ b/amarok.spec @@ -61,7 +61,7 @@ Amarok is a multimedia player with: Summary: Runtime libraries for %{name} Group: System Environment/Libraries Requires: %{name} = %{version}-%{release} -%{?kdelibs4_version:Requires: kdelibs4%{?_isa} >= %{kdelibs4_version}} +%{?kde4_version:Requires: kdelibs4%{?_isa} >= %{kde4_version}} %{?_qt4_version:Requires: qt4%{?_isa} >= %{_qt4_version}} %description libs %{summary}. From f655fb2bb654d2bd3c9fd0dc6330ed9da8eb2757 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Fri, 2 Oct 2009 14:40:24 +0000 Subject: [PATCH 09/32] clarify changelog --- amarok.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amarok.spec b/amarok.spec index 4ba9616..fa170fc 100644 --- a/amarok.spec +++ b/amarok.spec @@ -171,7 +171,7 @@ fi %changelog * Fri Oct 02 2009 Rex Dieter 2.2.0-2 -- Requires: kdebase-runtime (support for trash protocol needed) +- Requires: kdebase-runtime (need kio_trash, kcm_phonon, etc) * Tue Sep 29 2009 Rex Dieter 2.2.0-1 - amarok-2.2.0 From 7f90d964c2f39abd75607f9667c9245b5320333e Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Thu, 8 Oct 2009 12:40:34 +0000 Subject: [PATCH 10/32] - upstream lyric.patch --- amarok.spec | 10 +++++++++- lyric.patch | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 lyric.patch diff --git a/amarok.spec b/amarok.spec index fa170fc..5e33696 100644 --- a/amarok.spec +++ b/amarok.spec @@ -2,7 +2,7 @@ Name: amarok Summary: Media player Version: 2.2.0 -Release: 2%{?dist} +Release: 3%{?dist} Group: Applications/Multimedia License: GPLv2+ @@ -12,6 +12,10 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Patch50: amarok-2.0.90-qtscript_not_required.patch +## upstream patches +# sigh, ride the lyric roller-coaster +Patch100: lyric.patch + BuildRequires: curl-devel BuildRequires: desktop-file-utils BuildRequires: gettext @@ -79,6 +83,7 @@ Obsoletes: amarok-utilities < 2.0.96 %setup -q %patch50 -p1 -b .qtscript_not_required +%patch100 -p1 -b .lyric %build @@ -170,6 +175,9 @@ fi %changelog +* Thu Oct 08 2009 Rex Dieter 2.2.0-3 +- upstream lyric.patch + * Fri Oct 02 2009 Rex Dieter 2.2.0-2 - Requires: kdebase-runtime (need kio_trash, kcm_phonon, etc) diff --git a/lyric.patch b/lyric.patch new file mode 100644 index 0000000..2c129b2 --- /dev/null +++ b/lyric.patch @@ -0,0 +1,32 @@ +diff --git a/src/scripts/lyrics_lyricwiki/main.js b/src/scripts/lyrics_lyricwiki/main.js +index 60150f9..5c75473 100644 +--- a/src/scripts/lyrics_lyricwiki/main.js ++++ b/src/scripts/lyrics_lyricwiki/main.js +@@ -97,10 +97,26 @@ function onFinished( response ) + return; + } + // parse the relevant part of the html source of the returned page +- relevant = /]*['"]lyricbox['"][^<>]*>(.*)<\/div>/.exec(response)[1]; ++ var pos = response.indexOf( "lyricbox" ); ++ var startPos = response.indexOf( ">", pos ) + 1; ++ var endPos = response.indexOf( "", startPos ); ++ var otherDivPos = response.indexOf( "", endPos + 1 ); ++ otherDivPos = response.indexOf( "/g, "\n") + "\n\n"; // convert
to \n + relevant = relevant.replace( /—/g, "—" ); // not supported by QDomDocument ++ // strip adverts ++ pos = relevant.indexOf( "rtMatcher" ); ++ while( pos != -1 ) { ++ startPos = relevant.lastIndexOf( "", pos ); ++ relevant = relevant.substring( 0, startPos ) + relevant.substring( endPos + 6 ); ++ pos = relevant.indexOf( "rtMatcher" ); ++ } + // construct a QDomDocument to convert special characters in the lyrics text. + doc2 = new QDomDocument(); + doc2.setContent( "" + relevant + "" ); From 5a49017f592860add74ca68a410fb15c1bd3d3c2 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Thu, 12 Nov 2009 13:26:44 +0000 Subject: [PATCH 11/32] - amarok-2.2.1 --- .cvsignore | 2 +- amarok.spec | 10 +++++----- lyric.patch | 32 -------------------------------- sources | 2 +- 4 files changed, 7 insertions(+), 39 deletions(-) delete mode 100644 lyric.patch diff --git a/.cvsignore b/.cvsignore index e81d1cb..4d738f0 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -amarok-2.2.0.tar.bz2 +amarok-2.2.1.tar.bz2 diff --git a/amarok.spec b/amarok.spec index 5e33696..83334e1 100644 --- a/amarok.spec +++ b/amarok.spec @@ -1,8 +1,8 @@ Name: amarok Summary: Media player -Version: 2.2.0 -Release: 3%{?dist} +Version: 2.2.1 +Release: 1%{?dist} Group: Applications/Multimedia License: GPLv2+ @@ -13,8 +13,6 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Patch50: amarok-2.0.90-qtscript_not_required.patch ## upstream patches -# sigh, ride the lyric roller-coaster -Patch100: lyric.patch BuildRequires: curl-devel BuildRequires: desktop-file-utils @@ -83,7 +81,6 @@ Obsoletes: amarok-utilities < 2.0.96 %setup -q %patch50 -p1 -b .qtscript_not_required -%patch100 -p1 -b .lyric %build @@ -175,6 +172,9 @@ fi %changelog +* Wed Nov 11 2009 Rex Dieter 2.2.0-3 - upstream lyric.patch diff --git a/lyric.patch b/lyric.patch deleted file mode 100644 index 2c129b2..0000000 --- a/lyric.patch +++ /dev/null @@ -1,32 +0,0 @@ -diff --git a/src/scripts/lyrics_lyricwiki/main.js b/src/scripts/lyrics_lyricwiki/main.js -index 60150f9..5c75473 100644 ---- a/src/scripts/lyrics_lyricwiki/main.js -+++ b/src/scripts/lyrics_lyricwiki/main.js -@@ -97,10 +97,26 @@ function onFinished( response ) - return; - } - // parse the relevant part of the html source of the returned page -- relevant = /]*['"]lyricbox['"][^<>]*>(.*)<\/div>/.exec(response)[1]; -+ var pos = response.indexOf( "lyricbox" ); -+ var startPos = response.indexOf( ">", pos ) + 1; -+ var endPos = response.indexOf( "", startPos ); -+ var otherDivPos = response.indexOf( "", endPos + 1 ); -+ otherDivPos = response.indexOf( "/g, "\n") + "\n\n"; // convert
to \n - relevant = relevant.replace( /—/g, "—" ); // not supported by QDomDocument -+ // strip adverts -+ pos = relevant.indexOf( "rtMatcher" ); -+ while( pos != -1 ) { -+ startPos = relevant.lastIndexOf( "", pos ); -+ relevant = relevant.substring( 0, startPos ) + relevant.substring( endPos + 6 ); -+ pos = relevant.indexOf( "rtMatcher" ); -+ } - // construct a QDomDocument to convert special characters in the lyrics text. - doc2 = new QDomDocument(); - doc2.setContent( "" + relevant + "" ); diff --git a/sources b/sources index 83e500c..4ba33cd 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -5a0188c5eb7d343109b82964942d8eb5 amarok-2.2.0.tar.bz2 +4f6f45f0c25f85f2a2a1fff169ac7193 amarok-2.2.1.tar.bz2 From 258ba9d8bba0ba16156f0b245c0e53ce6d96bbbb Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Thu, 12 Nov 2009 13:40:34 +0000 Subject: [PATCH 12/32] BR: qca2-devel --- amarok.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/amarok.spec b/amarok.spec index 83334e1..b2d9778 100644 --- a/amarok.spec +++ b/amarok.spec @@ -30,6 +30,7 @@ BuildRequires: libusb-devel BuildRequires: libxml2-devel BuildRequires: loudmouth-devel BuildRequires: mysql-embedded-devel +BuildRequires: qca2-devel BuildRequires: soprano-devel BuildRequires: taglib-devel >= 1.6 BuildRequires: taglib-extras-devel >= 1.0.0 From dba261f30a4c3326f8b442e02a2bc8f5ccb6ca50 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Mon, 16 Nov 2009 15:28:46 +0000 Subject: [PATCH 13/32] - amarok-2.2.1 --- playlist_default_layout_fix.diff | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 playlist_default_layout_fix.diff diff --git a/playlist_default_layout_fix.diff b/playlist_default_layout_fix.diff new file mode 100644 index 0000000..106f659 --- /dev/null +++ b/playlist_default_layout_fix.diff @@ -0,0 +1,29 @@ +diff --git a/src/playlist/layouts/LayoutManager.cpp b/src/playlist/layouts/LayoutManager.cpp +index b2903ee..541f989 100644 +--- a/src/playlist/layouts/LayoutManager.cpp ++++ b/src/playlist/layouts/LayoutManager.cpp +@@ -55,6 +55,8 @@ LayoutManager::LayoutManager() + + KConfigGroup config = Amarok::config("Playlist Layout"); + m_activeLayout = config.readEntry( "CurrentLayout", "Default" ); ++ if( !layouts().contains( m_activeLayout ) ) ++ m_activeLayout = "Default"; + Playlist::ModelStack::instance()->top()->setGroupingCategory( activeLayout().groupBy() ); + } + +diff --git a/src/playlist/layouts/PlaylistLayoutEditDialog.cpp b/src/playlist/layouts/PlaylistLayoutEditDialog.cpp +index 166879c..03fd529 100644 +--- a/src/playlist/layouts/PlaylistLayoutEditDialog.cpp ++++ b/src/playlist/layouts/PlaylistLayoutEditDialog.cpp +@@ -440,7 +440,10 @@ void PlaylistLayoutEditDialog::reject() //SLOT + DEBUG_BLOCK + + debug() << "Applying initial layout: " << m_firstActiveLayout; +- LayoutManager::instance()->setActiveLayout( m_firstActiveLayout ); ++ if( layoutListWidget->findItems( m_firstActiveLayout, Qt::MatchExactly ).isEmpty() ) ++ LayoutManager::instance()->setActiveLayout( "Default" ); ++ else ++ LayoutManager::instance()->setActiveLayout( m_firstActiveLayout ); + + QDialog::reject(); + } From 33c271f35a1db6da050f5157896386ed3b6b55c1 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Mon, 16 Nov 2009 15:29:46 +0000 Subject: [PATCH 14/32] - playlist_default_layout_fix.diff (kde#211717) --- amarok.spec | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/amarok.spec b/amarok.spec index b2d9778..55439cf 100644 --- a/amarok.spec +++ b/amarok.spec @@ -2,7 +2,7 @@ Name: amarok Summary: Media player Version: 2.2.1 -Release: 1%{?dist} +Release: 2%{?dist} Group: Applications/Multimedia License: GPLv2+ @@ -13,6 +13,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Patch50: amarok-2.0.90-qtscript_not_required.patch ## upstream patches +Patch100: playlist_default_layout_fix.diff BuildRequires: curl-devel BuildRequires: desktop-file-utils @@ -82,6 +83,7 @@ Obsoletes: amarok-utilities < 2.0.96 %setup -q %patch50 -p1 -b .qtscript_not_required +%patch100 -p1 -b .playlist_default_layout_fix %build @@ -173,7 +175,10 @@ fi %changelog -* Wed Nov 11 2009 Rex Dieter 2.2.1-2 +- playlist_default_layout_fix.diff (kde#211717) + +* Wed Nov 11 2009 Rex Dieter 2.2.1-1 - amarok-2.2.1 * Thu Oct 08 2009 Rex Dieter 2.2.0-3 From 242a2d1d6b6b133012ecfd73a1db80dc5db18019 Mon Sep 17 00:00:00 2001 From: Bill Nottingham Date: Thu, 26 Nov 2009 01:27:10 +0000 Subject: [PATCH 15/32] Fix typo that causes a failure to update the common directory. (releng #2781) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 6dc788c..6abbd20 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ NAME := amarok SPECFILE = $(firstword $(wildcard *.spec)) define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done +for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done endef MAKEFILE_COMMON := $(shell $(find-makefile-common)) From 7256be849f8491e1ebe68d8643871588e7f57d97 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Fri, 11 Dec 2009 17:38:01 +0000 Subject: [PATCH 16/32] - amarok-2.2.1.90 (2.2.2 beta1) --- .cvsignore | 2 +- ...marok-2.2.1.90-qtscript_not_required.patch | 12 ++++---- amarok.spec | 18 +++++++----- playlist_default_layout_fix.diff | 29 ------------------- sources | 2 +- 5 files changed, 19 insertions(+), 44 deletions(-) rename amarok-2.0.90-qtscript_not_required.patch => amarok-2.2.1.90-qtscript_not_required.patch (53%) delete mode 100644 playlist_default_layout_fix.diff diff --git a/.cvsignore b/.cvsignore index 4d738f0..6971e50 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -amarok-2.2.1.tar.bz2 +amarok-2.2.1.90.tar.bz2 diff --git a/amarok-2.0.90-qtscript_not_required.patch b/amarok-2.2.1.90-qtscript_not_required.patch similarity index 53% rename from amarok-2.0.90-qtscript_not_required.patch rename to amarok-2.2.1.90-qtscript_not_required.patch index 1cf3af7..111c52b 100644 --- a/amarok-2.0.90-qtscript_not_required.patch +++ b/amarok-2.2.1.90-qtscript_not_required.patch @@ -1,13 +1,13 @@ -diff -up amarok-2.0.90/CMakeLists.txt.qtscript_not_required amarok-2.0.90/CMakeLists.txt ---- amarok-2.0.90/CMakeLists.txt.qtscript_not_required 2009-04-06 16:29:12.000000000 -0500 -+++ amarok-2.0.90/CMakeLists.txt 2009-04-10 13:00:07.000000000 -0500 -@@ -38,8 +38,8 @@ if( WITH_PLAYER ) +diff -up amarok-2.2.1.90/CMakeLists.txt.qtscript_not_required amarok-2.2.1.90/CMakeLists.txt +--- amarok-2.2.1.90/CMakeLists.txt.qtscript_not_required 2009-12-10 04:45:37.000000000 -0600 ++++ amarok-2.2.1.90/CMakeLists.txt 2009-12-10 09:42:21.253183224 -0600 +@@ -75,8 +75,8 @@ if( WITH_PLAYER ) - macro_log_feature( KDE4_FOUND "kdelibs" "The toolkit Amarok uses to build" "http://www.kde.org" TRUE "4.2.0" "" ) + macro_log_feature( KDE4_FOUND "kdelibs" "The toolkit Amarok uses to build" "http://www.kde.org" TRUE "4.3.0" "" ) - find_package( QtScriptQtBindings REQUIRED ) - macro_log_feature( QTSCRIPTQTBINDINGS_FOUND "qtscript-qt" "QtScript Qt Bindings" "http://code.google.com/p/qtscriptgenerator/" TRUE "" "" ) -+ macro_optional_find_package(QtScriptQtBindings) ++ macro_optional_find_package( QtScriptQtBindings ) + macro_log_feature( QTSCRIPTQTBINDINGS_FOUND "qtscript-qt" "QtScript Qt Bindings" "http://code.google.com/p/qtscriptgenerator/" FALSE "" "" ) add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS}) diff --git a/amarok.spec b/amarok.spec index 55439cf..77d2774 100644 --- a/amarok.spec +++ b/amarok.spec @@ -1,19 +1,18 @@ Name: amarok Summary: Media player -Version: 2.2.1 -Release: 2%{?dist} +Version: 2.2.1.90 +Release: 1%{?dist} Group: Applications/Multimedia License: GPLv2+ Url: http://amarok.kde.org/ -Source0: http://download.kde.org/stable/amarok/%{version}/src/amarok-%{version}.tar.bz2 +Source0: http://download.kde.org/unstable/amarok/%{version}/src/amarok-%{version}.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -Patch50: amarok-2.0.90-qtscript_not_required.patch +Patch50: amarok-2.2.1.90-qtscript_not_required.patch ## upstream patches -Patch100: playlist_default_layout_fix.diff BuildRequires: curl-devel BuildRequires: desktop-file-utils @@ -34,7 +33,7 @@ BuildRequires: mysql-embedded-devel BuildRequires: qca2-devel BuildRequires: soprano-devel BuildRequires: taglib-devel >= 1.6 -BuildRequires: taglib-extras-devel >= 1.0.0 +BuildRequires: taglib-extras-devel >= 1.0.1 %global kde4_version %((kde4-config --version 2>/dev/null || echo KDE 4.3.0) | grep '^KDE' | cut -d' ' -f2 | cut -d'-' -f1) BuildRequires: qtscriptbindings @@ -83,7 +82,6 @@ Obsoletes: amarok-utilities < 2.0.96 %setup -q %patch50 -p1 -b .qtscript_not_required -%patch100 -p1 -b .playlist_default_layout_fix %build @@ -175,6 +173,12 @@ fi %changelog +* Thu Dec 10 2009 Rex Dieter - 2.2.1.90-1 +- amarok-2.2.1.90 (2.2.2 beta1) + +* Mon Nov 23 2009 Rex Dieter - 2.2.1-3 +- rebuild (for qt-4.6.0-rc1, f13+) + * Mon Nov 16 2009 Rex Dieter 2.2.1-2 - playlist_default_layout_fix.diff (kde#211717) diff --git a/playlist_default_layout_fix.diff b/playlist_default_layout_fix.diff deleted file mode 100644 index 106f659..0000000 --- a/playlist_default_layout_fix.diff +++ /dev/null @@ -1,29 +0,0 @@ -diff --git a/src/playlist/layouts/LayoutManager.cpp b/src/playlist/layouts/LayoutManager.cpp -index b2903ee..541f989 100644 ---- a/src/playlist/layouts/LayoutManager.cpp -+++ b/src/playlist/layouts/LayoutManager.cpp -@@ -55,6 +55,8 @@ LayoutManager::LayoutManager() - - KConfigGroup config = Amarok::config("Playlist Layout"); - m_activeLayout = config.readEntry( "CurrentLayout", "Default" ); -+ if( !layouts().contains( m_activeLayout ) ) -+ m_activeLayout = "Default"; - Playlist::ModelStack::instance()->top()->setGroupingCategory( activeLayout().groupBy() ); - } - -diff --git a/src/playlist/layouts/PlaylistLayoutEditDialog.cpp b/src/playlist/layouts/PlaylistLayoutEditDialog.cpp -index 166879c..03fd529 100644 ---- a/src/playlist/layouts/PlaylistLayoutEditDialog.cpp -+++ b/src/playlist/layouts/PlaylistLayoutEditDialog.cpp -@@ -440,7 +440,10 @@ void PlaylistLayoutEditDialog::reject() //SLOT - DEBUG_BLOCK - - debug() << "Applying initial layout: " << m_firstActiveLayout; -- LayoutManager::instance()->setActiveLayout( m_firstActiveLayout ); -+ if( layoutListWidget->findItems( m_firstActiveLayout, Qt::MatchExactly ).isEmpty() ) -+ LayoutManager::instance()->setActiveLayout( "Default" ); -+ else -+ LayoutManager::instance()->setActiveLayout( m_firstActiveLayout ); - - QDialog::reject(); - } diff --git a/sources b/sources index 4ba33cd..95ee861 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -4f6f45f0c25f85f2a2a1fff169ac7193 amarok-2.2.1.tar.bz2 +0fb6c98618c91159a26e3f2e837ef132 amarok-2.2.1.90.tar.bz2 From abbc7f1b1951309665dde6f11a95da59e6383360 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Thu, 7 Jan 2010 00:36:35 +0000 Subject: [PATCH 17/32] - amarok-2.2.2 --- .cvsignore | 2 +- amarok-2.2.2-no_var_tracking.patch | 12 ++++++++++++ amarok.spec | 10 +++++++++- sources | 2 +- 4 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 amarok-2.2.2-no_var_tracking.patch diff --git a/.cvsignore b/.cvsignore index 6971e50..fada88c 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -amarok-2.2.1.90.tar.bz2 +amarok-2.2.2.tar.bz2 diff --git a/amarok-2.2.2-no_var_tracking.patch b/amarok-2.2.2-no_var_tracking.patch new file mode 100644 index 0000000..5b0c658 --- /dev/null +++ b/amarok-2.2.2-no_var_tracking.patch @@ -0,0 +1,12 @@ +diff -up amarok-2.2.2/src/CMakeLists.txt.no_var_tracking amarok-2.2.2/src/CMakeLists.txt +--- amarok-2.2.2/src/CMakeLists.txt.no_var_tracking 2010-01-06 16:19:46.000000000 -0600 ++++ amarok-2.2.2/src/CMakeLists.txt 2010-01-06 17:43:11.257848590 -0600 +@@ -714,6 +714,8 @@ set( amaroklib_DEPENDS "amarokpud" ) + + kde4_add_kcfg_files(amaroklib_LIB_SRCS amarokconfig.kcfgc) + ++set_source_files_properties(amarokconfig.cpp PROPERTIES COMPILE_FLAGS -fno-var-tracking-assignments ) ++ + kde4_add_ui_files(amaroklib_LIB_SRCS + aboutdialog/OcsPersonItem.ui + dialogs/EditCoverSearchDialog.ui diff --git a/amarok.spec b/amarok.spec index 77d2774..0a97e4b 100644 --- a/amarok.spec +++ b/amarok.spec @@ -1,7 +1,7 @@ Name: amarok Summary: Media player -Version: 2.2.1.90 +Version: 2.2.2 Release: 1%{?dist} Group: Applications/Multimedia @@ -10,6 +10,8 @@ Url: http://amarok.kde.org/ Source0: http://download.kde.org/unstable/amarok/%{version}/src/amarok-%{version}.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +Patch1: amarok-2.2.2-no_var_tracking.patch + Patch50: amarok-2.2.1.90-qtscript_not_required.patch ## upstream patches @@ -81,6 +83,9 @@ Obsoletes: amarok-utilities < 2.0.96 %prep %setup -q +%if 0%{?fedora} > 11 || 0%{?rhel} > 5 +%patch1 -p1 -b .no_var_tracking +%endif %patch50 -p1 -b .qtscript_not_required @@ -173,6 +178,9 @@ fi %changelog +* Wed Jan 05 2010 Rex Dieter - 2.2.2-1 +- amarok-2.2.2 + * Thu Dec 10 2009 Rex Dieter - 2.2.1.90-1 - amarok-2.2.1.90 (2.2.2 beta1) diff --git a/sources b/sources index 95ee861..27ab552 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -0fb6c98618c91159a26e3f2e837ef132 amarok-2.2.1.90.tar.bz2 +c2c4ae2f2ff7154a064b554cdee557a9 amarok-2.2.2.tar.bz2 From 712199aa136a0b9b40754a953eb3b072ae307f44 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Fri, 8 Jan 2010 19:08:34 +0000 Subject: [PATCH 18/32] - amarok-2.2.2 --- amarok-2.2.2-kde#220532.patch | 202 ++++++++++++++++++++++++++++++++++ amarok.spec | 5 +- 2 files changed, 206 insertions(+), 1 deletion(-) create mode 100644 amarok-2.2.2-kde#220532.patch diff --git a/amarok-2.2.2-kde#220532.patch b/amarok-2.2.2-kde#220532.patch new file mode 100644 index 0000000..31ccb53 --- /dev/null +++ b/amarok-2.2.2-kde#220532.patch @@ -0,0 +1,202 @@ +Jeff Mitchell +Fixes a crash that can occur during scanning. This patch should be applied to 2.2.2 vanilla. + + +diff --git a/src/collection/sqlcollection/ScanResultProcessor.cpp b/src/collection/sqlcollection/ScanResultProcessor.cpp +index b680623..a8806b3 100644 +--- a/src/collection/sqlcollection/ScanResultProcessor.cpp ++++ b/src/collection/sqlcollection/ScanResultProcessor.cpp +@@ -43,18 +43,33 @@ ScanResultProcessor::~ScanResultProcessor() + { + //everything has a URL, so enough to just delete from here + foreach( QStringList *list, m_urlsHashByUid ) +- delete list; ++ { ++ if( list ) ++ delete list; ++ } + foreach( QLinkedList *list, m_albumsHashByName ) + { +- foreach( QStringList *slist, *list ) +- delete slist; +- delete list; ++ if( list ) ++ { ++ foreach( QStringList *slist, *list ) ++ { ++ if( slist ) ++ delete slist; ++ } ++ delete list; ++ } + } + foreach( QLinkedList *list, m_tracksHashByAlbum ) + { +- foreach( QStringList *slist, *list ) +- delete slist; +- delete list; ++ if( list ) ++ { ++ foreach( QStringList *slist, *list ) ++ { ++ if( slist ) ++ delete slist; ++ } ++ delete list; ++ } + } + } + +@@ -68,10 +83,10 @@ void + ScanResultProcessor::addDirectory( const QString &dir, uint mtime ) + { + DEBUG_BLOCK +- debug() << "SRP::addDirectory on " << dir << " with mtime " << mtime; ++ //debug() << "SRP::addDirectory on " << dir << " with mtime " << mtime; + if( dir.isEmpty() ) + { +- debug() << "got directory with no path from the scanner, not adding"; ++ //debug() << "got directory with no path from the scanner, not adding"; + return; + } + setupDatabase(); +@@ -419,7 +434,15 @@ ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) + + //urlId will take care of the urls table part of AFT + int url = urlId( path, uid ); +- ++/* ++ foreach( QString key, m_urlsHashByUid.keys() ) ++ debug() << "Key: " << key << ", list: " << *m_urlsHashByUid[key]; ++ foreach( int key, m_urlsHashById.keys() ) ++ debug() << "Key: " << key << ", list: " << *m_urlsHashById[key]; ++ typedef QPair blahType; //QFOREACH is stupid when it comes to QPairs ++ foreach( blahType key, m_urlsHashByLocation.keys() ) ++ debug() << "Key: " << key << ", list: " << *m_urlsHashByLocation[key]; ++*/ + QStringList *trackList = new QStringList(); + int id = m_nextTrackNum; + //debug() << "Appending new track number with tracknum: " << id; +@@ -470,7 +493,7 @@ ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) + //insert into hashes + if( m_tracksHashByUrl.contains( url ) && m_tracksHashByUrl[url] != 0 ) + { +- //debug() << "m_tracksHashByUrl contains the url!"; ++ //debug() << "m_tracksHashByUrl already contains url " << url; + //need to replace, not overwrite/add a new one + QStringList *oldValues = m_tracksHashByUrl[url]; + QString oldId = oldValues->at( 0 ); +@@ -491,7 +514,12 @@ ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) + } + + if( m_tracksHashByAlbum.contains( album ) && m_tracksHashByAlbum[album] != 0 ) +- m_tracksHashByAlbum[album]->append( trackList ); ++ { ++ //contains isn't the fastest on linked lists, but in reality this is on the order of maybe ++ //ten quick pointer comparisons per track on average...probably lower ++ if( !m_tracksHashByAlbum[album]->contains( trackList ) ) ++ m_tracksHashByAlbum[album]->append( trackList ); ++ } + else + { + QLinkedList *list = new QLinkedList(); +@@ -631,7 +659,10 @@ ScanResultProcessor::albumInsert( const QString &album, int albumArtistId ) + albumList->append( QString() ); + m_albumsHashById[returnedNum] = albumList; + if( m_albumsHashByName.contains( album ) && m_albumsHashByName[album] != 0 ) +- m_albumsHashByName[album]->append( albumList ); ++ { ++ if( !m_albumsHashByName[album]->contains( albumList ) ) ++ m_albumsHashByName[album]->append( albumList ); ++ } + else + { + QLinkedList *list = new QLinkedList(); +@@ -645,8 +676,8 @@ ScanResultProcessor::albumInsert( const QString &album, int albumArtistId ) + int + ScanResultProcessor::urlId( const QString &url, const QString &uid ) + { +- /* + DEBUG_BLOCK ++/* + foreach( QString key, m_urlsHashByUid.keys() ) + debug() << "Key: " << key << ", list: " << *m_urlsHashByUid[key]; + foreach( int key, m_urlsHashById.keys() ) +@@ -654,8 +685,8 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) + typedef QPair blahType; //QFOREACH is stupid when it comes to QPairs + foreach( blahType key, m_urlsHashByLocation.keys() ) + debug() << "Key: " << key << ", list: " << *m_urlsHashByLocation[key]; +- */ +- ++*/ ++ + QFileInfo fileInfo( url ); + const QString dir = fileInfo.absoluteDir().absolutePath(); + int dirId = directoryId( dir ); +@@ -665,6 +696,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) + QPair locationPair( deviceId, rpath ); + //debug() << "in urlId with url = " << url << " and uid = " << uid; + //debug() << "checking locationPair " << locationPair; ++/* + if( m_urlsHashByLocation.contains( locationPair ) ) + { + QStringList values; +@@ -674,6 +706,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) + values << "zero"; + //debug() << "m_urlsHashByLocation contains it! It is " << values; + } ++*/ + QStringList currUrlIdValues; + if( m_urlsHashByUid.contains( uid ) && m_urlsHashByUid[uid] != 0 ) + currUrlIdValues = *m_urlsHashByUid[uid]; +@@ -717,6 +750,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) + //debug() << "m_urlsHashByUid contains this UID, updating deviceId and path"; + QStringList *list = m_urlsHashByUid[uid]; + //debug() << "list from UID hash is " << list << " with values " << *list; ++ QPair oldLocationPair( list->at( 1 ).toInt(), list->at( 2 ) ); + list->replace( 1, QString::number( deviceId ) ); + list->replace( 2, rpath ); + list->replace( 3, QString::number( dirId ) ); +@@ -737,6 +771,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) + delete oldList; + } + m_urlsHashByLocation[locationPair] = list; ++ m_urlsHashByLocation.remove( oldLocationPair ); + } + m_permanentTablesUrlUpdates.insert( uid, url ); + m_changedUrls.insert( uid, QPair( MountPointManager::instance()->getAbsolutePath( currUrlIdValues[1].toInt(), currUrlIdValues[2] ), url ) ); +@@ -751,6 +786,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) + { + QStringList *list = m_urlsHashByLocation[locationPair]; + //debug() << "Replacing hash " << list->at( 4 ) << " with " << uid; ++ QString oldId = list->at( 4 ); + list->replace( 4, uid ); + if( m_urlsHashByUid.contains( uid ) + && m_urlsHashByUid[uid] != 0 +@@ -762,6 +798,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) + delete oldList; + } + m_urlsHashByUid[uid] = list; ++ m_urlsHashByUid.remove( oldId ); + } + m_permanentTablesUidUpdates.insert( url, uid ); + m_changedUids.insert( currUrlIdValues[4], uid ); +@@ -1167,6 +1204,18 @@ ScanResultProcessor::copyHashesToTempTables() + foreach( blahType key, m_urlsHashByLocation.keys() ) + debug() << "Key: " << key << ", list: " << *m_urlsHashByLocation[key]; + debug() << "Next album num: " << m_nextAlbumNum; ++ ++ foreach( int key, m_tracksHashById.keys() ) ++ debug() << "Key: " << key << ", list: " << *m_tracksHashById[key]; ++ foreach( int key, m_tracksHashByUrl.keys() ) ++ debug() << "Key: " << key << ", list: " << *m_tracksHashByUrl[key]; ++ typedef QLinkedList blahType; //QFOREACH is stupid when it comes to QPairs ++ foreach( int key, m_tracksHashByAlbum.keys() ) ++ { ++ debug() << "Key: " << key; ++ foreach( QStringList* item, *m_tracksHashByAlbum[key] ) ++ debug() << "list: " << *item; ++ } + */ + + DEBUG_BLOCK diff --git a/amarok.spec b/amarok.spec index 0a97e4b..38a466d 100644 --- a/amarok.spec +++ b/amarok.spec @@ -2,7 +2,7 @@ Name: amarok Summary: Media player Version: 2.2.2 -Release: 1%{?dist} +Release: 2%{?dist} Group: Applications/Multimedia License: GPLv2+ @@ -15,6 +15,8 @@ Patch1: amarok-2.2.2-no_var_tracking.patch Patch50: amarok-2.2.1.90-qtscript_not_required.patch ## upstream patches +# http://bugs.kde.org/220532 +Patch100: amarok-2.2.2-kde#220532.patch BuildRequires: curl-devel BuildRequires: desktop-file-utils @@ -87,6 +89,7 @@ Obsoletes: amarok-utilities < 2.0.96 %patch1 -p1 -b .no_var_tracking %endif %patch50 -p1 -b .qtscript_not_required +%patch100 -p1 -b .kde#220532 %build From 7a10345c49b62d7121991efc6f4d424c2d09c47b Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Sun, 10 Jan 2010 14:10:38 +0000 Subject: [PATCH 19/32] - collection scan crash patch, take 2 (kde#220532) --- amarok-2.2.2-kde#220532.patch | 233 ++++++++++++++++++++++++++++++---- amarok.spec | 8 +- 2 files changed, 214 insertions(+), 27 deletions(-) diff --git a/amarok-2.2.2-kde#220532.patch b/amarok-2.2.2-kde#220532.patch index 31ccb53..b095f27 100644 --- a/amarok-2.2.2-kde#220532.patch +++ b/amarok-2.2.2-kde#220532.patch @@ -1,19 +1,29 @@ +Fixes potential crashes during scanning discovered in 2.2.2 after tagging. Jeff Mitchell -Fixes a crash that can occur during scanning. This patch should be applied to 2.2.2 vanilla. diff --git a/src/collection/sqlcollection/ScanResultProcessor.cpp b/src/collection/sqlcollection/ScanResultProcessor.cpp -index b680623..a8806b3 100644 +index b680623..68b31df 100644 --- a/src/collection/sqlcollection/ScanResultProcessor.cpp +++ b/src/collection/sqlcollection/ScanResultProcessor.cpp -@@ -43,18 +43,33 @@ ScanResultProcessor::~ScanResultProcessor() +@@ -42,19 +42,59 @@ ScanResultProcessor::ScanResultProcessor( SqlCollection *collection ) + ScanResultProcessor::~ScanResultProcessor() { //everything has a URL, so enough to just delete from here ++ QSet currSet; //prevent double deletes foreach( QStringList *list, m_urlsHashByUid ) - delete list; + { + if( list ) -+ delete list; ++ { ++ if( !currSet.contains( list ) ) ++ { ++ delete list; ++ currSet.insert( list ); ++ } ++ } ++ else ++ debug() << "GAAH! Tried to double-delete a value in m_urlsHashByUid"; + } foreach( QLinkedList *list, m_albumsHashByName ) { @@ -25,7 +35,15 @@ index b680623..a8806b3 100644 + foreach( QStringList *slist, *list ) + { + if( slist ) -+ delete slist; ++ { ++ if( !currSet.contains( slist ) ) ++ { ++ delete slist; ++ currSet.insert( slist ); ++ } ++ else ++ debug() << "GAAH! Tried to double-delete a value in m_albumsHashByName"; ++ } + } + delete list; + } @@ -40,18 +58,28 @@ index b680623..a8806b3 100644 + foreach( QStringList *slist, *list ) + { + if( slist ) -+ delete slist; ++ { ++ if( !currSet.contains( slist ) ) ++ { ++ delete slist; ++ currSet.insert( slist ); ++ } ++ else ++ debug() << "GAAH! Tried to double-delete a value in m_tracksHashByAlbum"; ++ } + } + delete list; + } } } -@@ -68,10 +83,10 @@ void +@@ -67,11 +107,11 @@ ScanResultProcessor::setScanType( ScanType type ) + void ScanResultProcessor::addDirectory( const QString &dir, uint mtime ) { - DEBUG_BLOCK +- DEBUG_BLOCK - debug() << "SRP::addDirectory on " << dir << " with mtime " << mtime; ++ //DEBUG_BLOCK + //debug() << "SRP::addDirectory on " << dir << " with mtime " << mtime; if( dir.isEmpty() ) { @@ -60,7 +88,90 @@ index b680623..a8806b3 100644 return; } setupDatabase(); -@@ -419,7 +434,15 @@ ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) +@@ -254,7 +294,7 @@ ScanResultProcessor::rollback() + void + ScanResultProcessor::processDirectory( const QList &data ) + { +-// DEBUG_BLOCK ++ //DEBUG_BLOCK + setupDatabase(); + //using the following heuristics: + //if more than one album is in the dir, use the artist of each track as albumartist +@@ -274,24 +314,54 @@ ScanResultProcessor::processDirectory( const QList &data ) + if( row.value( Field::ALBUM ).toString() != album ) + multipleAlbums = true; + } ++ + if( multipleAlbums || album.isEmpty() || artists.size() == 1 ) + { + foreach( const QVariantMap &row, data ) + { +- int artist = genericId( &m_artists, row.value( Field::ARTIST ).toString(), &m_nextArtistNum ); +- addTrack( row, artist ); ++ QString uid = row.value( Field::UNIQUEID ).toString(); ++ if( m_uidsSeenThisScan.contains( uid ) ) ++ { ++ QString originalLocation = ( ( m_urlsHashByUid.contains( uid ) && ++ m_urlsHashByUid[uid] != 0 ) ? ++ MountPointManager::instance()->getAbsolutePath( m_urlsHashByUid[uid]->at( 1 ).toInt(), m_urlsHashByUid[uid]->at( 2 ) ) : "(unknown)" ); ++ debug() << "Skipping file with uniqueid " << uid << " as it was already seen this scan," << ++ "file is at " << row.value( Field::URL ).toString() << ", original file is at " << originalLocation; ++ } ++ else ++ { ++ int artist = genericId( &m_artists, row.value( Field::ARTIST ).toString(), &m_nextArtistNum ); ++ //debug() << "artist found = " << artist; ++ addTrack( row, artist ); ++ m_uidsSeenThisScan.insert( uid ); ++ } + } + } + else + { + QString albumArtist = findAlbumArtist( artists, data.count() ); ++ //debug() << "albumArtist found = " << albumArtist; + //an empty string means that no albumartist was found + int artist = albumArtist.isEmpty() ? 0 : genericId( &m_artists, albumArtist, &m_nextArtistNum ); ++ //debug() << "artist found = " << artist; + + //debug() << "albumartist " << albumArtist << "for artists" << artists; + foreach( const QVariantMap &row, data ) + { +- addTrack( row, artist ); ++ QString uid = row.value( Field::UNIQUEID ).toString(); ++ if( m_uidsSeenThisScan.contains( uid ) ) ++ { ++ QString originalLocation = ( ( m_urlsHashByUid.contains( uid ) && ++ m_urlsHashByUid[uid] != 0 ) ? ++ MountPointManager::instance()->getAbsolutePath( m_urlsHashByUid[uid]->at( 1 ).toInt(), m_urlsHashByUid[uid]->at( 2 ) ) : "(unknown)" ); ++ debug() << "Skipping file with uniqueid " << uid << " as it was already seen this scan," << ++ "file is at " << row.value( Field::URL ).toString() << ", original file is at " << originalLocation; ++ } ++ else ++ { ++ addTrack( row, artist ); ++ m_uidsSeenThisScan.insert( uid ); ++ } + } + } + } +@@ -299,6 +369,7 @@ ScanResultProcessor::processDirectory( const QList &data ) + QString + ScanResultProcessor::findAlbumArtist( const QSet &artists, int trackCount ) const + { ++ //DEBUG_BLOCK + QMap artistCount; + bool featuring; + QStringList trackArtists; +@@ -371,6 +442,7 @@ void + ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) + { + //DEBUG_BLOCK ++ //debug() << "albumArtistId = " << albumArtistId; + //amarok 1 stored all tracks of a compilation in different directories. + //when using its "Organize Collection" feature + //try to detect these cases +@@ -419,7 +491,15 @@ ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) //urlId will take care of the urls table part of AFT int url = urlId( path, uid ); @@ -77,7 +188,7 @@ index b680623..a8806b3 100644 QStringList *trackList = new QStringList(); int id = m_nextTrackNum; //debug() << "Appending new track number with tracknum: " << id; -@@ -470,7 +493,7 @@ ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) +@@ -470,7 +550,7 @@ ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) //insert into hashes if( m_tracksHashByUrl.contains( url ) && m_tracksHashByUrl[url] != 0 ) { @@ -86,21 +197,42 @@ index b680623..a8806b3 100644 //need to replace, not overwrite/add a new one QStringList *oldValues = m_tracksHashByUrl[url]; QString oldId = oldValues->at( 0 ); -@@ -491,7 +514,12 @@ ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) +@@ -490,8 +570,24 @@ ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) + m_tracksHashById.insert( id, trackList ); } ++ //debug() << "album = " << album; ++ if( m_tracksHashByAlbum.contains( album ) && m_tracksHashByAlbum[album] != 0 ) - m_tracksHashByAlbum[album]->append( trackList ); + { + //contains isn't the fastest on linked lists, but in reality this is on the order of maybe + //ten quick pointer comparisons per track on average...probably lower ++ //debug() << "trackList is " << trackList; + if( !m_tracksHashByAlbum[album]->contains( trackList ) ) ++ { ++ //debug() << "appending trackList to m_tracksHashByAlbum"; + m_tracksHashByAlbum[album]->append( trackList ); ++ } ++ else ++ { ++ //debug() << "not appending trackList to m_tracksHashByAlbum"; ++ } ++ + } else { QLinkedList *list = new QLinkedList(); -@@ -631,7 +659,10 @@ ScanResultProcessor::albumInsert( const QString &album, int albumArtistId ) +@@ -595,6 +691,8 @@ ScanResultProcessor::albumId( const QString &album, int albumArtistId ) + QLinkedList *list = m_albumsHashByName[album]; + foreach( QStringList *slist, *list ) + { ++ //debug() << "albumArtistId = " << albumArtistId; ++ //debug() << "Checking list: " << *slist; + if( slist->at( 2 ).isEmpty() && albumArtistId == 0 ) + { + //debug() << "artist is empty and albumArtistId = 0, returning " << slist->at( 0 ); +@@ -631,7 +729,10 @@ ScanResultProcessor::albumInsert( const QString &album, int albumArtistId ) albumList->append( QString() ); m_albumsHashById[returnedNum] = albumList; if( m_albumsHashByName.contains( album ) && m_albumsHashByName[album] != 0 ) @@ -112,28 +244,26 @@ index b680623..a8806b3 100644 else { QLinkedList *list = new QLinkedList(); -@@ -645,8 +676,8 @@ ScanResultProcessor::albumInsert( const QString &album, int albumArtistId ) +@@ -645,7 +746,7 @@ ScanResultProcessor::albumInsert( const QString &album, int albumArtistId ) int ScanResultProcessor::urlId( const QString &url, const QString &uid ) { - /* - DEBUG_BLOCK +/* + DEBUG_BLOCK foreach( QString key, m_urlsHashByUid.keys() ) debug() << "Key: " << key << ", list: " << *m_urlsHashByUid[key]; - foreach( int key, m_urlsHashById.keys() ) -@@ -654,8 +685,8 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) +@@ -654,8 +755,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) typedef QPair blahType; //QFOREACH is stupid when it comes to QPairs foreach( blahType key, m_urlsHashByLocation.keys() ) debug() << "Key: " << key << ", list: " << *m_urlsHashByLocation[key]; - */ - +*/ -+ QFileInfo fileInfo( url ); const QString dir = fileInfo.absoluteDir().absolutePath(); int dirId = directoryId( dir ); -@@ -665,6 +696,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) +@@ -665,6 +765,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) QPair locationPair( deviceId, rpath ); //debug() << "in urlId with url = " << url << " and uid = " << uid; //debug() << "checking locationPair " << locationPair; @@ -141,7 +271,7 @@ index b680623..a8806b3 100644 if( m_urlsHashByLocation.contains( locationPair ) ) { QStringList values; -@@ -674,6 +706,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) +@@ -674,6 +775,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) values << "zero"; //debug() << "m_urlsHashByLocation contains it! It is " << values; } @@ -149,7 +279,7 @@ index b680623..a8806b3 100644 QStringList currUrlIdValues; if( m_urlsHashByUid.contains( uid ) && m_urlsHashByUid[uid] != 0 ) currUrlIdValues = *m_urlsHashByUid[uid]; -@@ -717,6 +750,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) +@@ -717,6 +819,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) //debug() << "m_urlsHashByUid contains this UID, updating deviceId and path"; QStringList *list = m_urlsHashByUid[uid]; //debug() << "list from UID hash is " << list << " with values " << *list; @@ -157,7 +287,7 @@ index b680623..a8806b3 100644 list->replace( 1, QString::number( deviceId ) ); list->replace( 2, rpath ); list->replace( 3, QString::number( dirId ) ); -@@ -737,6 +771,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) +@@ -737,6 +840,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) delete oldList; } m_urlsHashByLocation[locationPair] = list; @@ -165,7 +295,7 @@ index b680623..a8806b3 100644 } m_permanentTablesUrlUpdates.insert( uid, url ); m_changedUrls.insert( uid, QPair( MountPointManager::instance()->getAbsolutePath( currUrlIdValues[1].toInt(), currUrlIdValues[2] ), url ) ); -@@ -751,6 +786,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) +@@ -751,6 +855,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) { QStringList *list = m_urlsHashByLocation[locationPair]; //debug() << "Replacing hash " << list->at( 4 ) << " with " << uid; @@ -173,7 +303,7 @@ index b680623..a8806b3 100644 list->replace( 4, uid ); if( m_urlsHashByUid.contains( uid ) && m_urlsHashByUid[uid] != 0 -@@ -762,6 +798,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) +@@ -762,6 +867,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) delete oldList; } m_urlsHashByUid[uid] = list; @@ -181,7 +311,47 @@ index b680623..a8806b3 100644 } m_permanentTablesUidUpdates.insert( url, uid ); m_changedUids.insert( currUrlIdValues[4], uid ); -@@ -1167,6 +1204,18 @@ ScanResultProcessor::copyHashesToTempTables() +@@ -855,7 +961,8 @@ ScanResultProcessor::directoryId( const QString &dir ) + int + ScanResultProcessor::checkExistingAlbums( const QString &album ) + { +-// DEBUG_BLOCK ++ //DEBUG_BLOCK ++ //debug() << "looking for album " << album; + // "Unknown" albums shouldn't be handled as compilations + if( album.isEmpty() ) + return 0; +@@ -865,7 +972,10 @@ ScanResultProcessor::checkExistingAlbums( const QString &album ) + //it's probably a compilation. + //this handles A1 compilations that were automatically organized by Amarok + if( !m_albumsHashByName.contains( album ) || m_albumsHashByName[album] == 0 ) ++ { ++ //debug() << "hashByName doesn't contain album, or it's zero"; + return 0; ++ } + + QStringList trackIds; + QLinkedList *llist = m_albumsHashByName[album]; +@@ -915,8 +1025,10 @@ ScanResultProcessor::checkExistingAlbums( const QString &album ) + } + } + ++ //debug() << "trackIds = " << trackIds; + if( trackIds.isEmpty() ) + { ++ //debug() << "trackIds empty, returning zero"; + return 0; + } + else +@@ -933,6 +1045,7 @@ ScanResultProcessor::checkExistingAlbums( const QString &album ) + list->replace( 3, compilationString ); + } + } ++ //debug() << "returning " << compilationId; + return compilationId; + } + } +@@ -1167,6 +1280,17 @@ ScanResultProcessor::copyHashesToTempTables() foreach( blahType key, m_urlsHashByLocation.keys() ) debug() << "Key: " << key << ", list: " << *m_urlsHashByLocation[key]; debug() << "Next album num: " << m_nextAlbumNum; @@ -190,13 +360,24 @@ index b680623..a8806b3 100644 + debug() << "Key: " << key << ", list: " << *m_tracksHashById[key]; + foreach( int key, m_tracksHashByUrl.keys() ) + debug() << "Key: " << key << ", list: " << *m_tracksHashByUrl[key]; -+ typedef QLinkedList blahType; //QFOREACH is stupid when it comes to QPairs + foreach( int key, m_tracksHashByAlbum.keys() ) + { + debug() << "Key: " << key; + foreach( QStringList* item, *m_tracksHashByAlbum[key] ) -+ debug() << "list: " << *item; ++ debug() << "list: " << item << " is " << *item; + } */ DEBUG_BLOCK +diff --git a/src/collection/sqlcollection/ScanResultProcessor.h b/src/collection/sqlcollection/ScanResultProcessor.h +index 71afc98..c7f200f 100644 +--- a/src/collection/sqlcollection/ScanResultProcessor.h ++++ b/src/collection/sqlcollection/ScanResultProcessor.h +@@ -94,6 +94,7 @@ class ScanResultProcessor : public QObject + QMap m_directories; + QMap > > m_imageMap; + ++ QSet m_uidsSeenThisScan; + QHash m_filesInDirs; + + TrackUrls m_changedUids; //not really track urls diff --git a/amarok.spec b/amarok.spec index 38a466d..9592034 100644 --- a/amarok.spec +++ b/amarok.spec @@ -2,7 +2,7 @@ Name: amarok Summary: Media player Version: 2.2.2 -Release: 2%{?dist} +Release: 3%{?dist} Group: Applications/Multimedia License: GPLv2+ @@ -181,6 +181,12 @@ fi %changelog +* Sun Jan 10 2010 Rex Dieter - 2.2.2-3 +- collection scan crash patch, take 2 (kde#220532) + +* Fri Jan 08 2010 Rex Dieter - 2.2.2-2 +- collection scan crash patch (kde#220532) + * Wed Jan 05 2010 Rex Dieter - 2.2.2-1 - amarok-2.2.2 From 7637f5962ac2f569454c06dc561ad8e73194bee9 Mon Sep 17 00:00:00 2001 From: thomasj Date: Thu, 11 Mar 2010 09:08:00 +0000 Subject: [PATCH 20/32] New upstream source 2.3.0 --- .cvsignore | 2 +- amarok.spec | 19 +++++++++++-------- sources | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/.cvsignore b/.cvsignore index fada88c..ba488fe 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -amarok-2.2.2.tar.bz2 +amarok-2.3.0.tar.bz2 diff --git a/amarok.spec b/amarok.spec index 9592034..d083b37 100644 --- a/amarok.spec +++ b/amarok.spec @@ -1,8 +1,8 @@ Name: amarok Summary: Media player -Version: 2.2.2 -Release: 3%{?dist} +Version: 2.3.0 +Release: 1%{?dist} Group: Applications/Multimedia License: GPLv2+ @@ -10,13 +10,13 @@ Url: http://amarok.kde.org/ Source0: http://download.kde.org/unstable/amarok/%{version}/src/amarok-%{version}.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -Patch1: amarok-2.2.2-no_var_tracking.patch +## Patch1: amarok-2.2.2-no_var_tracking.patch Patch50: amarok-2.2.1.90-qtscript_not_required.patch ## upstream patches # http://bugs.kde.org/220532 -Patch100: amarok-2.2.2-kde#220532.patch +# Patch100: amarok-2.2.2-kde#220532.patch BuildRequires: curl-devel BuildRequires: desktop-file-utils @@ -85,11 +85,11 @@ Obsoletes: amarok-utilities < 2.0.96 %prep %setup -q -%if 0%{?fedora} > 11 || 0%{?rhel} > 5 -%patch1 -p1 -b .no_var_tracking -%endif +# %if 0%{?fedora} > 11 || 0%{?rhel} > 5 +# %patch1 -p1 -b .no_var_tracking +# %endif %patch50 -p1 -b .qtscript_not_required -%patch100 -p1 -b .kde#220532 +# %patch100 -p1 -b .kde#220532 %build @@ -181,6 +181,9 @@ fi %changelog +* Thu Mar 11 2010 Thomas Janssen 2.3.0-1 +- amarok 2.3.0 + * Sun Jan 10 2010 Rex Dieter - 2.2.2-3 - collection scan crash patch, take 2 (kde#220532) diff --git a/sources b/sources index 27ab552..153811c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -c2c4ae2f2ff7154a064b554cdee557a9 amarok-2.2.2.tar.bz2 +fc672a2848e36b3b44eb81dd1466e4f4 amarok-2.3.0.tar.bz2 From ab39d705ed3f1e6d84ffca14fef975c588d777d2 Mon Sep 17 00:00:00 2001 From: thomasj Date: Thu, 11 Mar 2010 09:42:14 +0000 Subject: [PATCH 21/32] added missing libamarok-sqlcollection* --- amarok.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/amarok.spec b/amarok.spec index d083b37..e8df2cb 100644 --- a/amarok.spec +++ b/amarok.spec @@ -174,6 +174,7 @@ fi %{_kde4_libdir}/libamaroklib.so.1* %{_kde4_libdir}/libamarokocsclient.so.4* %{_kde4_libdir}/libamarokpud.so.1* +%{_kde4_libdir}/libamarok-sqlcollection.so.1* %files utils -f amarokcollectionscanner_qt.lang %defattr(-,root,root,-) From 22e3fbedaa291ce20f6087fb6f6c6e51b24f3e5a Mon Sep 17 00:00:00 2001 From: thomasj Date: Thu, 11 Mar 2010 10:08:29 +0000 Subject: [PATCH 22/32] I need glasses, removed libamarok-sqlcollection.so --- amarok.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amarok.spec b/amarok.spec index e8df2cb..584574c 100644 --- a/amarok.spec +++ b/amarok.spec @@ -114,7 +114,7 @@ cat amarokpkg.lang >> amarok.lang cat amarok_scriptengine_qscript.lang >> amarok.lang # unpackaged files -rm -f %{buildroot}%{_kde4_libdir}/libamarok{_taglib,lib,plasma,pud,ocsclient}.so +rm -f %{buildroot}%{_kde4_libdir}/libamarok{-sqlcollection,_taglib,lib,plasma,pud,ocsclient}.so %check From bc47feb2e51607152a9e04e661146664c2f92d37 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Mon, 22 Mar 2010 16:18:28 +0000 Subject: [PATCH 23/32] - workaround info applet crasher (kde#227639,kde#229756) --- ...ed8c667a076daa21fdf8360708813f1bf9e0.patch | 76 ++++ amarok-2.2.2-kde#220532.patch | 383 ------------------ amarok-2.2.2-no_var_tracking.patch | 12 - amarok.spec | 37 +- 4 files changed, 100 insertions(+), 408 deletions(-) create mode 100644 a62fed8c667a076daa21fdf8360708813f1bf9e0.patch delete mode 100644 amarok-2.2.2-kde#220532.patch delete mode 100644 amarok-2.2.2-no_var_tracking.patch diff --git a/a62fed8c667a076daa21fdf8360708813f1bf9e0.patch b/a62fed8c667a076daa21fdf8360708813f1bf9e0.patch new file mode 100644 index 0000000..03e9257 --- /dev/null +++ b/a62fed8c667a076daa21fdf8360708813f1bf9e0.patch @@ -0,0 +1,76 @@ +From a62fed8c667a076daa21fdf8360708813f1bf9e0 Mon Sep 17 00:00:00 2001 +From: Nikolaj Hald Nielsen +Date: Mon, 22 Mar 2010 09:46:32 +0100 +Subject: [PATCH] Work around crash in the Info applet caused by a bug in certain versions of Qt. + +BUG: 229756 +BUG: 227639 +--- + src/context/applets/info/InfoApplet.cpp | 19 +++++++++++++------ + src/context/applets/info/InfoApplet.h | 2 ++ + 2 files changed, 15 insertions(+), 6 deletions(-) + +diff --git a/src/context/applets/info/InfoApplet.cpp b/src/context/applets/info/InfoApplet.cpp +index 166da4c..e415e98 100644 +--- a/src/context/applets/info/InfoApplet.cpp ++++ b/src/context/applets/info/InfoApplet.cpp +@@ -40,18 +40,30 @@ QString InfoApplet::s_defaultHtml = "" + + InfoApplet::InfoApplet( QObject* parent, const QVariantList& args ) + : Context::Applet( parent, args ) ++ , m_webView( 0 ) + , m_initialized( false ) + , m_currentPlaylist( 0 ) ++ + { + setHasConfigurationInterface( false ); + setBackgroundHints( Plasma::Applet::NoBackground ); ++} ++ ++InfoApplet::~InfoApplet() ++{ ++ delete m_webView; ++} ++ ++ ++void InfoApplet::init() ++{ + + dataEngine( "amarok-info" )->connectSource( "info", this ); + + m_webView = new AmarokWebView( this ); + + resize( 500, -1 ); +- ++ + QPalette p = m_webView->palette(); + p.setColor( QPalette::Dark, QColor( 255, 255, 255, 0) ); + p.setColor( QPalette::Window, QColor( 255, 255, 255, 0) ); +@@ -62,11 +74,6 @@ InfoApplet::InfoApplet( QObject* parent, const QVariantList& args ) + constraintsEvent(); + } + +-InfoApplet::~InfoApplet() +-{ +- delete m_webView; +-} +- + void InfoApplet::constraintsEvent( Plasma::Constraints constraints ) + { + Q_UNUSED( constraints ) +diff --git a/src/context/applets/info/InfoApplet.h b/src/context/applets/info/InfoApplet.h +index 4be28fc..775ea7c 100644 +--- a/src/context/applets/info/InfoApplet.h ++++ b/src/context/applets/info/InfoApplet.h +@@ -48,6 +48,8 @@ public: + InfoApplet( QObject* parent, const QVariantList& args ); + virtual ~InfoApplet(); + ++ void init(); ++ + void paintInterface( QPainter *painter, const QStyleOptionGraphicsItem *option, const QRect &contentsRect ); + void constraintsEvent( Plasma::Constraints constraints = Plasma::AllConstraints ); + +-- +1.6.1 + diff --git a/amarok-2.2.2-kde#220532.patch b/amarok-2.2.2-kde#220532.patch deleted file mode 100644 index b095f27..0000000 --- a/amarok-2.2.2-kde#220532.patch +++ /dev/null @@ -1,383 +0,0 @@ -Fixes potential crashes during scanning discovered in 2.2.2 after tagging. -Jeff Mitchell - - -diff --git a/src/collection/sqlcollection/ScanResultProcessor.cpp b/src/collection/sqlcollection/ScanResultProcessor.cpp -index b680623..68b31df 100644 ---- a/src/collection/sqlcollection/ScanResultProcessor.cpp -+++ b/src/collection/sqlcollection/ScanResultProcessor.cpp -@@ -42,19 +42,59 @@ ScanResultProcessor::ScanResultProcessor( SqlCollection *collection ) - ScanResultProcessor::~ScanResultProcessor() - { - //everything has a URL, so enough to just delete from here -+ QSet currSet; //prevent double deletes - foreach( QStringList *list, m_urlsHashByUid ) -- delete list; -+ { -+ if( list ) -+ { -+ if( !currSet.contains( list ) ) -+ { -+ delete list; -+ currSet.insert( list ); -+ } -+ } -+ else -+ debug() << "GAAH! Tried to double-delete a value in m_urlsHashByUid"; -+ } - foreach( QLinkedList *list, m_albumsHashByName ) - { -- foreach( QStringList *slist, *list ) -- delete slist; -- delete list; -+ if( list ) -+ { -+ foreach( QStringList *slist, *list ) -+ { -+ if( slist ) -+ { -+ if( !currSet.contains( slist ) ) -+ { -+ delete slist; -+ currSet.insert( slist ); -+ } -+ else -+ debug() << "GAAH! Tried to double-delete a value in m_albumsHashByName"; -+ } -+ } -+ delete list; -+ } - } - foreach( QLinkedList *list, m_tracksHashByAlbum ) - { -- foreach( QStringList *slist, *list ) -- delete slist; -- delete list; -+ if( list ) -+ { -+ foreach( QStringList *slist, *list ) -+ { -+ if( slist ) -+ { -+ if( !currSet.contains( slist ) ) -+ { -+ delete slist; -+ currSet.insert( slist ); -+ } -+ else -+ debug() << "GAAH! Tried to double-delete a value in m_tracksHashByAlbum"; -+ } -+ } -+ delete list; -+ } - } - } - -@@ -67,11 +107,11 @@ ScanResultProcessor::setScanType( ScanType type ) - void - ScanResultProcessor::addDirectory( const QString &dir, uint mtime ) - { -- DEBUG_BLOCK -- debug() << "SRP::addDirectory on " << dir << " with mtime " << mtime; -+ //DEBUG_BLOCK -+ //debug() << "SRP::addDirectory on " << dir << " with mtime " << mtime; - if( dir.isEmpty() ) - { -- debug() << "got directory with no path from the scanner, not adding"; -+ //debug() << "got directory with no path from the scanner, not adding"; - return; - } - setupDatabase(); -@@ -254,7 +294,7 @@ ScanResultProcessor::rollback() - void - ScanResultProcessor::processDirectory( const QList &data ) - { --// DEBUG_BLOCK -+ //DEBUG_BLOCK - setupDatabase(); - //using the following heuristics: - //if more than one album is in the dir, use the artist of each track as albumartist -@@ -274,24 +314,54 @@ ScanResultProcessor::processDirectory( const QList &data ) - if( row.value( Field::ALBUM ).toString() != album ) - multipleAlbums = true; - } -+ - if( multipleAlbums || album.isEmpty() || artists.size() == 1 ) - { - foreach( const QVariantMap &row, data ) - { -- int artist = genericId( &m_artists, row.value( Field::ARTIST ).toString(), &m_nextArtistNum ); -- addTrack( row, artist ); -+ QString uid = row.value( Field::UNIQUEID ).toString(); -+ if( m_uidsSeenThisScan.contains( uid ) ) -+ { -+ QString originalLocation = ( ( m_urlsHashByUid.contains( uid ) && -+ m_urlsHashByUid[uid] != 0 ) ? -+ MountPointManager::instance()->getAbsolutePath( m_urlsHashByUid[uid]->at( 1 ).toInt(), m_urlsHashByUid[uid]->at( 2 ) ) : "(unknown)" ); -+ debug() << "Skipping file with uniqueid " << uid << " as it was already seen this scan," << -+ "file is at " << row.value( Field::URL ).toString() << ", original file is at " << originalLocation; -+ } -+ else -+ { -+ int artist = genericId( &m_artists, row.value( Field::ARTIST ).toString(), &m_nextArtistNum ); -+ //debug() << "artist found = " << artist; -+ addTrack( row, artist ); -+ m_uidsSeenThisScan.insert( uid ); -+ } - } - } - else - { - QString albumArtist = findAlbumArtist( artists, data.count() ); -+ //debug() << "albumArtist found = " << albumArtist; - //an empty string means that no albumartist was found - int artist = albumArtist.isEmpty() ? 0 : genericId( &m_artists, albumArtist, &m_nextArtistNum ); -+ //debug() << "artist found = " << artist; - - //debug() << "albumartist " << albumArtist << "for artists" << artists; - foreach( const QVariantMap &row, data ) - { -- addTrack( row, artist ); -+ QString uid = row.value( Field::UNIQUEID ).toString(); -+ if( m_uidsSeenThisScan.contains( uid ) ) -+ { -+ QString originalLocation = ( ( m_urlsHashByUid.contains( uid ) && -+ m_urlsHashByUid[uid] != 0 ) ? -+ MountPointManager::instance()->getAbsolutePath( m_urlsHashByUid[uid]->at( 1 ).toInt(), m_urlsHashByUid[uid]->at( 2 ) ) : "(unknown)" ); -+ debug() << "Skipping file with uniqueid " << uid << " as it was already seen this scan," << -+ "file is at " << row.value( Field::URL ).toString() << ", original file is at " << originalLocation; -+ } -+ else -+ { -+ addTrack( row, artist ); -+ m_uidsSeenThisScan.insert( uid ); -+ } - } - } - } -@@ -299,6 +369,7 @@ ScanResultProcessor::processDirectory( const QList &data ) - QString - ScanResultProcessor::findAlbumArtist( const QSet &artists, int trackCount ) const - { -+ //DEBUG_BLOCK - QMap artistCount; - bool featuring; - QStringList trackArtists; -@@ -371,6 +442,7 @@ void - ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) - { - //DEBUG_BLOCK -+ //debug() << "albumArtistId = " << albumArtistId; - //amarok 1 stored all tracks of a compilation in different directories. - //when using its "Organize Collection" feature - //try to detect these cases -@@ -419,7 +491,15 @@ ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) - - //urlId will take care of the urls table part of AFT - int url = urlId( path, uid ); -- -+/* -+ foreach( QString key, m_urlsHashByUid.keys() ) -+ debug() << "Key: " << key << ", list: " << *m_urlsHashByUid[key]; -+ foreach( int key, m_urlsHashById.keys() ) -+ debug() << "Key: " << key << ", list: " << *m_urlsHashById[key]; -+ typedef QPair blahType; //QFOREACH is stupid when it comes to QPairs -+ foreach( blahType key, m_urlsHashByLocation.keys() ) -+ debug() << "Key: " << key << ", list: " << *m_urlsHashByLocation[key]; -+*/ - QStringList *trackList = new QStringList(); - int id = m_nextTrackNum; - //debug() << "Appending new track number with tracknum: " << id; -@@ -470,7 +550,7 @@ ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) - //insert into hashes - if( m_tracksHashByUrl.contains( url ) && m_tracksHashByUrl[url] != 0 ) - { -- //debug() << "m_tracksHashByUrl contains the url!"; -+ //debug() << "m_tracksHashByUrl already contains url " << url; - //need to replace, not overwrite/add a new one - QStringList *oldValues = m_tracksHashByUrl[url]; - QString oldId = oldValues->at( 0 ); -@@ -490,8 +570,24 @@ ScanResultProcessor::addTrack( const QVariantMap &trackData, int albumArtistId ) - m_tracksHashById.insert( id, trackList ); - } - -+ //debug() << "album = " << album; -+ - if( m_tracksHashByAlbum.contains( album ) && m_tracksHashByAlbum[album] != 0 ) -- m_tracksHashByAlbum[album]->append( trackList ); -+ { -+ //contains isn't the fastest on linked lists, but in reality this is on the order of maybe -+ //ten quick pointer comparisons per track on average...probably lower -+ //debug() << "trackList is " << trackList; -+ if( !m_tracksHashByAlbum[album]->contains( trackList ) ) -+ { -+ //debug() << "appending trackList to m_tracksHashByAlbum"; -+ m_tracksHashByAlbum[album]->append( trackList ); -+ } -+ else -+ { -+ //debug() << "not appending trackList to m_tracksHashByAlbum"; -+ } -+ -+ } - else - { - QLinkedList *list = new QLinkedList(); -@@ -595,6 +691,8 @@ ScanResultProcessor::albumId( const QString &album, int albumArtistId ) - QLinkedList *list = m_albumsHashByName[album]; - foreach( QStringList *slist, *list ) - { -+ //debug() << "albumArtistId = " << albumArtistId; -+ //debug() << "Checking list: " << *slist; - if( slist->at( 2 ).isEmpty() && albumArtistId == 0 ) - { - //debug() << "artist is empty and albumArtistId = 0, returning " << slist->at( 0 ); -@@ -631,7 +729,10 @@ ScanResultProcessor::albumInsert( const QString &album, int albumArtistId ) - albumList->append( QString() ); - m_albumsHashById[returnedNum] = albumList; - if( m_albumsHashByName.contains( album ) && m_albumsHashByName[album] != 0 ) -- m_albumsHashByName[album]->append( albumList ); -+ { -+ if( !m_albumsHashByName[album]->contains( albumList ) ) -+ m_albumsHashByName[album]->append( albumList ); -+ } - else - { - QLinkedList *list = new QLinkedList(); -@@ -645,7 +746,7 @@ ScanResultProcessor::albumInsert( const QString &album, int albumArtistId ) - int - ScanResultProcessor::urlId( const QString &url, const QString &uid ) - { -- /* -+/* - DEBUG_BLOCK - foreach( QString key, m_urlsHashByUid.keys() ) - debug() << "Key: " << key << ", list: " << *m_urlsHashByUid[key]; -@@ -654,8 +755,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) - typedef QPair blahType; //QFOREACH is stupid when it comes to QPairs - foreach( blahType key, m_urlsHashByLocation.keys() ) - debug() << "Key: " << key << ", list: " << *m_urlsHashByLocation[key]; -- */ -- -+*/ - QFileInfo fileInfo( url ); - const QString dir = fileInfo.absoluteDir().absolutePath(); - int dirId = directoryId( dir ); -@@ -665,6 +765,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) - QPair locationPair( deviceId, rpath ); - //debug() << "in urlId with url = " << url << " and uid = " << uid; - //debug() << "checking locationPair " << locationPair; -+/* - if( m_urlsHashByLocation.contains( locationPair ) ) - { - QStringList values; -@@ -674,6 +775,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) - values << "zero"; - //debug() << "m_urlsHashByLocation contains it! It is " << values; - } -+*/ - QStringList currUrlIdValues; - if( m_urlsHashByUid.contains( uid ) && m_urlsHashByUid[uid] != 0 ) - currUrlIdValues = *m_urlsHashByUid[uid]; -@@ -717,6 +819,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) - //debug() << "m_urlsHashByUid contains this UID, updating deviceId and path"; - QStringList *list = m_urlsHashByUid[uid]; - //debug() << "list from UID hash is " << list << " with values " << *list; -+ QPair oldLocationPair( list->at( 1 ).toInt(), list->at( 2 ) ); - list->replace( 1, QString::number( deviceId ) ); - list->replace( 2, rpath ); - list->replace( 3, QString::number( dirId ) ); -@@ -737,6 +840,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) - delete oldList; - } - m_urlsHashByLocation[locationPair] = list; -+ m_urlsHashByLocation.remove( oldLocationPair ); - } - m_permanentTablesUrlUpdates.insert( uid, url ); - m_changedUrls.insert( uid, QPair( MountPointManager::instance()->getAbsolutePath( currUrlIdValues[1].toInt(), currUrlIdValues[2] ), url ) ); -@@ -751,6 +855,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) - { - QStringList *list = m_urlsHashByLocation[locationPair]; - //debug() << "Replacing hash " << list->at( 4 ) << " with " << uid; -+ QString oldId = list->at( 4 ); - list->replace( 4, uid ); - if( m_urlsHashByUid.contains( uid ) - && m_urlsHashByUid[uid] != 0 -@@ -762,6 +867,7 @@ ScanResultProcessor::urlId( const QString &url, const QString &uid ) - delete oldList; - } - m_urlsHashByUid[uid] = list; -+ m_urlsHashByUid.remove( oldId ); - } - m_permanentTablesUidUpdates.insert( url, uid ); - m_changedUids.insert( currUrlIdValues[4], uid ); -@@ -855,7 +961,8 @@ ScanResultProcessor::directoryId( const QString &dir ) - int - ScanResultProcessor::checkExistingAlbums( const QString &album ) - { --// DEBUG_BLOCK -+ //DEBUG_BLOCK -+ //debug() << "looking for album " << album; - // "Unknown" albums shouldn't be handled as compilations - if( album.isEmpty() ) - return 0; -@@ -865,7 +972,10 @@ ScanResultProcessor::checkExistingAlbums( const QString &album ) - //it's probably a compilation. - //this handles A1 compilations that were automatically organized by Amarok - if( !m_albumsHashByName.contains( album ) || m_albumsHashByName[album] == 0 ) -+ { -+ //debug() << "hashByName doesn't contain album, or it's zero"; - return 0; -+ } - - QStringList trackIds; - QLinkedList *llist = m_albumsHashByName[album]; -@@ -915,8 +1025,10 @@ ScanResultProcessor::checkExistingAlbums( const QString &album ) - } - } - -+ //debug() << "trackIds = " << trackIds; - if( trackIds.isEmpty() ) - { -+ //debug() << "trackIds empty, returning zero"; - return 0; - } - else -@@ -933,6 +1045,7 @@ ScanResultProcessor::checkExistingAlbums( const QString &album ) - list->replace( 3, compilationString ); - } - } -+ //debug() << "returning " << compilationId; - return compilationId; - } - } -@@ -1167,6 +1280,17 @@ ScanResultProcessor::copyHashesToTempTables() - foreach( blahType key, m_urlsHashByLocation.keys() ) - debug() << "Key: " << key << ", list: " << *m_urlsHashByLocation[key]; - debug() << "Next album num: " << m_nextAlbumNum; -+ -+ foreach( int key, m_tracksHashById.keys() ) -+ debug() << "Key: " << key << ", list: " << *m_tracksHashById[key]; -+ foreach( int key, m_tracksHashByUrl.keys() ) -+ debug() << "Key: " << key << ", list: " << *m_tracksHashByUrl[key]; -+ foreach( int key, m_tracksHashByAlbum.keys() ) -+ { -+ debug() << "Key: " << key; -+ foreach( QStringList* item, *m_tracksHashByAlbum[key] ) -+ debug() << "list: " << item << " is " << *item; -+ } - */ - - DEBUG_BLOCK -diff --git a/src/collection/sqlcollection/ScanResultProcessor.h b/src/collection/sqlcollection/ScanResultProcessor.h -index 71afc98..c7f200f 100644 ---- a/src/collection/sqlcollection/ScanResultProcessor.h -+++ b/src/collection/sqlcollection/ScanResultProcessor.h -@@ -94,6 +94,7 @@ class ScanResultProcessor : public QObject - QMap m_directories; - QMap > > m_imageMap; - -+ QSet m_uidsSeenThisScan; - QHash m_filesInDirs; - - TrackUrls m_changedUids; //not really track urls diff --git a/amarok-2.2.2-no_var_tracking.patch b/amarok-2.2.2-no_var_tracking.patch deleted file mode 100644 index 5b0c658..0000000 --- a/amarok-2.2.2-no_var_tracking.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up amarok-2.2.2/src/CMakeLists.txt.no_var_tracking amarok-2.2.2/src/CMakeLists.txt ---- amarok-2.2.2/src/CMakeLists.txt.no_var_tracking 2010-01-06 16:19:46.000000000 -0600 -+++ amarok-2.2.2/src/CMakeLists.txt 2010-01-06 17:43:11.257848590 -0600 -@@ -714,6 +714,8 @@ set( amaroklib_DEPENDS "amarokpud" ) - - kde4_add_kcfg_files(amaroklib_LIB_SRCS amarokconfig.kcfgc) - -+set_source_files_properties(amarokconfig.cpp PROPERTIES COMPILE_FLAGS -fno-var-tracking-assignments ) -+ - kde4_add_ui_files(amaroklib_LIB_SRCS - aboutdialog/OcsPersonItem.ui - dialogs/EditCoverSearchDialog.ui diff --git a/amarok.spec b/amarok.spec index 584574c..ca23ee8 100644 --- a/amarok.spec +++ b/amarok.spec @@ -2,21 +2,22 @@ Name: amarok Summary: Media player Version: 2.3.0 -Release: 1%{?dist} +Release: 3%{?dist} Group: Applications/Multimedia License: GPLv2+ Url: http://amarok.kde.org/ -Source0: http://download.kde.org/unstable/amarok/%{version}/src/amarok-%{version}.tar.bz2 +Source0: http://download.kde.org/stable/amarok/%{version}/src/amarok-%{version}.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -## Patch1: amarok-2.2.2-no_var_tracking.patch - Patch50: amarok-2.2.1.90-qtscript_not_required.patch ## upstream patches -# http://bugs.kde.org/220532 -# Patch100: amarok-2.2.2-kde#220532.patch +# http://bugs.kde.org/227639 +# http://bugs.kde.org/229756 +Patch100: http://gitorious.org/amarok/amarok/commit/a62fed8c667a076daa21fdf8360708813f1bf9e0.patch +# may need to rebase this, for building with qt-4.7 +# http://gitorious.org/amarok/amarok/commit/aa5ca5d179d084e99c8a477084ba717c35aa5030 BuildRequires: curl-devel BuildRequires: desktop-file-utils @@ -33,20 +34,20 @@ BuildRequires: libnjb-devel BuildRequires: libusb-devel BuildRequires: libxml2-devel BuildRequires: loudmouth-devel +BuildRequires: mysql-devel BuildRequires: mysql-embedded-devel BuildRequires: qca2-devel BuildRequires: soprano-devel BuildRequires: taglib-devel >= 1.6 BuildRequires: taglib-extras-devel >= 1.0.1 -%global kde4_version %((kde4-config --version 2>/dev/null || echo KDE 4.3.0) | grep '^KDE' | cut -d' ' -f2 | cut -d'-' -f1) BuildRequires: qtscriptbindings Requires: qtscriptbindings%{?_isa} Requires: %{name}-utils = %{version}-%{release} # for trash protocol support, phonon kcm, etc... # FIXME: should probably be handled lower in the stack -Requires: kdebase-runtime >= %{kde4_version} +Requires: kdebase-runtime%{?_kde4_version: >= %{_kde4_version}} # when we grew a -libs subpkg, multilib love Obsoletes: amarok < 2.1.80 @@ -68,7 +69,6 @@ Amarok is a multimedia player with: Summary: Runtime libraries for %{name} Group: System Environment/Libraries Requires: %{name} = %{version}-%{release} -%{?kde4_version:Requires: kdelibs4%{?_isa} >= %{kde4_version}} %{?_qt4_version:Requires: qt4%{?_isa} >= %{_qt4_version}} %description libs %{summary}. @@ -85,11 +85,9 @@ Obsoletes: amarok-utilities < 2.0.96 %prep %setup -q -# %if 0%{?fedora} > 11 || 0%{?rhel} > 5 -# %patch1 -p1 -b .no_var_tracking -# %endif %patch50 -p1 -b .qtscript_not_required -# %patch100 -p1 -b .kde#220532 + +%patch100 -p1 -b .info_applet_workaround %build @@ -182,9 +180,22 @@ fi %changelog +* Mon Mar 22 2010 Rex Dietr - 2.3.0-3 +- workaround info applet crasher (kde#227639,kde#229756) + +* Thu Mar 11 2010 Rex Dieter - 2.3.0-2 +- fix Source0 URL +- -libs: drop unused/extraneous kdelibs4 dep + * Thu Mar 11 2010 Thomas Janssen 2.3.0-1 - amarok 2.3.0 +* Sat Feb 13 2010 Rex Dieter - 2.2.2.90-1 +- amarok-2.2.2.90 (2.3beta1) + +* Thu Jan 28 2010 Rex Dieter - 2.2.2-4 +- use %%{_kde4_version} provided elsewhere (kde-filesystem) + * Sun Jan 10 2010 Rex Dieter - 2.2.2-3 - collection scan crash patch, take 2 (kde#220532) From 4645009bdf40af77f73afe0b9d0c943ddf95d648 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Thu, 25 Mar 2010 17:04:14 +0000 Subject: [PATCH 24/32] - fix mp3 support logic --- ...5a7e55b08426fd60f4928e65ac066349f83d.patch | 26 +++++++++++++++++++ amarok.spec | 13 ++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 50bf5a7e55b08426fd60f4928e65ac066349f83d.patch diff --git a/50bf5a7e55b08426fd60f4928e65ac066349f83d.patch b/50bf5a7e55b08426fd60f4928e65ac066349f83d.patch new file mode 100644 index 0000000..4f7f695 --- /dev/null +++ b/50bf5a7e55b08426fd60f4928e65ac066349f83d.patch @@ -0,0 +1,26 @@ +From 50bf5a7e55b08426fd60f4928e65ac066349f83d Mon Sep 17 00:00:00 2001 +From: Bartosz Brachaczek +Date: Tue, 23 Mar 2010 22:53:13 +0100 +Subject: [PATCH] Fix logic error in EngineController::supportedMimeTypes causing mp3 support misdetection + +Signed-off-by: Bartosz Brachaczek +--- + src/EngineController.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/src/EngineController.cpp b/src/EngineController.cpp +index 79acb4f..87745ea 100644 +--- a/src/EngineController.cpp ++++ b/src/EngineController.cpp +@@ -239,7 +239,7 @@ EngineController::supportedMimeTypes() + mimeTable << "audio/x-m4b"; // MP4 Audio Books have a different extension that KFileItem/Phonon don't grok + + // We special case this, as otherwise the users would hate us +- if( ( !mimeTable.contains( "audio/mp3" ) || !mimeTable.contains( "audio/x-mp3" ) ) && !installDistroCodec() ) ++ if( ( !mimeTable.contains( "audio/mp3" ) && !mimeTable.contains( "audio/x-mp3" ) ) && !installDistroCodec() ) + { + The::statusBar()->longMessage( + i18n( "

Phonon claims it cannot play MP3 files. You may want to examine " +-- +1.6.1 + diff --git a/amarok.spec b/amarok.spec index ca23ee8..e8815b0 100644 --- a/amarok.spec +++ b/amarok.spec @@ -2,7 +2,7 @@ Name: amarok Summary: Media player Version: 2.3.0 -Release: 3%{?dist} +Release: 5%{?dist} Group: Applications/Multimedia License: GPLv2+ @@ -16,6 +16,8 @@ Patch50: amarok-2.2.1.90-qtscript_not_required.patch # http://bugs.kde.org/227639 # http://bugs.kde.org/229756 Patch100: http://gitorious.org/amarok/amarok/commit/a62fed8c667a076daa21fdf8360708813f1bf9e0.patch +# fix mp3-support detection logic +Patch101: http://gitorious.org/amarok/amarok/commit/50bf5a7e55b08426fd60f4928e65ac066349f83d.patch # may need to rebase this, for building with qt-4.7 # http://gitorious.org/amarok/amarok/commit/aa5ca5d179d084e99c8a477084ba717c35aa5030 @@ -88,6 +90,7 @@ Obsoletes: amarok-utilities < 2.0.96 %patch50 -p1 -b .qtscript_not_required %patch100 -p1 -b .info_applet_workaround +%patch101 -p1 -b .mp3_support_logic %build @@ -180,7 +183,13 @@ fi %changelog -* Mon Mar 22 2010 Rex Dietr - 2.3.0-3 +* Thu Mar 25 2010 Rex Dieter - 2.3.0-5 +- fix mp3 support logic + +* Mon Mar 22 2010 Rex Dieter - 2.3.0-4 +- rebuild (libgpod) + +* Mon Mar 22 2010 Rex Dieter - 2.3.0-3 - workaround info applet crasher (kde#227639,kde#229756) * Thu Mar 11 2010 Rex Dieter - 2.3.0-2 From 716c1bebc29e0739763c246033e8b357c3fef01b Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Sat, 8 May 2010 01:42:42 +0000 Subject: [PATCH 25/32] Initialize branch EL-6 for amarok --- branch | 1 + 1 file changed, 1 insertion(+) create mode 100644 branch diff --git a/branch b/branch new file mode 100644 index 0000000..46381b9 --- /dev/null +++ b/branch @@ -0,0 +1 @@ +EL-6 From 19713a0b579daf4a1db3b2adb28cada3a0c01252 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 28 Jul 2010 09:49:14 +0000 Subject: [PATCH 26/32] dist-git conversion --- .cvsignore => .gitignore | 0 Makefile | 21 --------------------- branch | 1 - 3 files changed, 22 deletions(-) rename .cvsignore => .gitignore (100%) delete mode 100644 Makefile delete mode 100644 branch diff --git a/.cvsignore b/.gitignore similarity index 100% rename from .cvsignore rename to .gitignore diff --git a/Makefile b/Makefile deleted file mode 100644 index 6abbd20..0000000 --- a/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Makefile for source rpm: amarok -# $Id$ -NAME := amarok -SPECFILE = $(firstword $(wildcard *.spec)) - -define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done -endef - -MAKEFILE_COMMON := $(shell $(find-makefile-common)) - -ifeq ($(MAKEFILE_COMMON),) -# attept a checkout -define checkout-makefile-common -test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2 -endef - -MAKEFILE_COMMON := $(shell $(checkout-makefile-common)) -endif - -include $(MAKEFILE_COMMON) diff --git a/branch b/branch deleted file mode 100644 index 46381b9..0000000 --- a/branch +++ /dev/null @@ -1 +0,0 @@ -EL-6 From e2533fcec71a6bdeb5e54c64c0d6c72a67d7c8ad Mon Sep 17 00:00:00 2001 From: Keiran Smith Date: Sun, 18 Mar 2012 21:50:35 +0000 Subject: [PATCH 27/32] Update EPEL --- .gitignore | 1 + sources | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ba488fe..baf85a5 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ amarok-2.3.0.tar.bz2 +/amarok-2.5.0.tar.bz2 diff --git a/sources b/sources index 153811c..ed9678e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -fc672a2848e36b3b44eb81dd1466e4f4 amarok-2.3.0.tar.bz2 +b7983eaa33e4771769ae9e330c811995 amarok-2.5.0.tar.bz2 From 095f15ee828c401df52e69d24886b160b7dade48 Mon Sep 17 00:00:00 2001 From: Keiran Smith Date: Sun, 18 Mar 2012 21:51:00 +0000 Subject: [PATCH 28/32] UPDATE EPEL --- ...5a7e55b08426fd60f4928e65ac066349f83d.patch | 26 -- ...ed8c667a076daa21fdf8360708813f1bf9e0.patch | 76 ------ amarok.spec | 257 +++++++++++++----- 3 files changed, 194 insertions(+), 165 deletions(-) delete mode 100644 50bf5a7e55b08426fd60f4928e65ac066349f83d.patch delete mode 100644 a62fed8c667a076daa21fdf8360708813f1bf9e0.patch diff --git a/50bf5a7e55b08426fd60f4928e65ac066349f83d.patch b/50bf5a7e55b08426fd60f4928e65ac066349f83d.patch deleted file mode 100644 index 4f7f695..0000000 --- a/50bf5a7e55b08426fd60f4928e65ac066349f83d.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 50bf5a7e55b08426fd60f4928e65ac066349f83d Mon Sep 17 00:00:00 2001 -From: Bartosz Brachaczek -Date: Tue, 23 Mar 2010 22:53:13 +0100 -Subject: [PATCH] Fix logic error in EngineController::supportedMimeTypes causing mp3 support misdetection - -Signed-off-by: Bartosz Brachaczek ---- - src/EngineController.cpp | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/src/EngineController.cpp b/src/EngineController.cpp -index 79acb4f..87745ea 100644 ---- a/src/EngineController.cpp -+++ b/src/EngineController.cpp -@@ -239,7 +239,7 @@ EngineController::supportedMimeTypes() - mimeTable << "audio/x-m4b"; // MP4 Audio Books have a different extension that KFileItem/Phonon don't grok - - // We special case this, as otherwise the users would hate us -- if( ( !mimeTable.contains( "audio/mp3" ) || !mimeTable.contains( "audio/x-mp3" ) ) && !installDistroCodec() ) -+ if( ( !mimeTable.contains( "audio/mp3" ) && !mimeTable.contains( "audio/x-mp3" ) ) && !installDistroCodec() ) - { - The::statusBar()->longMessage( - i18n( "

Phonon claims it cannot play MP3 files. You may want to examine " --- -1.6.1 - diff --git a/a62fed8c667a076daa21fdf8360708813f1bf9e0.patch b/a62fed8c667a076daa21fdf8360708813f1bf9e0.patch deleted file mode 100644 index 03e9257..0000000 --- a/a62fed8c667a076daa21fdf8360708813f1bf9e0.patch +++ /dev/null @@ -1,76 +0,0 @@ -From a62fed8c667a076daa21fdf8360708813f1bf9e0 Mon Sep 17 00:00:00 2001 -From: Nikolaj Hald Nielsen -Date: Mon, 22 Mar 2010 09:46:32 +0100 -Subject: [PATCH] Work around crash in the Info applet caused by a bug in certain versions of Qt. - -BUG: 229756 -BUG: 227639 ---- - src/context/applets/info/InfoApplet.cpp | 19 +++++++++++++------ - src/context/applets/info/InfoApplet.h | 2 ++ - 2 files changed, 15 insertions(+), 6 deletions(-) - -diff --git a/src/context/applets/info/InfoApplet.cpp b/src/context/applets/info/InfoApplet.cpp -index 166da4c..e415e98 100644 ---- a/src/context/applets/info/InfoApplet.cpp -+++ b/src/context/applets/info/InfoApplet.cpp -@@ -40,18 +40,30 @@ QString InfoApplet::s_defaultHtml = "" - - InfoApplet::InfoApplet( QObject* parent, const QVariantList& args ) - : Context::Applet( parent, args ) -+ , m_webView( 0 ) - , m_initialized( false ) - , m_currentPlaylist( 0 ) -+ - { - setHasConfigurationInterface( false ); - setBackgroundHints( Plasma::Applet::NoBackground ); -+} -+ -+InfoApplet::~InfoApplet() -+{ -+ delete m_webView; -+} -+ -+ -+void InfoApplet::init() -+{ - - dataEngine( "amarok-info" )->connectSource( "info", this ); - - m_webView = new AmarokWebView( this ); - - resize( 500, -1 ); -- -+ - QPalette p = m_webView->palette(); - p.setColor( QPalette::Dark, QColor( 255, 255, 255, 0) ); - p.setColor( QPalette::Window, QColor( 255, 255, 255, 0) ); -@@ -62,11 +74,6 @@ InfoApplet::InfoApplet( QObject* parent, const QVariantList& args ) - constraintsEvent(); - } - --InfoApplet::~InfoApplet() --{ -- delete m_webView; --} -- - void InfoApplet::constraintsEvent( Plasma::Constraints constraints ) - { - Q_UNUSED( constraints ) -diff --git a/src/context/applets/info/InfoApplet.h b/src/context/applets/info/InfoApplet.h -index 4be28fc..775ea7c 100644 ---- a/src/context/applets/info/InfoApplet.h -+++ b/src/context/applets/info/InfoApplet.h -@@ -48,6 +48,8 @@ public: - InfoApplet( QObject* parent, const QVariantList& args ); - virtual ~InfoApplet(); - -+ void init(); -+ - void paintInterface( QPainter *painter, const QStyleOptionGraphicsItem *option, const QRect &contentsRect ); - void constraintsEvent( Plasma::Constraints constraints = Plasma::AllConstraints ); - --- -1.6.1 - diff --git a/amarok.spec b/amarok.spec index e8815b0..7b545df 100644 --- a/amarok.spec +++ b/amarok.spec @@ -1,64 +1,60 @@ Name: amarok Summary: Media player -Version: 2.3.0 -Release: 5%{?dist} +Version: 2.5.0 +Release: 1%{?dist} -Group: Applications/Multimedia -License: GPLv2+ +# KDE e.V. may determine that future GPL versions are accepted +License: GPLv2 or GPLv3 Url: http://amarok.kde.org/ Source0: http://download.kde.org/stable/amarok/%{version}/src/amarok-%{version}.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -Patch50: amarok-2.2.1.90-qtscript_not_required.patch +# Invoke a browser on the online UserBase documentation instead of KHelpCenter +# for the help contents if the amarok-doc subpackage is not installed. +Patch0: amarok-2.5.0-onlinedoc.patch + +#Patch50: amarok-2.2.1.90-qtscript_not_required.patch ## upstream patches -# http://bugs.kde.org/227639 -# http://bugs.kde.org/229756 -Patch100: http://gitorious.org/amarok/amarok/commit/a62fed8c667a076daa21fdf8360708813f1bf9e0.patch -# fix mp3-support detection logic -Patch101: http://gitorious.org/amarok/amarok/commit/50bf5a7e55b08426fd60f4928e65ac066349f83d.patch -# may need to rebase this, for building with qt-4.7 -# http://gitorious.org/amarok/amarok/commit/aa5ca5d179d084e99c8a477084ba717c35aa5030 +# https://bugs.kde.org/show_bug.cgi?id=290123 +Patch100: amarok-2.5.0-kde48_context_view.patch +# Load all tracks from XSPF using MetaProxy. +# https://bugs.kde.org/show_bug.cgi?id=295199 +Patch101: 0001-Load-all-tracks-from-XSPF-using-MetaProxy.patch BuildRequires: curl-devel BuildRequires: desktop-file-utils +## non-modular MusicBrainz-based audio fingerprint tag lookup support :( +#BuildRequires: ffmpeg-devel libofa-devel BuildRequires: gettext BuildRequires: kdelibs4-devel -BuildRequires: libifp-devel BuildRequires: liblastfm-devel -BuildRequires: libmp4v2-devel -%if 0%{?fedora} > 9 -BuildRequires: libmtp-devel >= 0.3.0 -BuildRequires: libgpod-devel >= 0.7.0 -%endif -BuildRequires: libnjb-devel -BuildRequires: libusb-devel -BuildRequires: libxml2-devel -BuildRequires: loudmouth-devel -BuildRequires: mysql-devel -BuildRequires: mysql-embedded-devel -BuildRequires: qca2-devel -BuildRequires: soprano-devel -BuildRequires: taglib-devel >= 1.6 -BuildRequires: taglib-extras-devel >= 1.0.1 +# extra libaio linkage comes from use of mysql_config --libs +BuildRequires: mysql-embedded-devel libaio-devel +BuildRequires: pkgconfig(libgpod-1.0) >= 0.7.0 +BuildRequires: pkgconfig(libmtp) >= 0.3.0 +BuildRequires: pkgconfig(libmygpo-qt) >= 1.0.5 +BuildRequires: pkgconfig(libxml-2.0) +BuildRequires: pkgconfig(loudmouth-1.0) +BuildRequires: pkgconfig(qca2) +BuildRequires: pkgconfig(soprano) +BuildRequires: pkgconfig(taglib) >= 1.6 +BuildRequires: pkgconfig(taglib-extras) >= 1.0.1 +# not strictly required at buildtime, but if it's not available here, +# then you're hosed at runtime anyway BuildRequires: qtscriptbindings Requires: qtscriptbindings%{?_isa} Requires: %{name}-utils = %{version}-%{release} - -# for trash protocol support, phonon kcm, etc... -# FIXME: should probably be handled lower in the stack Requires: kdebase-runtime%{?_kde4_version: >= %{_kde4_version}} +%if 0%{?fedora} == 14 +# lame, see http://bugzilla.redhat.com/666173 +Requires: libmtp-hal +%endif -# when we grew a -libs subpkg, multilib love -Obsoletes: amarok < 2.1.80 Requires: %{name}-libs%{?_isa} = %{version}-%{release} -Obsoletes: amarok-devel < 1.4.9 -Obsoletes: amarok-konqueror < 1.5 -Obsoletes: amarok-visualisation < 1.5 - %description Amarok is a multimedia player with: - fresh playlist concept, very fast to use, with drag and drop @@ -69,7 +65,6 @@ Amarok is a multimedia player with: %package libs Summary: Runtime libraries for %{name} -Group: System Environment/Libraries Requires: %{name} = %{version}-%{release} %{?_qt4_version:Requires: qt4%{?_isa} >= %{_qt4_version}} %description libs @@ -77,20 +72,28 @@ Requires: %{name} = %{version}-%{release} %package utils Summary: Amarok standalone utilities -Group: Applications/Multimedia Obsoletes: amarok-collectionscanner < 2.0.90-2 Obsoletes: amarok-utilities < 2.0.96 %description utils %{summary}, including amarokcollectionscanner. +%package doc +Summary: Application handbook, documentation. +# for upgrade path +Obsoletes: amarok < 2.5.0-4 +Requires: amarok = %{version}-%{release} +BuildArch: noarch +%description doc +%{summary}. + %prep %setup -q -%patch50 -p1 -b .qtscript_not_required - -%patch100 -p1 -b .info_applet_workaround -%patch101 -p1 -b .mp3_support_logic +%patch0 -p1 -b .onlinedoc +#patch50 -p1 -b .qtscript_not_required +%patch100 -p1 -b .kde48_context_view +%patch101 -p1 -b .loadall_xspf %build @@ -105,25 +108,21 @@ make %{?_smp_mflags} -C %{_target_platform} %install rm -rf %{buildroot} -make install DESTDIR=%{buildroot} -C %{_target_platform} +make install/fast DESTDIR=%{buildroot} -C %{_target_platform} -%find_lang amarok +%find_lang amarok --with-kde --without-mo && mv amarok.lang amarok-doc.lang +%find_lang amarok %find_lang amarokcollectionscanner_qt -%find_lang amarokpkg -%find_lang amarok_scriptengine_qscript -cat amarokpkg.lang >> amarok.lang -cat amarok_scriptengine_qscript.lang >> amarok.lang +%find_lang amarokpkg && cat amarokpkg.lang >> amarok.lang +%find_lang amarok_scriptengine_qscript && cat amarok_scriptengine_qscript.lang >> amarok.lang # unpackaged files -rm -f %{buildroot}%{_kde4_libdir}/libamarok{-sqlcollection,_taglib,lib,plasma,pud,ocsclient}.so +rm -fv %{buildroot}%{_kde4_libdir}/libamarok{-sqlcollection,_taglib,core,lib,plasma,pud,ocsclient,-transcoding}.so %check desktop-file-validate %{buildroot}%{_kde4_datadir}/applications/kde4/amarok.desktop - - -%clean -rm -rf %{buildroot} +desktop-file-validate %{buildroot}%{_kde4_datadir}/applications/kde4/amarok_containers.desktop %post @@ -140,19 +139,14 @@ gtk-update-icon-cache %{_kde4_iconsdir}/hicolor &> /dev/null || : update-desktop-database -q &> /dev/null ||: fi -%post libs -p /sbin/ldconfig - -%postun libs -p /sbin/ldconfig - - %files -f amarok.lang -%defattr(-,root,root,-) %doc AUTHORS COPYING ChangeLog README %{_kde4_bindir}/amarok %{_kde4_bindir}/amarokpkg %{_kde4_bindir}/amarok_afttagger %{_kde4_bindir}/amarokmp3tunesharmonydaemon %{_kde4_appsdir}/amarok/ +%{_kde4_appsdir}/kconf_update/amarok* %{_kde4_appsdir}/desktoptheme/Amarok-Mockup/ %{_kde4_appsdir}/desktoptheme/default/widgets/* %{_kde4_appsdir}/solid/actions/amarok-play-audiocd.desktop @@ -160,6 +154,7 @@ fi %{_kde4_configdir}/amarok_homerc %{_kde4_configdir}/amarokapplets.knsrc %{_kde4_datadir}/applications/kde4/amarok.desktop +%{_kde4_datadir}/applications/kde4/amarok_containers.desktop %{_kde4_datadir}/config.kcfg/amarokconfig.kcfg %{_kde4_datadir}/kde4/services/*.desktop %{_kde4_datadir}/kde4/services/*.protocol @@ -167,22 +162,158 @@ fi %{_kde4_datadir}/kde4/servicetypes/*.desktop %{_kde4_iconsdir}/hicolor/*/*/* %{_kde4_libdir}/kde4/*.so -%{_kde4_libdir}/strigi/* %{_datadir}/dbus-1/interfaces/*.xml +%post libs -p /sbin/ldconfig +%postun libs -p /sbin/ldconfig + %files libs -%defattr(-,root,root,-) +%{_kde4_libdir}/libamarokcore.so.1* %{_kde4_libdir}/libamaroklib.so.1* %{_kde4_libdir}/libamarokocsclient.so.4* %{_kde4_libdir}/libamarokpud.so.1* %{_kde4_libdir}/libamarok-sqlcollection.so.1* +%{_kde4_libdir}/libamarok-transcoding.so.1* +%{_kde4_libdir}/libampache_account_login.so %files utils -f amarokcollectionscanner_qt.lang -%defattr(-,root,root,-) %{_kde4_bindir}/amarokcollectionscanner +%files doc -f amarok-doc.lang + %changelog +* Tue Mar 18 2012 Keiran "Affix" Smith 2.5.0-1 +- Update of EPEL Packages + +* Tue Mar 13 2012 Rex Dieter 2.5.0-8 +- Load all XSPF tracks (kde#295199) + +* Tue Feb 28 2012 Fedora Release Engineering - 2.5.0-7 +- Rebuilt for c++ ABI breakage + +* Sun Jan 29 2012 Kevin Kofler 2.5.0-6 +- help: invoke a browser on the online UserBase doc if amarok-doc not installed + +* Fri Jan 27 2012 Rex Dieter 2.5.0-5 +- make -doc only handbook, put translations back in main pkg + +* Fri Jan 27 2012 Rex Dieter 2.5.0-4 +- -doc subpkg for large'ish application handbook and translations + +* Fri Jan 27 2012 Rex Dieter 2.5.0-3 +- fix context view when on kde48 (kde#290123) + +* Thu Jan 12 2012 Fedora Release Engineering - 2.5.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Fri Dec 16 2011 Rex Dieter 2.5.0-1 +- 2.5.0 + +* Mon Nov 14 2011 Rex Dieter 2.4.90-1 +- 2.4.90 + +* Wed Nov 09 2011 Rex Dieter 2.4.3-4 +- pkgconfig-style deps +- drop extraneous/old BR's + +* Mon Sep 19 2011 Rex Dieter 2.4.3-3 +- Wikipedia applet crashes (kde#279813) + +* Fri Sep 16 2011 Rex Dieter 2.4.3-2 +- re-enable libgpod support inadvertantly lost in 2.4.1.90-1 + +* Sat Jul 30 2011 Rex Dieter 2.4.3-1 +- 2.4.3 + +* Sun Jul 24 2011 Rex Dieter 2.4.2-2 +- don't query kwallet for lastfm credentials on every track change (kde#278177) + +* Fri Jul 22 2011 Rex Dieter 2.4.2-1 +- 2.4.2 + +* Fri Jul 08 2011 Rex Dieter 2.4.1.90-1 +- 2.4.1.90 +- drop no-longer-needed %%ifarch s390 conditionals + +* Fri Jun 10 2011 Rex Dieter 2.4.1-4 +- drop ancient Obsoletes + +* Fri Jun 10 2011 Rex Dieter 2.4.1-3 +- rebuild (libmtp) + +* Tue May 24 2011 Rex Dieter 2.4.1-2 +- BR: libmygpo-qt-devel + +* Fri May 06 2011 Rex Dieter 2.4.1-1 +- 2.4.1 (final) + +* Wed Mar 23 2011 Rex Dieter 2.4.0.90-2 +- rebuild (mysql) + +* Mon Mar 21 2011 Rex Dieter 2.4.0.90-1 +- 2.4.1 beta1 + +* Wed Feb 09 2011 Rex Dieter 2.4.0-3 +- License: GPLv2 or GPLv3 + +* Mon Feb 07 2011 Fedora Release Engineering - 2.4.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Tue Jan 11 2011 Rex Dieter 2.4.0-1 +- 2.4.0 +- libmtp-hal dependency missing for amarok (#666173) + +* Tue Dec 28 2010 Rex Dieter 2.3.90-3 +- rebuild (mysql) + +* Tue Dec 07 2010 Thomas Janssen 2.3.90-2 +- fixed missing libampache + +* Mon Dec 06 2010 Thomas Janssen 2.3.90-1 +- 2.3.90 (2.4beta1) + +* Tue Nov 30 2010 Rex Dieter 2.3.2-7 +- recognize audio/flac mimetype too (kde#257488) + +* Fri Nov 05 2010 Thomas Janssen 2.3.2-6 +- rebuild for new libxml2 + +* Thu Nov 04 2010 Rex Dieter 2.3.2-5 +- appletsize patch +- fix/improve ipod3 support patch +- another collectionscanner patch + +* Wed Sep 29 2010 jkeating - 2.3.2-4 +- Rebuilt for gcc bug 634757 + +* Fri Sep 24 2010 Thomas Janssen 2.3.2-3 +- added patch to fix scanning qt bug/regression + +* Mon Sep 20 2010 Thomas Janssen 2.3.2-2 +- added patch to fix BPM tags in flac + +* Thu Sep 16 2010 Rex Dieter - 2.3.2-1 +- amarok-2.3.2 + +* Thu Sep 16 2010 Dan Horák - 2.3.1.90-3 +- no libgpod on s390(x) + +* Tue Aug 16 2010 Rex Dieter - 2.3.1.90-2 +- fix/patch installation of amarok handbooks + +* Mon Aug 16 2010 Rex Dieter - 2.3.1.90-1 +- amarok-2.3.1.90 (2.3.2 beta1) + +* Fri Jul 09 2010 Rex Dieter - 2.3.1-2 +- No Notification Area icon for non-KDE desktops (kde#232578,rh#603336) + +* Fri May 28 2010 Rex Dieter - 2.3.1-1 +- amarok-2.3.1 + +* Sat Apr 17 2010 Rex Dieter - 2.3.0.90-1 +- amarok-2.3.0.90 + * Thu Mar 25 2010 Rex Dieter - 2.3.0-5 - fix mp3 support logic From 21ba70b4cc16222226ceb924cb83f69394e04533 Mon Sep 17 00:00:00 2001 From: Keiran Smith Date: Sun, 18 Mar 2012 21:56:13 +0000 Subject: [PATCH 29/32] Fixing EPEL --- ...all-tracks-from-XSPF-using-MetaProxy.patch | 753 +++++++++++++++ amarok-2.5.0-kde48_context_view.patch | 59 ++ amarok-2.5.0-onlinedoc.patch | 91 ++ amarok.spec~ | 887 ++++++++++++++++++ 4 files changed, 1790 insertions(+) create mode 100644 0001-Load-all-tracks-from-XSPF-using-MetaProxy.patch create mode 100644 amarok-2.5.0-kde48_context_view.patch create mode 100644 amarok-2.5.0-onlinedoc.patch create mode 100644 amarok.spec~ diff --git a/0001-Load-all-tracks-from-XSPF-using-MetaProxy.patch b/0001-Load-all-tracks-from-XSPF-using-MetaProxy.patch new file mode 100644 index 0000000..6ee7849 --- /dev/null +++ b/0001-Load-all-tracks-from-XSPF-using-MetaProxy.patch @@ -0,0 +1,753 @@ +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 4241e69..bbe3f75 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -284,6 +284,7 @@ set(libmetaimpl_SRCS + core-impl/meta/multi/MultiTrack.cpp + core-impl/meta/cue/CueFileSupport.cpp + core-impl/meta/proxy/MetaProxy.cpp ++ core-impl/meta/proxy/MetaProxyWorker.cpp + core-impl/meta/stream/Stream.cpp + core-impl/playlists/types/file/PlaylistFile.cpp + core-impl/statistics/providers/url/PermanentUrlStatisticsProvider.cpp +diff --git a/src/core-impl/collections/support/CollectionManager.cpp b/src/core-impl/collections/support/CollectionManager.cpp +index 37fe03a..9085b5a 100644 +--- a/src/core-impl/collections/support/CollectionManager.cpp ++++ b/src/core-impl/collections/support/CollectionManager.cpp +@@ -463,6 +463,7 @@ CollectionManager::trackForUrl( const KUrl &url ) + } + } + ++ //TODO: create specific TrackProviders for these: + if( url.protocol() == QLatin1String("http") || url.protocol() == QLatin1String("mms") || + url.protocol() == QLatin1String("smb") ) + return Meta::TrackPtr( new MetaStream::Track( url ) ); +diff --git a/src/core-impl/meta/proxy/MetaProxy.h b/src/core-impl/meta/proxy/MetaProxy.h +index d8329be..060223f 100644 +--- a/src/core-impl/meta/proxy/MetaProxy.h ++++ b/src/core-impl/meta/proxy/MetaProxy.h +@@ -17,6 +17,8 @@ + #ifndef AMAROK_METAPROXY_H + #define AMAROK_METAPROXY_H + ++#include "MetaProxyWorker.h" ++ + #include "core/meta/Meta.h" + #include "core/capabilities/Capability.h" + +@@ -82,6 +84,7 @@ namespace MetaProxy + virtual void setDiscNumber( int discNumber ); + + virtual qint64 length() const; ++ virtual void setLength( qint64 length ); + virtual int filesize() const; + virtual int sampleRate() const; + virtual int bitrate() const; +@@ -110,11 +113,12 @@ namespace MetaProxy + * allows subclasses to create an instance of trackprovider which will only check the TrackProvider + * passed to lookupTrack(TrackProvider*) for the real track. + */ +- Track( const KUrl &url, bool awaitLookupNotification); ++ Track( const KUrl &url, bool awaitLookupNotification ); ++ + /** + * MetaProxy will check the given trackprovider if it can provide the track for the proxy's url. + */ +- void lookupTrack(Collections::TrackProvider *provider); ++ void lookupTrack( Collections::TrackProvider *provider ); + + /** + * MetaProxy will update the proxy with the track. +@@ -123,7 +127,7 @@ namespace MetaProxy + + private: + void init( const KUrl &url, bool awaitLookupNotification ); +- Private * const d; ++ Private *const d; + }; + + } +diff --git a/src/core-impl/meta/proxy/MetaProxy.cpp b/src/core-impl/meta/proxy/MetaProxy.cpp +index d1577a2..6a27f0e 100644 +--- a/src/core-impl/meta/proxy/MetaProxy.cpp ++++ b/src/core-impl/meta/proxy/MetaProxy.cpp +@@ -17,6 +17,7 @@ + #include "core-impl/meta/proxy/MetaProxy.h" + #include "core-impl/meta/proxy/MetaProxy_p.h" + #include "core-impl/meta/proxy/MetaProxy_p.moc" ++#include "core-impl/meta/proxy/MetaProxyWorker.h" + + #include "core/capabilities/EditCapability.h" + +@@ -27,6 +28,7 @@ + #include + + #include ++#include + + using namespace MetaProxy; + +@@ -83,18 +85,20 @@ MetaProxy::Track::init( const KUrl &url, bool awaitLookupNotification ) + d->url = url; + d->proxy = this; + d->cachedLength = 0; +- +- if( !awaitLookupNotification ) +- { +- QObject::connect( CollectionManager::instance(), SIGNAL( trackProviderAdded( Collections::TrackProvider* ) ), d, SLOT( slotNewTrackProvider( Collections::TrackProvider* ) ) ); +- QObject::connect( CollectionManager::instance(), SIGNAL( collectionAdded( Collections::Collection* ) ), d, SLOT( slotNewCollection( Collections::Collection* ) ) ); +- } +- + d->albumPtr = Meta::AlbumPtr( new ProxyAlbum( d ) ); + d->artistPtr = Meta::ArtistPtr( new ProxyArtist( d ) ); + d->genrePtr = Meta::GenrePtr( new ProxyGenre( d ) ); + d->composerPtr = Meta::ComposerPtr( new ProxyComposer( d ) ); + d->yearPtr = Meta::YearPtr( new ProxyYear( d ) ); ++ ++ if( !awaitLookupNotification ) ++ { ++ Worker *worker = new Worker( d->url ); ++ QObject::connect( worker, SIGNAL(finishedLookup( const Meta::TrackPtr & )), ++ d, SLOT(slotUpdateTrack(Meta::TrackPtr)) ); ++ ++ ThreadWeaver::Weaver::instance()->enqueue( worker ); ++ } + } + + MetaProxy::Track::~Track() +@@ -345,6 +349,12 @@ MetaProxy::Track::length() const + return d->cachedLength; + } + ++void ++MetaProxy::Track::setLength( qint64 length ) ++{ ++ d->cachedLength = length; ++} ++ + int + MetaProxy::Track::filesize() const + { +@@ -424,7 +434,7 @@ MetaProxy::Track::inCollection() const + return false; + } + +-Collections::Collection* ++Collections::Collection * + MetaProxy::Track::collection() const + { + if( d->realTrack ) +@@ -450,7 +460,11 @@ MetaProxy::Track::unsubscribe( Meta::Observer *observer ) + void + MetaProxy::Track::lookupTrack( Collections::TrackProvider *provider ) + { +- d->slotNewTrackProvider( provider ); ++ if( provider->possiblyContainsTrack( d->url ) ) ++ { ++ Meta::TrackPtr track = provider->trackForUrl( d->url ); ++ d->slotUpdateTrack( track ); ++ } + } + + void +@@ -470,7 +484,7 @@ MetaProxy::Track::hasCapabilityInterface( Capabilities::Capability::Type type ) + return false; + } + +-Capabilities::Capability* ++Capabilities::Capability * + MetaProxy::Track::createCapabilityInterface( Capabilities::Capability::Type type ) + { + if( d->realTrack ) +@@ -484,7 +498,7 @@ MetaProxy::Track::createCapabilityInterface( Capabilities::Capability::Type type + bool + MetaProxy::Track::operator==( const Meta::Track &track ) const + { +- const MetaProxy::Track *proxy = dynamic_cast( &track ); ++ const MetaProxy::Track *proxy = dynamic_cast( &track ); + if( proxy && d->realTrack ) + return d->realTrack == proxy->d->realTrack; + else if( proxy ) +diff --git a/src/core-impl/meta/proxy/MetaProxyWorker.h b/src/core-impl/meta/proxy/MetaProxyWorker.h +new file mode 100644 +index 0000000..557f29d +--- /dev/null ++++ b/src/core-impl/meta/proxy/MetaProxyWorker.h +@@ -0,0 +1,42 @@ ++/**************************************************************************************** ++ * Copyright (c) 2012 Bart Cerneels * ++ * * ++ * This program 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 2 of the License, or (at your option) any later * ++ * version. * ++ * * ++ * This program 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 * ++ * this program. If not, see . * ++ ****************************************************************************************/ ++ ++#ifndef METAPROXY_METAPROXYWORKER_H ++#define METAPROXY_METAPROXYWORKER_H ++ ++#include ++#include ++ ++namespace MetaProxy { ++ ++class Worker : public Amarok::TrackForUrlWorker ++{ ++ Q_OBJECT ++ public: ++ explicit Worker( const KUrl &url ); ++ ++ //TrackForUrlWorker virtual methods ++ virtual void run(); ++ ++ private slots: ++ void slotNewTrackProvider( Collections::TrackProvider *newTrackProvider ); ++ void slotNewCollection( Collections::Collection *newCollection ); ++ ++}; ++ ++} // namespace MetaProxy ++ ++#endif // METAPROXY_METAPROXYWORKER_H +diff --git a/src/core-impl/meta/proxy/MetaProxyWorker.cpp b/src/core-impl/meta/proxy/MetaProxyWorker.cpp +new file mode 100644 +index 0000000..0cde280 +--- /dev/null ++++ b/src/core-impl/meta/proxy/MetaProxyWorker.cpp +@@ -0,0 +1,82 @@ ++/**************************************************************************************** ++ * Copyright (c) 2012 Bart Cerneels * ++ * * ++ * This program 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 2 of the License, or (at your option) any later * ++ * version. * ++ * * ++ * This program 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 * ++ * this program. If not, see . * ++ ****************************************************************************************/ ++ ++#include "MetaProxyWorker.h" ++ ++#include "core-impl/collections/support/CollectionManager.h" ++ ++namespace MetaProxy { ++ ++Worker::Worker( const KUrl &url ) ++ : Amarok::TrackForUrlWorker( url ) ++{ ++ ++} ++ ++void ++Worker::run() ++{ ++ Meta::TrackPtr track = CollectionManager::instance()->trackForUrl( m_url ); ++ ++ //no TrackProvider has a track for us yet, query new ones that are added. ++ if( track.isNull() ) ++ { ++ //TODO: should only have to connecto to TrackProvider signals. ++ //Each Collection contains a TrackProvider ++ connect( CollectionManager::instance(), ++ SIGNAL(trackProviderAdded( Collections::TrackProvider * )), ++ SLOT(slotNewTrackProvider( Collections::TrackProvider * )) ); ++ connect( CollectionManager::instance(), ++ SIGNAL(collectionAdded( Collections::Collection * )), ++ SLOT(slotNewCollection( Collections::Collection * )) ); ++ ++ return; ++ } ++ ++ emit( finishedLookup( track ) ); ++} ++ ++void ++Worker::slotNewTrackProvider( Collections::TrackProvider *newTrackProvider ) ++{ ++ if( !newTrackProvider ) ++ { ++ return; ++ } ++ ++ if( newTrackProvider->possiblyContainsTrack( m_url ) ) ++ { ++ Meta::TrackPtr track = newTrackProvider->trackForUrl( m_url ); ++ emit( finishedLookup( track ) ); ++ } ++} ++ ++void ++Worker::slotNewCollection( Collections::Collection *newCollection ) ++{ ++ if( !newCollection ) ++ { ++ return; ++ } ++ ++ if( newCollection->possiblyContainsTrack( m_url ) ) ++ { ++ Meta::TrackPtr track = newCollection->trackForUrl( m_url ); ++ emit( finishedLookup( track ) ); ++ } ++} ++ ++} // namespace MetaProxy +diff --git a/src/core-impl/meta/proxy/MetaProxy_p.h b/src/core-impl/meta/proxy/MetaProxy_p.h +index 792675d..ac8efb0 100644 +--- a/src/core-impl/meta/proxy/MetaProxy_p.h ++++ b/src/core-impl/meta/proxy/MetaProxy_p.h +@@ -43,7 +43,7 @@ class MetaProxy::Track::Private : public QObject, public Meta::Observer + + Meta::TrackPtr realTrack; + +- QList observers; ++ QList observers; + + QString cachedArtist; + QString cachedAlbum; +@@ -82,34 +82,6 @@ class MetaProxy::Track::Private : public QObject, public Meta::Observer + } + + public slots: +- void slotNewTrackProvider( Collections::TrackProvider *newTrackProvider ) +- { +- if ( !newTrackProvider ) +- { +- return; +- } +- +- if( newTrackProvider->possiblyContainsTrack( url ) ) +- { +- Meta::TrackPtr track = newTrackProvider->trackForUrl( url ); +- slotUpdateTrack( track ); +- } +- } +- +- void slotNewCollection( Collections::Collection *newCollection ) +- { +- if ( !newCollection ) +- { +- return; +- } +- +- if( newCollection->possiblyContainsTrack( url ) ) +- { +- Meta::TrackPtr track = newCollection->trackForUrl( url ); +- slotUpdateTrack( track ); +- } +- } +- + void slotUpdateTrack( Meta::TrackPtr track ) + { + if( track ) +diff --git a/src/core-impl/playlists/types/file/xspf/XSPFPlaylist.cpp b/src/core-impl/playlists/types/file/xspf/XSPFPlaylist.cpp +index 4cb49fb..01cf1e6 100644 +--- a/src/core-impl/playlists/types/file/xspf/XSPFPlaylist.cpp ++++ b/src/core-impl/playlists/types/file/xspf/XSPFPlaylist.cpp +@@ -233,8 +233,7 @@ XSPFPlaylist::trackCount() const + Meta::TrackList + XSPFPlaylist::tracks() + { +- //If you do not load before, m_tracks +- //can be empty before usage. ++ //If you do not load, m_tracks can be empty before usage. + triggerTrackLoad(); + + return m_tracks; +@@ -251,76 +250,14 @@ XSPFPlaylist::triggerTrackLoad() + + foreach( const XSPFTrack &track, xspfTracks ) + { +- Meta::TrackPtr trackPtr; +- if( !track.identifier.isEmpty() ) +- trackPtr = CollectionManager::instance()->trackForUrl( track.identifier ); +- else +- trackPtr = CollectionManager::instance()->trackForUrl( track.location ); +- if( trackPtr ) +- { +- /** +- * NOTE: If this is a MetaProxy::Track, it probably isn't playable yet, +- * but that's okay. However, it's not a good idea to get another +- * one from the same provider, since the proxy probably means that +- * making one involves quite a bit of work. +- * - Andy Coder +- */ +- if( !trackPtr->isPlayable() && ( typeid( * trackPtr.data() ) != typeid( MetaProxy::Track ) ) ) +- trackPtr = CollectionManager::instance()->trackForUrl( track.identifier ); +- } +- +- if( trackPtr ) +- { +- if( typeid( * trackPtr.data() ) == typeid( MetaStream::Track ) ) +- { +- MetaStream::Track * streamTrack = dynamic_cast ( trackPtr.data() ); +- if ( streamTrack ) +- { +- streamTrack->setTitle( track.title ); +- streamTrack->setAlbum( track.album ); +- streamTrack->setArtist( track.creator ); +- } +- } +- else if( typeid( * trackPtr.data() ) == typeid( Meta::TimecodeTrack ) ) +- { +- Meta::TimecodeTrack * timecodeTrack = +- dynamic_cast( trackPtr.data() ); +- if( timecodeTrack ) +- { +- timecodeTrack->beginMetaDataUpdate(); +- timecodeTrack->setTitle( track.title ); +- timecodeTrack->setAlbum( track.album ); +- timecodeTrack->setArtist( track.creator ); +- timecodeTrack->endMetaDataUpdate(); +- } +- } +- +- m_tracks << trackPtr; +- } +- +- +- // why do we need this? sqlplaylist is not doing this +- // we don't want (probably) unplayable tracks +- // and it causes problems for me (DanielW) as long +- // amarok not respects Track::isPlayable() +- /*else { +- +- MetaProxy::Track *proxyTrack = new MetaProxy::Track( track.location ); +- { +- //Fill in values from xspf.. +- QVariantMap map; +- map.insert( Meta::Field::TITLE, track.title ); +- map.insert( Meta::Field::ALBUM, track.album ); +- map.insert( Meta::Field::ARTIST, track.creator ); +- map.insert( Meta::Field::LENGTH, track.duration ); +- map.insert( Meta::Field::TRACKNUMBER, track.trackNum ); +- map.insert( Meta::Field::URL, track.location ); +- Meta::Field::updateTrack( proxyTrack, map ); +- } +- m_tracks << Meta::TrackPtr( proxyTrack ); +- // m_tracks << CollectionManager::instance()->trackForUrl( track.location ); +- }*/ +- ++ MetaProxy::Track *proxyTrack = new MetaProxy::Track( track.location ); ++ //Fill in values from xspf.. ++ proxyTrack->setName( track.title ); ++ proxyTrack->setAlbum( track.album ); ++ proxyTrack->setArtist( track.creator ); ++ proxyTrack->setLength( track.duration ); ++ proxyTrack->setTrackNumber( track.trackNum ); ++ m_tracks << Meta::TrackPtr( proxyTrack ); + } + + m_tracksLoaded = true; +diff --git a/src/core/collections/support/TrackForUrlWorker.h b/src/core/collections/support/TrackForUrlWorker.h +index 64d23bd..16d764e 100644 +--- a/src/core/collections/support/TrackForUrlWorker.h ++++ b/src/core/collections/support/TrackForUrlWorker.h +@@ -35,17 +35,17 @@ class AMAROK_CORE_EXPORT TrackForUrlWorker : public ThreadWeaver::Job + { + Q_OBJECT + public: +- TrackForUrlWorker ( const KUrl &url ); +- TrackForUrlWorker ( const QString &url ); ++ TrackForUrlWorker( const KUrl &url ); ++ TrackForUrlWorker( const QString &url ); + ~TrackForUrlWorker(); + +- virtual void run () = 0; ++ virtual void run() = 0; + signals: +- void finishedLookup ( const Meta::TrackPtr &track ); ++ void finishedLookup( const Meta::TrackPtr &track ); + + protected: +- KUrl mUrl; +- Meta::TrackPtr mTrack; ++ KUrl m_url; ++ Meta::TrackPtr m_track; + + private slots: + void completeJob(); +diff --git a/src/core/collections/support/TrackForUrlWorker.cpp b/src/core/collections/support/TrackForUrlWorker.cpp +index 7e8f289..28d92bb 100644 +--- a/src/core/collections/support/TrackForUrlWorker.cpp ++++ b/src/core/collections/support/TrackForUrlWorker.cpp +@@ -16,14 +16,18 @@ + + #include "TrackForUrlWorker.h" + +-Amarok::TrackForUrlWorker::TrackForUrlWorker ( const KUrl &url ) : ThreadWeaver::Job(), mUrl ( url ) ++Amarok::TrackForUrlWorker::TrackForUrlWorker( const KUrl &url ) ++ : ThreadWeaver::Job() ++ , m_url( url ) + { +- connect ( this, SIGNAL ( done ( ThreadWeaver::Job* ) ), SLOT ( completeJob() ) ); ++ connect( this, SIGNAL(done( ThreadWeaver::Job * )), SLOT( completeJob()) ); + } + +-Amarok::TrackForUrlWorker::TrackForUrlWorker( const QString &url ) : ThreadWeaver::Job(), mUrl ( KUrl ( url ) ) ++Amarok::TrackForUrlWorker::TrackForUrlWorker( const QString &url ) ++ : ThreadWeaver::Job() ++ , m_url( KUrl( url ) ) + { +- connect ( this, SIGNAL ( done ( ThreadWeaver::Job* ) ), SLOT ( completeJob() ) ); ++ connect( this, SIGNAL(done( ThreadWeaver::Job * )), SLOT( completeJob()) ); + } + + Amarok::TrackForUrlWorker::~TrackForUrlWorker() +@@ -32,6 +36,6 @@ Amarok::TrackForUrlWorker::~TrackForUrlWorker() + void + Amarok::TrackForUrlWorker::completeJob() + { +- emit ( finishedLookup ( mTrack ) ); ++ emit( finishedLookup( m_track ) ); + deleteLater(); + } +diff --git a/src/services/ampache/AmpacheServiceCollection.h b/src/services/ampache/AmpacheServiceCollection.h +index a48c8f2..cc49775 100644 +--- a/src/services/ampache/AmpacheServiceCollection.h ++++ b/src/services/ampache/AmpacheServiceCollection.h +@@ -25,14 +25,16 @@ class AmpacheTrackForUrlWorker : public Amarok::TrackForUrlWorker + { + Q_OBJECT + public: +- AmpacheTrackForUrlWorker( const KUrl &url, MetaProxy::TrackPtr track, const QString &server, const QString &sessionId, ServiceBase* service); ++ AmpacheTrackForUrlWorker( const KUrl &url, MetaProxy::TrackPtr track, ++ const QString &server, const QString &sessionId, ++ ServiceBase *service); + ~AmpacheTrackForUrlWorker(); +- virtual void run (); ++ virtual void run(); + void parseTrack( const QString &xml ); + signals: + void authenticationNeeded(); + private: +- MetaProxy::TrackPtr mProxy; ++ MetaProxy::TrackPtr m_proxy; + int m_urlTrackId; + int m_urlAlbumId; + int m_urlArtistId; +@@ -44,7 +46,7 @@ class AmpacheTrackForUrlWorker : public Amarok::TrackForUrlWorker + QString m_server; + QString m_sessionId; + +- ServiceBase* m_service; ++ ServiceBase *m_service; + }; + + namespace Collections { +@@ -59,11 +61,12 @@ class AmpacheServiceCollection : public ServiceCollection + Q_OBJECT + + public: +- AmpacheServiceCollection( ServiceBase * service, const QString &server, const QString &sessionId ); ++ AmpacheServiceCollection( ServiceBase *service, const QString &server, ++ const QString &sessionId ); + + virtual ~AmpacheServiceCollection(); + +- virtual QueryMaker* queryMaker(); ++ virtual QueryMaker *queryMaker(); + + virtual QString collectionId() const; + virtual QString prettyName() const; +@@ -76,16 +79,13 @@ signals: + + public slots: + void slotAuthenticationNeeded(); +- void slotLookupComplete( const Meta::TrackPtr& ); ++ void slotLookupComplete( const Meta::TrackPtr & ); + + private: +- /*void parseAlbum( const QString &xml ); +- void parseArtist( const QString &xml );*/ +- + QString m_server; + QString m_sessionId; + +- AmpacheTrackForUrlWorker * m_trackForUrlWorker; ++ AmpacheTrackForUrlWorker *m_trackForUrlWorker; + }; + + } //namespace Collections +-- +1.7.5.4 + +diff --git a/src/services/ampache/AmpacheServiceCollection.cpp b/src/services/ampache/AmpacheServiceCollection.cpp +index b684e34..c3b5115 100644 +--- a/src/services/ampache/AmpacheServiceCollection.cpp ++++ b/src/services/ampache/AmpacheServiceCollection.cpp +@@ -27,7 +27,9 @@ + + using namespace Collections; + +-AmpacheServiceCollection::AmpacheServiceCollection( ServiceBase * service, const QString &server, const QString &sessionId ) ++AmpacheServiceCollection::AmpacheServiceCollection( ServiceBase *service, ++ const QString &server, ++ const QString &sessionId ) + : ServiceCollection( service, "AmpacheCollection", "AmpacheCollection" ) + , m_server( server ) + , m_sessionId( sessionId ) +@@ -58,7 +60,7 @@ AmpacheServiceCollection::prettyName() const + } + + bool +-AmpacheServiceCollection::possiblyContainsTrack(const KUrl & url) const ++AmpacheServiceCollection::possiblyContainsTrack( const KUrl &url ) const + { + return url.url().contains( m_server ); + } +@@ -70,77 +72,82 @@ AmpacheServiceCollection::slotAuthenticationNeeded() + } + + Meta::TrackPtr +-AmpacheServiceCollection::trackForUrl( const KUrl & url ) ++AmpacheServiceCollection::trackForUrl( const KUrl &url ) + { +- MetaProxy::Track* ptrack = new MetaProxy::Track( url.url(), true ); +- MetaProxy::TrackPtr trackptr(ptrack); +- AmpacheTrackForUrlWorker * worker = new AmpacheTrackForUrlWorker(url, trackptr, m_server, m_sessionId, service() ); +-// connect( worker, SIGNAL( finishedLookup ( const Meta::TrackPtr& ) ), this, +-// SLOT( slotLookupComplete( const Meta::TrackPtr& ) ) ); +- connect( worker, SIGNAL( authenticationNeeded() ), this, +- SLOT( slotAuthenticationNeeded() ) ); ++ MetaProxy::Track *ptrack = new MetaProxy::Track( url.url(), true ); ++ MetaProxy::TrackPtr trackptr( ptrack ); ++ AmpacheTrackForUrlWorker *worker = new AmpacheTrackForUrlWorker( url, trackptr, ++ m_server, ++ m_sessionId, ++ service() ); ++ connect( worker, SIGNAL(authenticationNeeded()), SLOT(slotAuthenticationNeeded()) ); + ThreadWeaver::Weaver::instance()->enqueue( worker ); + + return Meta::TrackPtr::staticCast( trackptr ); + } ++ + void AmpacheServiceCollection::slotLookupComplete( const Meta::TrackPtr& ) + { + } + + void AmpacheTrackForUrlWorker::parseTrack( const QString &xml ) + { +-// DEBUG_BLOCK +- +-// debug() << "Received track response: " << xml; +- +- //so lets figure out what we got here: ++ //so lets figure out what we got here: + QDomDocument doc( "reply" ); + doc.setContent( xml ); +- QDomElement root = doc.firstChildElement("root"); +- QDomElement song = root.firstChildElement("song"); ++ QDomElement root = doc.firstChildElement( "root" ); ++ QDomElement song = root.firstChildElement( "song" ); + +- m_urlTrackId = song.attribute( "id", "0").toInt(); ++ m_urlTrackId = song.attribute( "id", "0" ).toInt(); + +- QDomElement element = song.firstChildElement("title"); ++ QDomElement element = song.firstChildElement( "title" ); + + QString title = element.text(); + if ( title.isEmpty() ) title = "Unknown"; + +- element = song.firstChildElement("url"); ++ element = song.firstChildElement( "url" ); + + m_urlTrack = new Meta::AmpacheTrack( title, m_service ); + Meta::TrackPtr trackPtr( m_urlTrack ); + +- //debug() << "Adding track: " << title; + m_urlTrack->setUidUrl( element.text() ); + m_urlTrack->setId( m_urlTrackId ); + +- element = song.firstChildElement("time"); ++ element = song.firstChildElement( "time" ); + m_urlTrack->setLength( element.text().toInt() * 1000 ); + +- element = song.firstChildElement("track"); ++ element = song.firstChildElement( "track" ); + m_urlTrack->setTrackNumber( element.text().toInt() ); + +- QDomElement albumElement = song.firstChildElement("album"); +- //m_urlAlbumId = albumElement.attribute( "id", "0").toInt(); ++ QDomElement albumElement = song.firstChildElement( "album" ); ++ m_urlAlbumId = albumElement.attribute( "id", "0" ).toInt(); + +- Meta::AmpacheAlbum * album = new Meta::AmpacheAlbum( albumElement.text() ); ++ Meta::AmpacheAlbum *album = new Meta::AmpacheAlbum( albumElement.text() ); + +- QDomElement artElement = song.firstChildElement("art"); ++ QDomElement artElement = song.firstChildElement( "art" ); + album->setCoverUrl( artElement.text() ); + + album->addTrack( trackPtr ); + m_urlTrack->setAlbumPtr( Meta::AlbumPtr( album ) ); + +- QDomElement artistElement = song.firstChildElement("artist"); +- Meta::ServiceArtist * artist = new Meta::ServiceArtist( artistElement.text() ); ++ QDomElement artistElement = song.firstChildElement( "artist" ); ++ Meta::ServiceArtist *artist = new Meta::ServiceArtist( artistElement.text() ); + + Meta::ArtistPtr artistPtr( artist ); + m_urlTrack->setArtist( artistPtr ); + album->setAlbumArtist( artistPtr ); + } + +-AmpacheTrackForUrlWorker::AmpacheTrackForUrlWorker(const KUrl &url, MetaProxy::TrackPtr track, const QString &server, const QString &sessionId, ServiceBase* service) : Amarok::TrackForUrlWorker(url), mProxy(track), m_server(server), m_sessionId(sessionId), m_service(service) ++AmpacheTrackForUrlWorker::AmpacheTrackForUrlWorker( const KUrl &url, ++ MetaProxy::TrackPtr track, ++ const QString &server, ++ const QString &sessionId, ++ ServiceBase *service ) ++ : Amarok::TrackForUrlWorker( url ) ++ , m_proxy( track ) ++ , m_server( server ) ++ , m_sessionId( sessionId ) ++ , m_service( service ) + { + } + +@@ -150,8 +157,6 @@ AmpacheTrackForUrlWorker::~AmpacheTrackForUrlWorker() + void + AmpacheTrackForUrlWorker::run() + { +- // DEBUG_BLOCK; +- + m_urlTrack = 0; + m_urlAlbum = 0; + m_urlArtist = 0; +@@ -162,9 +167,9 @@ AmpacheTrackForUrlWorker::run() + + //send url_to_song to Ampache + +- QString requestUrl = QString( "%1/server/xml.server.php?action=url_to_song&auth=%2&url=%3") +- . arg( m_server, m_sessionId, QUrl::toPercentEncoding( mUrl.url() ) ); +- // debug() << "request url: " << requestUrl; ++ QString requestUrl = ++ QString( "%1/server/xml.server.php?action=url_to_song&auth=%2&url=%3" ) ++ .arg( m_server, m_sessionId, QUrl::toPercentEncoding( m_url.url() ) ); + + QNetworkRequest req( requestUrl ); + QNetworkReply *reply = The::networkAccessManager()->get( req ); +@@ -178,7 +183,7 @@ AmpacheTrackForUrlWorker::run() + } + } + parseTrack( reply->readAll() ); +- mTrack = Meta::TrackPtr( m_urlTrack ); +- mProxy->updateTrack( mTrack ); ++ m_track = Meta::TrackPtr( m_urlTrack ); ++ m_proxy->updateTrack( m_track ); + reply->deleteLater(); + } diff --git a/amarok-2.5.0-kde48_context_view.patch b/amarok-2.5.0-kde48_context_view.patch new file mode 100644 index 0000000..bc10491 --- /dev/null +++ b/amarok-2.5.0-kde48_context_view.patch @@ -0,0 +1,59 @@ +diff -up amarok-2.5.0/src/context/toolbar/AppletToolbar.cpp.kde48-1 amarok-2.5.0/src/context/toolbar/AppletToolbar.cpp +--- amarok-2.5.0/src/context/toolbar/AppletToolbar.cpp.kde48-1 2011-12-15 01:36:48.000000000 -0600 ++++ amarok-2.5.0/src/context/toolbar/AppletToolbar.cpp 2012-01-27 08:07:40.125916151 -0600 +@@ -67,6 +67,19 @@ Context::AppletToolbar::~AppletToolbar() + } + + void ++ ++Context::AppletToolbar::setContainment( Containment * containment ) ++{ ++ m_cont = containment; ++} ++ ++Context::Containment * ++Context::AppletToolbar::containment() const ++{ ++ return m_cont; ++} ++ ++void + Context::AppletToolbar::resizeEvent( QGraphicsSceneResizeEvent * event ) + { + debug() << "setting layout to" << QRectF( QPointF( 0, 0 ), event->newSize() ); +diff -up amarok-2.5.0/src/context/toolbar/AppletToolbar.h.kde48-1 amarok-2.5.0/src/context/toolbar/AppletToolbar.h +--- amarok-2.5.0/src/context/toolbar/AppletToolbar.h.kde48-1 2011-12-15 01:36:48.000000000 -0600 ++++ amarok-2.5.0/src/context/toolbar/AppletToolbar.h 2012-01-27 08:07:40.123916180 -0600 +@@ -55,6 +55,9 @@ class AppletToolbar : public QGraphicsWi + + void appletRemoved( Plasma::Applet* applet ); + ++ void setContainment( Containment * containment ); ++ Containment* containment() const; ++ + signals: + void showApplet( Plasma::Applet* ); + void appletAddedToToolbar( Plasma::Applet* applet, int loc ); +diff -up amarok-2.5.0/src/context/ToolbarView.cpp.kde48-1 amarok-2.5.0/src/context/ToolbarView.cpp +--- amarok-2.5.0/src/context/ToolbarView.cpp.kde48-1 2011-12-15 01:36:48.000000000 -0600 ++++ amarok-2.5.0/src/context/ToolbarView.cpp 2012-01-27 08:07:40.122916194 -0600 +@@ -74,7 +74,9 @@ Context::ToolbarView::ToolbarView( Plasm + setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); + + // now we create the toolbar +- m_toolbar = new AppletToolbar( containment ); ++ m_toolbar = new AppletToolbar(0); ++ scene->addItem(m_toolbar.data()); ++ m_toolbar.data()->setContainment( qobject_cast(containment) ); + m_toolbar.data()->setZValue( m_toolbar.data()->zValue() + 1000 ); + m_toolbar.data()->setPos( TOOLBAR_X_OFFSET, 0 ); + +@@ -96,7 +98,7 @@ Context::ToolbarView::ToolbarView( Plasm + + Context::ToolbarView::~ToolbarView() + { +- ++ delete m_toolbar.data(); + } + + void diff --git a/amarok-2.5.0-onlinedoc.patch b/amarok-2.5.0-onlinedoc.patch new file mode 100644 index 0000000..dc731d4 --- /dev/null +++ b/amarok-2.5.0-onlinedoc.patch @@ -0,0 +1,91 @@ +diff -ur amarok-2.5.0/src/ActionClasses.cpp amarok-2.5.0-onlinedoc/src/ActionClasses.cpp +--- amarok-2.5.0/src/ActionClasses.cpp 2011-12-15 08:36:48.000000000 +0100 ++++ amarok-2.5.0-onlinedoc/src/ActionClasses.cpp 2012-01-29 08:23:50.000000000 +0100 +@@ -31,10 +31,12 @@ + #include "playlist/PlaylistActions.h" + #include "playlist/PlaylistModelStack.h" + ++#include + #include + #include + #include + #include ++#include + #include + #include + +@@ -63,6 +65,7 @@ + using namespace Amarok; + + KHelpMenu *Menu::s_helpMenu = 0; ++OnlineHelpHandler *Menu::s_onlineHelpHandler = 0; + + static void + safePlug( KActionCollection *ac, const char *name, QWidget *w ) +@@ -152,6 +155,20 @@ + + KMenu* menu = s_helpMenu->menu(); + ++ // If amarok-doc is not installed, bring up the online version instead. ++ if ( !QFile::exists( "/usr/share/doc/HTML/en/amarok/index.docbook" ) ) { ++ QAction *contentsAction = s_helpMenu->action( KHelpMenu::menuHelpContents ); ++ // disconnect the default slot which fires up KHelpCenter ++ disconnect( contentsAction, SIGNAL(triggered(bool)), s_helpMenu, SLOT(appHelpActivated()) ); ++ if ( s_onlineHelpHandler == 0 ) ++ s_onlineHelpHandler = new OnlineHelpHandler( parent ); ++ else ++ // ensure no duplicate connection ++ disconnect( contentsAction, SIGNAL(triggered(bool)), s_onlineHelpHandler, SLOT(onlineHelpActivated()) ); ++ // connect our custom slot which fires up a browser on UserBase instead ++ connect( contentsAction, SIGNAL(triggered(bool)), s_onlineHelpHandler, SLOT(onlineHelpActivated()) ); ++ } ++ + // NOTE: We hide "Report Bug..." because we need to add it on our own to name the dialog + // so it can be blacklisted from LikeBack. + s_helpMenu->action( KHelpMenu::menuReportBug )->setVisible( false ); +@@ -164,6 +181,17 @@ + return menu; + } + ++OnlineHelpHandler::OnlineHelpHandler( QObject* parent ) ++ : QObject( parent ) ++{ ++} ++ ++void ++OnlineHelpHandler::onlineHelpActivated() ++{ ++ KToolInvocation::invokeBrowser( "http://userbase.kde.org/Amarok/Manual" ); ++} ++ + ////////////////////////////////////////////////////////////////////////////////////////// + // PlayPauseAction + ////////////////////////////////////////////////////////////////////////////////////////// +diff -ur amarok-2.5.0/src/ActionClasses.h amarok-2.5.0-onlinedoc/src/ActionClasses.h +--- amarok-2.5.0/src/ActionClasses.h 2011-12-15 08:36:48.000000000 +0100 ++++ amarok-2.5.0-onlinedoc/src/ActionClasses.h 2012-01-29 08:08:13.000000000 +0100 +@@ -34,6 +34,16 @@ + + namespace Amarok + { ++ class OnlineHelpHandler : public QObject ++ { ++ Q_OBJECT ++ public: ++ OnlineHelpHandler( QObject* parent ); ++ ++ public slots: ++ void onlineHelpActivated(); ++ }; ++ + class Menu : public KMenu + { + Q_OBJECT +@@ -45,6 +55,7 @@ + private: + static Menu *s_instance; + static KHelpMenu *s_helpMenu; ++ static OnlineHelpHandler *s_onlineHelpHandler; + }; + + class MenuAction : public KAction diff --git a/amarok.spec~ b/amarok.spec~ new file mode 100644 index 0000000..4bdf16e --- /dev/null +++ b/amarok.spec~ @@ -0,0 +1,887 @@ + +Name: amarok +Summary: Media player +Version: 2.5.0 +Release: 8%{?dist} + +# KDE e.V. may determine that future GPL versions are accepted +License: GPLv2 or GPLv3 +Url: http://amarok.kde.org/ +Source0: http://download.kde.org/stable/amarok/%{version}/src/amarok-%{version}.tar.bz2 +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +# Invoke a browser on the online UserBase documentation instead of KHelpCenter +# for the help contents if the amarok-doc subpackage is not installed. +Patch0: amarok-2.5.0-onlinedoc.patch + +#Patch50: amarok-2.2.1.90-qtscript_not_required.patch + +## upstream patches +# https://bugs.kde.org/show_bug.cgi?id=290123 +Patch100: amarok-2.5.0-kde48_context_view.patch +# Load all tracks from XSPF using MetaProxy. +# https://bugs.kde.org/show_bug.cgi?id=295199 +Patch101: 0001-Load-all-tracks-from-XSPF-using-MetaProxy.patch + +BuildRequires: curl-devel +BuildRequires: desktop-file-utils +## non-modular MusicBrainz-based audio fingerprint tag lookup support :( +#BuildRequires: ffmpeg-devel libofa-devel +BuildRequires: gettext +BuildRequires: kdelibs4-devel +BuildRequires: liblastfm-devel +# extra libaio linkage comes from use of mysql_config --libs +BuildRequires: mysql-embedded-devel libaio-devel +BuildRequires: pkgconfig(libgpod-1.0) >= 0.7.0 +BuildRequires: pkgconfig(libmtp) >= 0.3.0 +BuildRequires: pkgconfig(libmygpo-qt) >= 1.0.5 +BuildRequires: pkgconfig(libxml-2.0) +BuildRequires: pkgconfig(loudmouth-1.0) +BuildRequires: pkgconfig(qca2) +BuildRequires: pkgconfig(soprano) +BuildRequires: pkgconfig(taglib) >= 1.6 +BuildRequires: pkgconfig(taglib-extras) >= 1.0.1 + +# not strictly required at buildtime, but if it's not available here, +# then you're hosed at runtime anyway +BuildRequires: qtscriptbindings +Requires: qtscriptbindings%{?_isa} +Requires: %{name}-utils = %{version}-%{release} +Requires: kdebase-runtime%{?_kde4_version: >= %{_kde4_version}} +%if 0%{?fedora} == 14 +# lame, see http://bugzilla.redhat.com/666173 +Requires: libmtp-hal +%endif + +Requires: %{name}-libs%{?_isa} = %{version}-%{release} + +%description +Amarok is a multimedia player with: + - fresh playlist concept, very fast to use, with drag and drop + - plays all formats supported by the various engines + - audio effects, like reverb and compressor + - compatible with the .m3u and .pls formats for playlists + - nice GUI, integrates into the KDE look, but with a unique touch + +%package libs +Summary: Runtime libraries for %{name} +Requires: %{name} = %{version}-%{release} +%{?_qt4_version:Requires: qt4%{?_isa} >= %{_qt4_version}} +%description libs +%{summary}. + +%package utils +Summary: Amarok standalone utilities +Obsoletes: amarok-collectionscanner < 2.0.90-2 +Obsoletes: amarok-utilities < 2.0.96 +%description utils +%{summary}, including amarokcollectionscanner. + +%package doc +Summary: Application handbook, documentation. +# for upgrade path +Obsoletes: amarok < 2.5.0-4 +Requires: amarok = %{version}-%{release} +BuildArch: noarch +%description doc +%{summary}. + + +%prep +%setup -q + +%patch0 -p1 -b .onlinedoc +#patch50 -p1 -b .qtscript_not_required +%patch100 -p1 -b .kde48_context_view +%patch101 -p1 -b .loadall_xspf + + +%build +mkdir -p %{_target_platform} +pushd %{_target_platform} +%{cmake_kde4} .. +popd + +make %{?_smp_mflags} -C %{_target_platform} + + +%install +rm -rf %{buildroot} + +make install/fast DESTDIR=%{buildroot} -C %{_target_platform} + +%find_lang amarok --with-kde --without-mo && mv amarok.lang amarok-doc.lang +%find_lang amarok +%find_lang amarokcollectionscanner_qt +%find_lang amarokpkg && cat amarokpkg.lang >> amarok.lang +%find_lang amarok_scriptengine_qscript && cat amarok_scriptengine_qscript.lang >> amarok.lang + +# unpackaged files +rm -fv %{buildroot}%{_kde4_libdir}/libamarok{-sqlcollection,_taglib,core,lib,plasma,pud,ocsclient,-transcoding}.so + + +%check +desktop-file-validate %{buildroot}%{_kde4_datadir}/applications/kde4/amarok.desktop +desktop-file-validate %{buildroot}%{_kde4_datadir}/applications/kde4/amarok_containers.desktop + + +%post +touch --no-create %{_kde4_iconsdir}/hicolor &> /dev/null || : + +%posttrans +gtk-update-icon-cache %{_kde4_iconsdir}/hicolor &> /dev/null || : +update-desktop-database -q &> /dev/null ||: + +%postun +if [ $1 -eq 0 ] ; then +touch --no-create %{_kde4_iconsdir}/hicolor &> /dev/null || : +gtk-update-icon-cache %{_kde4_iconsdir}/hicolor &> /dev/null || : +update-desktop-database -q &> /dev/null ||: +fi + +%files -f amarok.lang +%doc AUTHORS COPYING ChangeLog README +%{_kde4_bindir}/amarok +%{_kde4_bindir}/amarokpkg +%{_kde4_bindir}/amarok_afttagger +%{_kde4_bindir}/amarokmp3tunesharmonydaemon +%{_kde4_appsdir}/amarok/ +%{_kde4_appsdir}/kconf_update/amarok* +%{_kde4_appsdir}/desktoptheme/Amarok-Mockup/ +%{_kde4_appsdir}/desktoptheme/default/widgets/* +%{_kde4_appsdir}/solid/actions/amarok-play-audiocd.desktop +%{_kde4_configdir}/amarok.knsrc +%{_kde4_configdir}/amarok_homerc +%{_kde4_configdir}/amarokapplets.knsrc +%{_kde4_datadir}/applications/kde4/amarok.desktop +%{_kde4_datadir}/applications/kde4/amarok_containers.desktop +%{_kde4_datadir}/config.kcfg/amarokconfig.kcfg +%{_kde4_datadir}/kde4/services/*.desktop +%{_kde4_datadir}/kde4/services/*.protocol +%{_kde4_datadir}/kde4/services/ServiceMenus/amarok_append.desktop +%{_kde4_datadir}/kde4/servicetypes/*.desktop +%{_kde4_iconsdir}/hicolor/*/*/* +%{_kde4_libdir}/kde4/*.so +%{_datadir}/dbus-1/interfaces/*.xml + +%post libs -p /sbin/ldconfig +%postun libs -p /sbin/ldconfig + +%files libs +%{_kde4_libdir}/libamarokcore.so.1* +%{_kde4_libdir}/libamaroklib.so.1* +%{_kde4_libdir}/libamarokocsclient.so.4* +%{_kde4_libdir}/libamarokpud.so.1* +%{_kde4_libdir}/libamarok-sqlcollection.so.1* +%{_kde4_libdir}/libamarok-transcoding.so.1* +%{_kde4_libdir}/libampache_account_login.so + +%files utils -f amarokcollectionscanner_qt.lang +%{_kde4_bindir}/amarokcollectionscanner + +%files doc -f amarok-doc.lang + + +%changelog +* Tue Mar 13 2012 Rex Dieter 2.5.0-8 +- Load all XSPF tracks (kde#295199) + +* Tue Feb 28 2012 Fedora Release Engineering - 2.5.0-7 +- Rebuilt for c++ ABI breakage + +* Sun Jan 29 2012 Kevin Kofler 2.5.0-6 +- help: invoke a browser on the online UserBase doc if amarok-doc not installed + +* Fri Jan 27 2012 Rex Dieter 2.5.0-5 +- make -doc only handbook, put translations back in main pkg + +* Fri Jan 27 2012 Rex Dieter 2.5.0-4 +- -doc subpkg for large'ish application handbook and translations + +* Fri Jan 27 2012 Rex Dieter 2.5.0-3 +- fix context view when on kde48 (kde#290123) + +* Thu Jan 12 2012 Fedora Release Engineering - 2.5.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Fri Dec 16 2011 Rex Dieter 2.5.0-1 +- 2.5.0 + +* Mon Nov 14 2011 Rex Dieter 2.4.90-1 +- 2.4.90 + +* Wed Nov 09 2011 Rex Dieter 2.4.3-4 +- pkgconfig-style deps +- drop extraneous/old BR's + +* Mon Sep 19 2011 Rex Dieter 2.4.3-3 +- Wikipedia applet crashes (kde#279813) + +* Fri Sep 16 2011 Rex Dieter 2.4.3-2 +- re-enable libgpod support inadvertantly lost in 2.4.1.90-1 + +* Sat Jul 30 2011 Rex Dieter 2.4.3-1 +- 2.4.3 + +* Sun Jul 24 2011 Rex Dieter 2.4.2-2 +- don't query kwallet for lastfm credentials on every track change (kde#278177) + +* Fri Jul 22 2011 Rex Dieter 2.4.2-1 +- 2.4.2 + +* Fri Jul 08 2011 Rex Dieter 2.4.1.90-1 +- 2.4.1.90 +- drop no-longer-needed %%ifarch s390 conditionals + +* Fri Jun 10 2011 Rex Dieter 2.4.1-4 +- drop ancient Obsoletes + +* Fri Jun 10 2011 Rex Dieter 2.4.1-3 +- rebuild (libmtp) + +* Tue May 24 2011 Rex Dieter 2.4.1-2 +- BR: libmygpo-qt-devel + +* Fri May 06 2011 Rex Dieter 2.4.1-1 +- 2.4.1 (final) + +* Wed Mar 23 2011 Rex Dieter 2.4.0.90-2 +- rebuild (mysql) + +* Mon Mar 21 2011 Rex Dieter 2.4.0.90-1 +- 2.4.1 beta1 + +* Wed Feb 09 2011 Rex Dieter 2.4.0-3 +- License: GPLv2 or GPLv3 + +* Mon Feb 07 2011 Fedora Release Engineering - 2.4.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Tue Jan 11 2011 Rex Dieter 2.4.0-1 +- 2.4.0 +- libmtp-hal dependency missing for amarok (#666173) + +* Tue Dec 28 2010 Rex Dieter 2.3.90-3 +- rebuild (mysql) + +* Tue Dec 07 2010 Thomas Janssen 2.3.90-2 +- fixed missing libampache + +* Mon Dec 06 2010 Thomas Janssen 2.3.90-1 +- 2.3.90 (2.4beta1) + +* Tue Nov 30 2010 Rex Dieter 2.3.2-7 +- recognize audio/flac mimetype too (kde#257488) + +* Fri Nov 05 2010 Thomas Janssen 2.3.2-6 +- rebuild for new libxml2 + +* Thu Nov 04 2010 Rex Dieter 2.3.2-5 +- appletsize patch +- fix/improve ipod3 support patch +- another collectionscanner patch + +* Wed Sep 29 2010 jkeating - 2.3.2-4 +- Rebuilt for gcc bug 634757 + +* Fri Sep 24 2010 Thomas Janssen 2.3.2-3 +- added patch to fix scanning qt bug/regression + +* Mon Sep 20 2010 Thomas Janssen 2.3.2-2 +- added patch to fix BPM tags in flac + +* Thu Sep 16 2010 Rex Dieter - 2.3.2-1 +- amarok-2.3.2 + +* Thu Sep 16 2010 Dan Horák - 2.3.1.90-3 +- no libgpod on s390(x) + +* Tue Aug 16 2010 Rex Dieter - 2.3.1.90-2 +- fix/patch installation of amarok handbooks + +* Mon Aug 16 2010 Rex Dieter - 2.3.1.90-1 +- amarok-2.3.1.90 (2.3.2 beta1) + +* Fri Jul 09 2010 Rex Dieter - 2.3.1-2 +- No Notification Area icon for non-KDE desktops (kde#232578,rh#603336) + +* Fri May 28 2010 Rex Dieter - 2.3.1-1 +- amarok-2.3.1 + +* Sat Apr 17 2010 Rex Dieter - 2.3.0.90-1 +- amarok-2.3.0.90 + +* Thu Mar 25 2010 Rex Dieter - 2.3.0-5 +- fix mp3 support logic + +* Mon Mar 22 2010 Rex Dieter - 2.3.0-4 +- rebuild (libgpod) + +* Mon Mar 22 2010 Rex Dieter - 2.3.0-3 +- workaround info applet crasher (kde#227639,kde#229756) + +* Thu Mar 11 2010 Rex Dieter - 2.3.0-2 +- fix Source0 URL +- -libs: drop unused/extraneous kdelibs4 dep + +* Thu Mar 11 2010 Thomas Janssen 2.3.0-1 +- amarok 2.3.0 + +* Sat Feb 13 2010 Rex Dieter - 2.2.2.90-1 +- amarok-2.2.2.90 (2.3beta1) + +* Thu Jan 28 2010 Rex Dieter - 2.2.2-4 +- use %%{_kde4_version} provided elsewhere (kde-filesystem) + +* Sun Jan 10 2010 Rex Dieter - 2.2.2-3 +- collection scan crash patch, take 2 (kde#220532) + +* Fri Jan 08 2010 Rex Dieter - 2.2.2-2 +- collection scan crash patch (kde#220532) + +* Wed Jan 05 2010 Rex Dieter - 2.2.2-1 +- amarok-2.2.2 + +* Thu Dec 10 2009 Rex Dieter - 2.2.1.90-1 +- amarok-2.2.1.90 (2.2.2 beta1) + +* Mon Nov 23 2009 Rex Dieter - 2.2.1-3 +- rebuild (for qt-4.6.0-rc1, f13+) + +* Mon Nov 16 2009 Rex Dieter 2.2.1-2 +- playlist_default_layout_fix.diff (kde#211717) + +* Wed Nov 11 2009 Rex Dieter 2.2.1-1 +- amarok-2.2.1 + +* Thu Oct 08 2009 Rex Dieter 2.2.0-3 +- upstream lyric.patch + +* Fri Oct 02 2009 Rex Dieter 2.2.0-2 +- Requires: kdebase-runtime (need kio_trash, kcm_phonon, etc) + +* Tue Sep 29 2009 Rex Dieter 2.2.0-1 +- amarok-2.2.0 + +* Wed Sep 23 2009 Rex Dieter 2.1.90-2.20090923git +- 20090923git snapshot + +* Mon Sep 21 2009 Rex Dieter 2.1.90-1 +- amarok-2.1.90 (2.2rc1) + +* Thu Sep 17 2009 Rex Dieter 2.1.85-2 +- BR: taglib-devel >= 1.6, taglib-extras-devel >= 1.0 + +* Mon Sep 14 2009 Rex Dieter 2.1.85-1 +- amarok-2.1.85 (2.2beta2) + +* Wed Sep 02 2009 Rex Dieter 2.1.80-2 +- another lyricwiki fix + +* Wed Sep 02 2009 Rex Dieter 2.1.80-1 +- amarok-2.1.80 (2.2beta1) +- -libs subpkg + +* Fri Aug 21 2009 Tomas Mraz - 2.1.1-5 +- rebuilt with new openssl + +* Sat Aug 08 2009 Rex Dieter 2.1.1-4 +- lyricwiki patch (kdebug#202366) + +* Fri Jul 24 2009 Fedora Release Engineering - 2.1.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Tue Jul 07 2009 Rex Dieter 2.1.1-2 +- Requires: qtscriptbindings%%{?_isa} (#510133) + +* Fri Jun 12 2009 Rex Dieter 2.1.1-1 +- amarok-2.1.1 + +* Sat May 30 2009 Rex Dieter 2.1-1 +- amarok-2.1 + +* Mon May 18 2009 Rex Dieter 2.0.96-2.20090518 +- 20090518svn snapshot + +* Mon May 11 2009 Rex Dieter 2.0.96-1 +- amarok-2.9.96 (2.1 beta2) +- -utilities -> -utils + +* Fri Apr 10 2009 Rex Dieter 2.0.90-2 +- -collectionscanner -> -utilities + +* Fri Apr 10 2009 Rex Dieter 2.0.90-1 +- amarok-2.0.90 (amarok-2.1 beta1) + +* Wed Apr 08 2009 Rex Dieter 2.0.2-6 +- fix lastfm (kdebug#188678, rhbz#494871) +- fix qtscriptgenerator/qtscriptbindings deps + +* Tue Apr 07 2009 Rex Dieter 2.0.2-5 +- enable external qtscriptgenerator/qtscriptbindings +- optimize scriptlets + +* Tue Mar 10 2009 Rex Dieter 2.0.2-4 +- Req: qtscriptgenerator (f11+) (not enabled, pending review) +- use desktop-file-validate + +* Fri Mar 06 2009 Rex Dieter 2.0.2-3 +- add minimal qt4,kdelibs4 deps + +* Wed Mar 04 2009 Rex Dieter 2.0.2-1 +- amarok-2.0.2 + +* Tue Feb 24 2009 Than Ngo 2.0.1.1-6 +- fix build issue against gcc-4.4 + +* Mon Feb 23 2009 Fedora Release Engineering - 2.0.1.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Feb 23 2009 Rex Dieter - 2.0.1.1-4 +- qt45 patch + +* Fri Feb 20 2009 Todd Zullinger - 2.0.1.1-3 +- Rebuild against libgpod-0.7.0 +- Drop gtk2-devel BR, libgpod properly requires that now + +* Thu Jan 22 2009 Rex Dieter - 2.0.1.1-2 +- respin (mysql) + +* Fri Jan 09 2009 Rex Dieter - 2.0.1.1-1 +- amarok-2.0.1.1 + +* Tue Jan 06 2009 Rex Dieter - 2.0.1-1 +- amarok-2.0.1 + +* Tue Dec 09 2008 Rex Dieter - 2.0-2 +- respin tarball + +* Fri Dec 05 2008 Rex Dieter - 2.0-1 +- amarok-2.0 (final, first cut) + +* Fri Nov 21 2008 Rex Dieter - 1.98-1 +- amarok-1.98 (2rc1) + +* Fri Oct 31 2008 Rex Dieter - 1.94-2 +- amarok-1.94 (2beta4) + +* Wed Oct 15 2008 Rex Dieter - 1.92.2-1 +- amarok-1.92.2 (2beta3) + +* Thu Oct 02 2008 Rex Dieter - 1.92-2 +- BR: gtk2-devel (gdk-pixbuf ipod artwork support) + +* Thu Oct 02 2008 Rex Dieter - 1.92-1 +- amarok-1.92 (2beta2) + +* Wed Aug 20 2008 Rex Dieter - 1.90-1 +- amarok-1.90 (2beta1) + +* Tue Jul 22 2008 Rex Dieter - 1.86-1 +- amarok-1.86 (amarok2 alpha 2) + +* Wed Jun 11 2008 Dennis Gilmore - 1.4.9.1-4 +- we are building sparc32 as sparcv9 not sparc now fix ifnarch + +* Fri May 2 2008 Rex Dieter - 1.4.9.1-3 +- fix libnjb support (#444940) + +* Thu May 1 2008 Rex Dieter - 1.4.9.1-2.1 +- --with-libvisual fedora-only (epel misses libvisual-plugins) + +* Thu Apr 17 2008 Rex Dieter - 1.4.9.1-2 +- specfile typo (unclosed macro) + +* Tue Apr 15 2008 Rex Dieter - 1.4.9.1-1 +- amarok-1.4.9.1 + +* Wed Mar 12 2008 Rex Dieter - 1.4.8-5 +- -konqueror: drop Obsoletes: %%name < 1.4.8-4 , which breaks + multilib upgrades (#436578) + +* Thu Feb 21 2008 Rex Dieter - 1.4.8-4 +- -konqueror subpkg (#426803) +- fix multiarch conflicts (#340641) + drop Provides: amarok-devel (f9+), add Obsoletes: amarok-devel +- gcc43 patch (#433904) + +* Mon Feb 18 2008 Fedora Release Engineering - 1.4.8-3 +- Autorebuild for GCC 4.3 + +* Wed Jan 09 2008 Rex Dieter 1.4.8-2 +- f9+: don't build/include konq(3) side bar support + +* Thu Dec 20 2007 Rex Dieter 1.4.8-1 +- amarok-1.4.8 + +* Fri Dec 07 2007 Alex Lancaster 1.4.7-14 +- Rebuild for new openssl + +* Thu Nov 29 2007 Rex Dieter 1.4.7-13 +- fix --with-mp4v2 handling (#346011#c5,6) + +* Thu Nov 29 2007 Rex Dieter 1.4.7-12 +- --with-mp4v2 (#346011#c3) +- fix asf/wma support (rh#346011,kde#151733) + +* Wed Nov 21 2007 Rex Dieter 1.4.7-11 +- dynamic mode floods playlist ... (kde #148317) + +* Wed Nov 21 2007 Todd Zullinger 1.4.7-10 +- rebuild for libgpod-0.6.0 + +* Tue Nov 20 2007 Rex Dieter 1.4.7-9 +- cosmetics (cleanup/sort BR's mostly) +- omit "for KDE" from summary/description +- make gst support toggled by macro (disabled by default) + +* Sat Nov 10 2007 Aurelien Bompard 1.4.7-8 +- rebuild + +* Sun Oct 07 2007 Aurelien Bompard 1.4.7-7 +- use xdg-open to start the configured browser + +* Sat Oct 06 2007 Aurelien Bompard 1.4.7-6 +- add "alpha" to the list of archs where HelixPlayer is not available + (bug 318431) + +* Fri Sep 28 2007 Aurelien Bompard 1.4.7-5 +- add patch 1 to fix Fedora bug 242862: Amarok doesn't support transfer + of Unicode filenames to MTP devices + +* Sun Sep 02 2007 Aurelien Bompard 1.4.7-4 +- add patch for kde bug 147126 : amarok freezes when trying to play + mp3 files without mp3 support + +* Fri Aug 24 2007 Todd Zullinger 1.4.7-3 +- rebuild with libgpod-0.5.2 + +* Sat Aug 18 2007 Aurelien Bompard 1.4.7-2 +- version 1.4.7 + +* Sun Aug 05 2007 Aurelien Bompard 1.4.6-3 +- rebuild for new libmtp (bug 250905) + +* Wed Jun 27 2007 Aurelien Bompard 1.4.6-2 +- add explicit Requires on kdelibs >= 3.5.7 to fix bug 245386 + +* Mon Jun 18 2007 Aurelien Bompard 1.4.6-1 +- version 1.4.6 + +* Mon Feb 19 2007 Aurelien Bompard 1.4.5-4 +- have the visualisation subpackage require libvisual-plugins (bug 229131) + +* Thu Feb 15 2007 Aurelien Bompard 1.4.5-3 +- fix patch (provided by upstream) + +* Wed Feb 14 2007 Aurelien Bompard 1.4.5-2 +- add patch to fix CVE-2006-6979 (bug 228138) + +* Sat Feb 03 2007 Aurelien Bompard 1.4.5-1 +- version 1.4.5 +- drop patch0 and patch1 (merged upstream) + +* Thu Jan 25 2007 Aurelien Bompard 1.4.4-7 +- add patch to enable building with libgpod >= 0.4.2, thanks go to Todd Zullinger + +* Wed Jan 17 2007 Aurelien Bompard 1.4.4-6 +- rebuild for new libgpod + +* Thu Jan 11 2007 Aurelien Bompard 1.4.4-5 +- HelixPlayer is not available on Sparc, exclude it from this arch too + (#221058) + +* Tue Dec 19 2006 Aurelien Bompard 1.4.4-4 +- add patch to make lastfm work with xine-lib 1.1.3 (sent by upstream) + +* Sat Dec 09 2006 Aurelien Bompard 1.4.4-3 +- rebuild + +* Wed Dec 06 2006 Aurelien Bompard 1.4.4-2 +- rebuild + +* Fri Oct 27 2006 Aurelien Bompard 1.4.4-1 +- version 1.4.4 +- enable xine support since xine is now in Fedora + +* Sat Oct 07 2006 Aurelien Bompard 1.4.3-6 +- rebuild for new libtunepimp + +* Thu Oct 05 2006 Aurelien Bompard 1.4.3-5 +- add libmtp support + +* Sun Oct 01 2006 Aurelien Bompard 1.4.3-4 +- rebuild + +* Fri Sep 15 2006 Aurelien Bompard 1.4.3-3 +- add patch for playlist encoding + +* Wed Sep 13 2006 Aurelien Bompard 1.4.3-2 +- buildrequires ruby-devel (checked by configure) + +* Wed Sep 13 2006 Aurelien Bompard 1.4.3-1 +- update to 1.4.3 + +* Thu Aug 31 2006 Aurelien Bompard 1.4.2-2 +- add amarok patchset 1 + +* Wed Aug 30 2006 Aurelien Bompard 1.4.2-1 +- update to 1.4.2 +- don't build on x86_64 (requested by the amarok devs) + +* Wed Jul 19 2006 Aurelien Bompard 1.4.1-3 +- fix the gstreamer engine (wrong X-KDE-Amarok-framework-version) + +* Sat Jul 08 2006 Aurelien Bompard 1.4.1-2 +- BuildRequires ruby + +* Sat Jul 08 2006 Aurelien Bompard 1.4.1-1 +- version 1.4.1 +- make it possible to build the gst10 engine with a "--with gst10" switch + +* Wed May 24 2006 Aurelien Bompard 1.4.0-5 +- Require HelixPlayer on archs where it is the only engine available + +* Sun May 21 2006 Aurelien Bompard 1.4.0-4 +- really fix building gst engine on x86_64 + +* Sun May 21 2006 Aurelien Bompard 1.4.0-3 +- missing buildrequires + +* Sun May 21 2006 Aurelien Bompard 1.4.0-2 +- gstreamer engine has been disabled, bring it back in SOURCE1 + where Helix is unavailable (only engine available) + +* Mon May 15 2006 Aurelien Bompard 1.4-1 +- version 1.4 final + +* Mon May 01 2006 Aurelien Bompard 1.4-0.13.rc1 +- rc1 + +* Fri Apr 14 2006 Aurelien Bompard 1.4-0.12.beta3 +- add patch to make Gstreamer sufficient to build (only engine available + on x86_64 + +* Sun Apr 09 2006 Aurelien Bompard 1.4-0.11.beta3 +- drop the non-free bits +- beta 3 (akode has been disabled) + +* Wed Mar 22 2006 Aurelien Bompard 1.4-0.10.beta2 +- enable libgpod support + +* Wed Mar 22 2006 Aurelien Bompard 1.4-0.9.beta2 +- make amarok build even with gstreamer only + +* Sun Mar 05 2006 Aurelien Bompard 1.4-0.8.beta2 +- version 1.4 beta2 + +* Wed Feb 22 2006 Aurelien Bompard 1.4-0.7.beta1 +- disable build of Helix engine on x86_64 + +* Wed Feb 22 2006 Aurelien Bompard 1.4-0.6.beta1 +- remove requirement on HelixPlayer for x86_64, amarok include the headers + +* Wed Feb 22 2006 Aurelien Bompard 1.4-0.5.beta1 +- build Helix engine on x86_64 + +* Wed Feb 22 2006 Aurelien Bompard 1.4-0.4.beta1 +- fix gstramer 0.10 detection again + +* Mon Feb 20 2006 Aurelien Bompard 1.4-0.3.beta1 +- fix gstreamer 0.10 detection + +* Fri Feb 17 2006 Aurelien Bompard 1.4-0.1.beta1 +- fix gstreamer dependency + +* Wed Feb 15 2006 Aurelien Bompard 1.4-0.1.beta1 +- version 1.4-beta1 + +* Sun Feb 12 2006 Aurelien Bompard 1.3.8-2 +- fix BR for gstreamer < 0.10 + +* Sat Jan 21 2006 Aurelien Bompard 1.3.8-1 +- version 1.3.8 + +* Wed Dec 07 2005 Aurelien Bompard 1.3.7-1 +- version 1.3.7 + +* Sun Nov 20 2005 Aurelien Bompard 1.3.6-2 +- build with libtunepimp +- add patch to use libtunepimp 0.4.0 (api changed) + +* Tue Nov 08 2005 Aurelien Bompard 1.3.6-1 +- version 1.3.6 +- BR libGL instead of xorg-x11-Mesa-libGL to prepare for X11R7 + +* Tue Oct 25 2005 Aurelien Bompard 1.3.5-1 +- version 1.3.5 + +* Mon Oct 24 2005 Aurelien Bompard 1.3.4-1 +- version 1.3.4 +- add mysql and postgresql support +- update desktop database +- add %%doc files + +* Thu Oct 13 2005 Aurelien Bompard 1.3.3-1 +- version 1.3.3 +- drop endian patch + +* Wed Sep 21 2005 Aurelien Bompard 1.3.2-1 +- version 1.3.2 +- remove patch 4 (applied upstream) + +* Sat Sep 10 2005 Aurelien Bompard 1.3.1-2 +- add patch from upstream to fix alsasink in gstreamer +- default to autoaudiosink for gstreamer + +* Mon Sep 05 2005 Aurelien Bompard 1.3.1-1 +- version 1.3.1 + +* Tue Aug 23 2005 Aurelien Bompard 1.3-6 +- add version to obsoletes + +* Tue Aug 23 2005 Aurelien Bompard 1.3-5 +- add missing Obsoletes. + +* Mon Aug 22 2005 Aurelien Bompard 1.3-4 +- fix endian declaration on ppc + +* Mon Aug 22 2005 Aurelien Bompard 1.3-3 +- dont build the Helix engine on arches where HelixPlayer is not built + +* Mon Aug 22 2005 Aurelien Bompard 1.3-2 +- disable the akode engine (disabled upstream, see Changelog) +- merge in the Helix engine, since it does not have special Requires. + HelixPlayer or RealPlayer need to be installed manually (either one) +- updated description + +* Mon Aug 22 2005 Aurelien Bompard 1.3-1 +- update to version 1.3 +- add Michel Salim's improvements: + - call gtk-update-icon-cache to (de-)register icons + - new output plugin subpackage: helix + - patched gst and helix plugins' default settings + +* Fri Jul 01 2005 Aurelien Bompard 1.2.4-6 +- remove -arts subpackage, it is useless + +* Thu Jun 2 2005 Michael Schwendt - 1.2.4-6.fc5 +- remove temporary work-around from 1.2.4-2.fc4 +- add patch to fix several missing forward declarations which let + compilation with gcc >= 4.0.0-9 fail +- re-enable SMP make flags + +* Thu Jun 2 2005 Michael Schwendt - 1.2.4-5.fc4 +- disable SMP make flags, since previous release failed miserably on + i386 while the one before it succeeded + +* Thu Jun 2 2005 Michael Schwendt - 1.2.4-4.fc4 +- set QTLIB and QTINC, so configure script does not search for Qt in + QTDIR/lib64 on 64-bit multilib platforms + +* Thu Jun 2 2005 Michael Schwendt - 1.2.4-3.fc4 +- try to fix build problems (#158654): always set QTDIR, always + buildrequire libtool-ltdl-devel, disable %%fedora conditional BR + +* Thu Jun 2 2005 Michael Schwendt - 1.2.4-2.fc4 +- temporarily add patch to work around Fedora Core bug 159090 + +* Mon May 23 2005 Aurelien Bompard 1.2.4-1 +- version 1.2.4 +- use dist tag +- conditional builds for fc3 and fc4 + +* Sun May 22 2005 Jeremy Katz - 1.2.3-2.fc4 +- rebuild on all arches + +* Tue Mar 29 2005 Aurelien Bompard 1.2.3-1.fc4 +- version 1.2.3 +- add libtool to BuildRequirements +- change release tag for FC4 +- add a subpackage for aKode engine + +* Mon Mar 14 2005 Aurelien Bompard 1.2.2-1 +- version 1.2.2 + +* Sat Mar 05 2005 Aurelien Bompard 1.2.1-1 +- version 1.2.1 (bugfixes) + +* Mon Feb 14 2005 Aurelien Bompard 1.2-2 +- show in the GNOME menus too + +* Sun Feb 13 2005 Aurelien Bompard 1.2-1 +- version 1.2 final +- drop --disable-rpath, won't build with it. +- drop epoch + +* Thu Feb 10 2005 Aurelien Bompard 0:1.2-0.2.beta4 +- version 1.2 beta 4 + +* Sat Nov 27 2004 Aurelien Bompard 0:1.2-0.fdr.0.1.beta1 +- version 1.2beta 1 +- minor cleanups +- don't ship the desktop files, split the provided one instead + +* Sun Oct 24 2004 Aurelien Bompard 0:1.1.1-0.fdr.2 +- clean-up buildrequires +- fix --with xine switch +- make a -visualisation subpackage for visualisation plugins +- make a -arts subpackage to lower dependencies + +* Wed Oct 20 2004 Aurelien Bompard 0:1.1.1-0.fdr.1 +- version 1.1.1 + +* Mon Sep 27 2004 Aurelien Bompard 0:1.1.0-0.fdr.2 +- improve buildrequires + +* Sun Sep 26 2004 Aurelien Bompard 0:1.1.0-0.fdr.1 +- version 1.1 final + +* Tue Sep 14 2004 Aurelien Bompard 0:1.1.0-0.fdr.0.1.beta2 +- version 1.1 beta2 + +* Thu Aug 05 2004 Aurelien Bompard 0:1.0.2-0.fdr.1 +- version 1.0.2 +- added new xine engine + +* Tue Jul 13 2004 Aurelien Bompard 0:1.0.1-0.fdr.3 +- remove BR: libselinux-devel: RH fixed the bug + +* Wed Jun 30 2004 Aurelien Bompard 0:1.0.1-0.fdr.2 +- add Requires: xorg-x11-devel because of a qt packaging bug + +* Tue Jun 29 2004 Aurelien Bompard 0:1.0.1-0.fdr.1 +- version 1.0.1 (bugfixes) + +* Mon Jun 21 2004 Aurelien Bompard 0:1.0-0.fdr.3 +- remove BR: xine-lib-devel +- add BR: xorg-x11-Mesa-libGL and libselinux-devel + +* Thu Jun 17 2004 Aurelien Bompard 0:1.0-0.fdr.2 +- add translations + +* Thu Jun 17 2004 Aurelien Bompard 0:1.0-0.fdr.1 +- version 1.0 final + +* Tue Jun 01 2004 Aurelien Bompard 0:1.0-0.fdr.0.1.beta4 +- update to beta4 + +* Sun May 09 2004 Aurelien Bompard 1.0-0.fdr.0.1.beta3 +- version 1.0-beta3 + +* Fri Apr 23 2004 Aurelien Bompard 1.0-0.fdr.0.1.beta2 +- version 1.0-beta2 +- use desktop-file-install +- remove .la files +- remove --enable-final (won't build with it) + +* Thu Apr 15 2004 Aurelien Bompard 1.0-0.fdr.0.1.beta1 +- version 1.0-beta1 +- reduce BuildRequires : arts-devel already requires arts, libvorbis-devel + and audiofile-devel + +* Mon Mar 08 2004 Aurelien Bompard 0:0.9-0.fdr.1 +- version 0.9 + +* Wed Feb 11 2004 Aurelien Bompard 0.8.3-0.fdr.1 +- initial package From 4a3d02227807d1e7ff3835d003dd62f647bb12de Mon Sep 17 00:00:00 2001 From: Keiran Smith Date: Sun, 18 Mar 2012 22:07:13 +0000 Subject: [PATCH 30/32] Remove LastFM Support --- amarok.spec | 1 - amarok.spec~ | 5 ++++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/amarok.spec b/amarok.spec index 7b545df..2578861 100644 --- a/amarok.spec +++ b/amarok.spec @@ -29,7 +29,6 @@ BuildRequires: desktop-file-utils #BuildRequires: ffmpeg-devel libofa-devel BuildRequires: gettext BuildRequires: kdelibs4-devel -BuildRequires: liblastfm-devel # extra libaio linkage comes from use of mysql_config --libs BuildRequires: mysql-embedded-devel libaio-devel BuildRequires: pkgconfig(libgpod-1.0) >= 0.7.0 diff --git a/amarok.spec~ b/amarok.spec~ index 4bdf16e..7b545df 100644 --- a/amarok.spec~ +++ b/amarok.spec~ @@ -2,7 +2,7 @@ Name: amarok Summary: Media player Version: 2.5.0 -Release: 8%{?dist} +Release: 1%{?dist} # KDE e.V. may determine that future GPL versions are accepted License: GPLv2 or GPLv3 @@ -183,6 +183,9 @@ fi %changelog +* Tue Mar 18 2012 Keiran "Affix" Smith 2.5.0-1 +- Update of EPEL Packages + * Tue Mar 13 2012 Rex Dieter 2.5.0-8 - Load all XSPF tracks (kde#295199) From 05747aa07af19949b64dadfd67905d161b90c5d6 Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Thu, 19 Jun 2014 07:28:46 -0500 Subject: [PATCH 31/32] unused file --- amarok.spec~ | 890 --------------------------------------------------- 1 file changed, 890 deletions(-) delete mode 100644 amarok.spec~ diff --git a/amarok.spec~ b/amarok.spec~ deleted file mode 100644 index 7b545df..0000000 --- a/amarok.spec~ +++ /dev/null @@ -1,890 +0,0 @@ - -Name: amarok -Summary: Media player -Version: 2.5.0 -Release: 1%{?dist} - -# KDE e.V. may determine that future GPL versions are accepted -License: GPLv2 or GPLv3 -Url: http://amarok.kde.org/ -Source0: http://download.kde.org/stable/amarok/%{version}/src/amarok-%{version}.tar.bz2 -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) - -# Invoke a browser on the online UserBase documentation instead of KHelpCenter -# for the help contents if the amarok-doc subpackage is not installed. -Patch0: amarok-2.5.0-onlinedoc.patch - -#Patch50: amarok-2.2.1.90-qtscript_not_required.patch - -## upstream patches -# https://bugs.kde.org/show_bug.cgi?id=290123 -Patch100: amarok-2.5.0-kde48_context_view.patch -# Load all tracks from XSPF using MetaProxy. -# https://bugs.kde.org/show_bug.cgi?id=295199 -Patch101: 0001-Load-all-tracks-from-XSPF-using-MetaProxy.patch - -BuildRequires: curl-devel -BuildRequires: desktop-file-utils -## non-modular MusicBrainz-based audio fingerprint tag lookup support :( -#BuildRequires: ffmpeg-devel libofa-devel -BuildRequires: gettext -BuildRequires: kdelibs4-devel -BuildRequires: liblastfm-devel -# extra libaio linkage comes from use of mysql_config --libs -BuildRequires: mysql-embedded-devel libaio-devel -BuildRequires: pkgconfig(libgpod-1.0) >= 0.7.0 -BuildRequires: pkgconfig(libmtp) >= 0.3.0 -BuildRequires: pkgconfig(libmygpo-qt) >= 1.0.5 -BuildRequires: pkgconfig(libxml-2.0) -BuildRequires: pkgconfig(loudmouth-1.0) -BuildRequires: pkgconfig(qca2) -BuildRequires: pkgconfig(soprano) -BuildRequires: pkgconfig(taglib) >= 1.6 -BuildRequires: pkgconfig(taglib-extras) >= 1.0.1 - -# not strictly required at buildtime, but if it's not available here, -# then you're hosed at runtime anyway -BuildRequires: qtscriptbindings -Requires: qtscriptbindings%{?_isa} -Requires: %{name}-utils = %{version}-%{release} -Requires: kdebase-runtime%{?_kde4_version: >= %{_kde4_version}} -%if 0%{?fedora} == 14 -# lame, see http://bugzilla.redhat.com/666173 -Requires: libmtp-hal -%endif - -Requires: %{name}-libs%{?_isa} = %{version}-%{release} - -%description -Amarok is a multimedia player with: - - fresh playlist concept, very fast to use, with drag and drop - - plays all formats supported by the various engines - - audio effects, like reverb and compressor - - compatible with the .m3u and .pls formats for playlists - - nice GUI, integrates into the KDE look, but with a unique touch - -%package libs -Summary: Runtime libraries for %{name} -Requires: %{name} = %{version}-%{release} -%{?_qt4_version:Requires: qt4%{?_isa} >= %{_qt4_version}} -%description libs -%{summary}. - -%package utils -Summary: Amarok standalone utilities -Obsoletes: amarok-collectionscanner < 2.0.90-2 -Obsoletes: amarok-utilities < 2.0.96 -%description utils -%{summary}, including amarokcollectionscanner. - -%package doc -Summary: Application handbook, documentation. -# for upgrade path -Obsoletes: amarok < 2.5.0-4 -Requires: amarok = %{version}-%{release} -BuildArch: noarch -%description doc -%{summary}. - - -%prep -%setup -q - -%patch0 -p1 -b .onlinedoc -#patch50 -p1 -b .qtscript_not_required -%patch100 -p1 -b .kde48_context_view -%patch101 -p1 -b .loadall_xspf - - -%build -mkdir -p %{_target_platform} -pushd %{_target_platform} -%{cmake_kde4} .. -popd - -make %{?_smp_mflags} -C %{_target_platform} - - -%install -rm -rf %{buildroot} - -make install/fast DESTDIR=%{buildroot} -C %{_target_platform} - -%find_lang amarok --with-kde --without-mo && mv amarok.lang amarok-doc.lang -%find_lang amarok -%find_lang amarokcollectionscanner_qt -%find_lang amarokpkg && cat amarokpkg.lang >> amarok.lang -%find_lang amarok_scriptengine_qscript && cat amarok_scriptengine_qscript.lang >> amarok.lang - -# unpackaged files -rm -fv %{buildroot}%{_kde4_libdir}/libamarok{-sqlcollection,_taglib,core,lib,plasma,pud,ocsclient,-transcoding}.so - - -%check -desktop-file-validate %{buildroot}%{_kde4_datadir}/applications/kde4/amarok.desktop -desktop-file-validate %{buildroot}%{_kde4_datadir}/applications/kde4/amarok_containers.desktop - - -%post -touch --no-create %{_kde4_iconsdir}/hicolor &> /dev/null || : - -%posttrans -gtk-update-icon-cache %{_kde4_iconsdir}/hicolor &> /dev/null || : -update-desktop-database -q &> /dev/null ||: - -%postun -if [ $1 -eq 0 ] ; then -touch --no-create %{_kde4_iconsdir}/hicolor &> /dev/null || : -gtk-update-icon-cache %{_kde4_iconsdir}/hicolor &> /dev/null || : -update-desktop-database -q &> /dev/null ||: -fi - -%files -f amarok.lang -%doc AUTHORS COPYING ChangeLog README -%{_kde4_bindir}/amarok -%{_kde4_bindir}/amarokpkg -%{_kde4_bindir}/amarok_afttagger -%{_kde4_bindir}/amarokmp3tunesharmonydaemon -%{_kde4_appsdir}/amarok/ -%{_kde4_appsdir}/kconf_update/amarok* -%{_kde4_appsdir}/desktoptheme/Amarok-Mockup/ -%{_kde4_appsdir}/desktoptheme/default/widgets/* -%{_kde4_appsdir}/solid/actions/amarok-play-audiocd.desktop -%{_kde4_configdir}/amarok.knsrc -%{_kde4_configdir}/amarok_homerc -%{_kde4_configdir}/amarokapplets.knsrc -%{_kde4_datadir}/applications/kde4/amarok.desktop -%{_kde4_datadir}/applications/kde4/amarok_containers.desktop -%{_kde4_datadir}/config.kcfg/amarokconfig.kcfg -%{_kde4_datadir}/kde4/services/*.desktop -%{_kde4_datadir}/kde4/services/*.protocol -%{_kde4_datadir}/kde4/services/ServiceMenus/amarok_append.desktop -%{_kde4_datadir}/kde4/servicetypes/*.desktop -%{_kde4_iconsdir}/hicolor/*/*/* -%{_kde4_libdir}/kde4/*.so -%{_datadir}/dbus-1/interfaces/*.xml - -%post libs -p /sbin/ldconfig -%postun libs -p /sbin/ldconfig - -%files libs -%{_kde4_libdir}/libamarokcore.so.1* -%{_kde4_libdir}/libamaroklib.so.1* -%{_kde4_libdir}/libamarokocsclient.so.4* -%{_kde4_libdir}/libamarokpud.so.1* -%{_kde4_libdir}/libamarok-sqlcollection.so.1* -%{_kde4_libdir}/libamarok-transcoding.so.1* -%{_kde4_libdir}/libampache_account_login.so - -%files utils -f amarokcollectionscanner_qt.lang -%{_kde4_bindir}/amarokcollectionscanner - -%files doc -f amarok-doc.lang - - -%changelog -* Tue Mar 18 2012 Keiran "Affix" Smith 2.5.0-1 -- Update of EPEL Packages - -* Tue Mar 13 2012 Rex Dieter 2.5.0-8 -- Load all XSPF tracks (kde#295199) - -* Tue Feb 28 2012 Fedora Release Engineering - 2.5.0-7 -- Rebuilt for c++ ABI breakage - -* Sun Jan 29 2012 Kevin Kofler 2.5.0-6 -- help: invoke a browser on the online UserBase doc if amarok-doc not installed - -* Fri Jan 27 2012 Rex Dieter 2.5.0-5 -- make -doc only handbook, put translations back in main pkg - -* Fri Jan 27 2012 Rex Dieter 2.5.0-4 -- -doc subpkg for large'ish application handbook and translations - -* Fri Jan 27 2012 Rex Dieter 2.5.0-3 -- fix context view when on kde48 (kde#290123) - -* Thu Jan 12 2012 Fedora Release Engineering - 2.5.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild - -* Fri Dec 16 2011 Rex Dieter 2.5.0-1 -- 2.5.0 - -* Mon Nov 14 2011 Rex Dieter 2.4.90-1 -- 2.4.90 - -* Wed Nov 09 2011 Rex Dieter 2.4.3-4 -- pkgconfig-style deps -- drop extraneous/old BR's - -* Mon Sep 19 2011 Rex Dieter 2.4.3-3 -- Wikipedia applet crashes (kde#279813) - -* Fri Sep 16 2011 Rex Dieter 2.4.3-2 -- re-enable libgpod support inadvertantly lost in 2.4.1.90-1 - -* Sat Jul 30 2011 Rex Dieter 2.4.3-1 -- 2.4.3 - -* Sun Jul 24 2011 Rex Dieter 2.4.2-2 -- don't query kwallet for lastfm credentials on every track change (kde#278177) - -* Fri Jul 22 2011 Rex Dieter 2.4.2-1 -- 2.4.2 - -* Fri Jul 08 2011 Rex Dieter 2.4.1.90-1 -- 2.4.1.90 -- drop no-longer-needed %%ifarch s390 conditionals - -* Fri Jun 10 2011 Rex Dieter 2.4.1-4 -- drop ancient Obsoletes - -* Fri Jun 10 2011 Rex Dieter 2.4.1-3 -- rebuild (libmtp) - -* Tue May 24 2011 Rex Dieter 2.4.1-2 -- BR: libmygpo-qt-devel - -* Fri May 06 2011 Rex Dieter 2.4.1-1 -- 2.4.1 (final) - -* Wed Mar 23 2011 Rex Dieter 2.4.0.90-2 -- rebuild (mysql) - -* Mon Mar 21 2011 Rex Dieter 2.4.0.90-1 -- 2.4.1 beta1 - -* Wed Feb 09 2011 Rex Dieter 2.4.0-3 -- License: GPLv2 or GPLv3 - -* Mon Feb 07 2011 Fedora Release Engineering - 2.4.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild - -* Tue Jan 11 2011 Rex Dieter 2.4.0-1 -- 2.4.0 -- libmtp-hal dependency missing for amarok (#666173) - -* Tue Dec 28 2010 Rex Dieter 2.3.90-3 -- rebuild (mysql) - -* Tue Dec 07 2010 Thomas Janssen 2.3.90-2 -- fixed missing libampache - -* Mon Dec 06 2010 Thomas Janssen 2.3.90-1 -- 2.3.90 (2.4beta1) - -* Tue Nov 30 2010 Rex Dieter 2.3.2-7 -- recognize audio/flac mimetype too (kde#257488) - -* Fri Nov 05 2010 Thomas Janssen 2.3.2-6 -- rebuild for new libxml2 - -* Thu Nov 04 2010 Rex Dieter 2.3.2-5 -- appletsize patch -- fix/improve ipod3 support patch -- another collectionscanner patch - -* Wed Sep 29 2010 jkeating - 2.3.2-4 -- Rebuilt for gcc bug 634757 - -* Fri Sep 24 2010 Thomas Janssen 2.3.2-3 -- added patch to fix scanning qt bug/regression - -* Mon Sep 20 2010 Thomas Janssen 2.3.2-2 -- added patch to fix BPM tags in flac - -* Thu Sep 16 2010 Rex Dieter - 2.3.2-1 -- amarok-2.3.2 - -* Thu Sep 16 2010 Dan Horák - 2.3.1.90-3 -- no libgpod on s390(x) - -* Tue Aug 16 2010 Rex Dieter - 2.3.1.90-2 -- fix/patch installation of amarok handbooks - -* Mon Aug 16 2010 Rex Dieter - 2.3.1.90-1 -- amarok-2.3.1.90 (2.3.2 beta1) - -* Fri Jul 09 2010 Rex Dieter - 2.3.1-2 -- No Notification Area icon for non-KDE desktops (kde#232578,rh#603336) - -* Fri May 28 2010 Rex Dieter - 2.3.1-1 -- amarok-2.3.1 - -* Sat Apr 17 2010 Rex Dieter - 2.3.0.90-1 -- amarok-2.3.0.90 - -* Thu Mar 25 2010 Rex Dieter - 2.3.0-5 -- fix mp3 support logic - -* Mon Mar 22 2010 Rex Dieter - 2.3.0-4 -- rebuild (libgpod) - -* Mon Mar 22 2010 Rex Dieter - 2.3.0-3 -- workaround info applet crasher (kde#227639,kde#229756) - -* Thu Mar 11 2010 Rex Dieter - 2.3.0-2 -- fix Source0 URL -- -libs: drop unused/extraneous kdelibs4 dep - -* Thu Mar 11 2010 Thomas Janssen 2.3.0-1 -- amarok 2.3.0 - -* Sat Feb 13 2010 Rex Dieter - 2.2.2.90-1 -- amarok-2.2.2.90 (2.3beta1) - -* Thu Jan 28 2010 Rex Dieter - 2.2.2-4 -- use %%{_kde4_version} provided elsewhere (kde-filesystem) - -* Sun Jan 10 2010 Rex Dieter - 2.2.2-3 -- collection scan crash patch, take 2 (kde#220532) - -* Fri Jan 08 2010 Rex Dieter - 2.2.2-2 -- collection scan crash patch (kde#220532) - -* Wed Jan 05 2010 Rex Dieter - 2.2.2-1 -- amarok-2.2.2 - -* Thu Dec 10 2009 Rex Dieter - 2.2.1.90-1 -- amarok-2.2.1.90 (2.2.2 beta1) - -* Mon Nov 23 2009 Rex Dieter - 2.2.1-3 -- rebuild (for qt-4.6.0-rc1, f13+) - -* Mon Nov 16 2009 Rex Dieter 2.2.1-2 -- playlist_default_layout_fix.diff (kde#211717) - -* Wed Nov 11 2009 Rex Dieter 2.2.1-1 -- amarok-2.2.1 - -* Thu Oct 08 2009 Rex Dieter 2.2.0-3 -- upstream lyric.patch - -* Fri Oct 02 2009 Rex Dieter 2.2.0-2 -- Requires: kdebase-runtime (need kio_trash, kcm_phonon, etc) - -* Tue Sep 29 2009 Rex Dieter 2.2.0-1 -- amarok-2.2.0 - -* Wed Sep 23 2009 Rex Dieter 2.1.90-2.20090923git -- 20090923git snapshot - -* Mon Sep 21 2009 Rex Dieter 2.1.90-1 -- amarok-2.1.90 (2.2rc1) - -* Thu Sep 17 2009 Rex Dieter 2.1.85-2 -- BR: taglib-devel >= 1.6, taglib-extras-devel >= 1.0 - -* Mon Sep 14 2009 Rex Dieter 2.1.85-1 -- amarok-2.1.85 (2.2beta2) - -* Wed Sep 02 2009 Rex Dieter 2.1.80-2 -- another lyricwiki fix - -* Wed Sep 02 2009 Rex Dieter 2.1.80-1 -- amarok-2.1.80 (2.2beta1) -- -libs subpkg - -* Fri Aug 21 2009 Tomas Mraz - 2.1.1-5 -- rebuilt with new openssl - -* Sat Aug 08 2009 Rex Dieter 2.1.1-4 -- lyricwiki patch (kdebug#202366) - -* Fri Jul 24 2009 Fedora Release Engineering - 2.1.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild - -* Tue Jul 07 2009 Rex Dieter 2.1.1-2 -- Requires: qtscriptbindings%%{?_isa} (#510133) - -* Fri Jun 12 2009 Rex Dieter 2.1.1-1 -- amarok-2.1.1 - -* Sat May 30 2009 Rex Dieter 2.1-1 -- amarok-2.1 - -* Mon May 18 2009 Rex Dieter 2.0.96-2.20090518 -- 20090518svn snapshot - -* Mon May 11 2009 Rex Dieter 2.0.96-1 -- amarok-2.9.96 (2.1 beta2) -- -utilities -> -utils - -* Fri Apr 10 2009 Rex Dieter 2.0.90-2 -- -collectionscanner -> -utilities - -* Fri Apr 10 2009 Rex Dieter 2.0.90-1 -- amarok-2.0.90 (amarok-2.1 beta1) - -* Wed Apr 08 2009 Rex Dieter 2.0.2-6 -- fix lastfm (kdebug#188678, rhbz#494871) -- fix qtscriptgenerator/qtscriptbindings deps - -* Tue Apr 07 2009 Rex Dieter 2.0.2-5 -- enable external qtscriptgenerator/qtscriptbindings -- optimize scriptlets - -* Tue Mar 10 2009 Rex Dieter 2.0.2-4 -- Req: qtscriptgenerator (f11+) (not enabled, pending review) -- use desktop-file-validate - -* Fri Mar 06 2009 Rex Dieter 2.0.2-3 -- add minimal qt4,kdelibs4 deps - -* Wed Mar 04 2009 Rex Dieter 2.0.2-1 -- amarok-2.0.2 - -* Tue Feb 24 2009 Than Ngo 2.0.1.1-6 -- fix build issue against gcc-4.4 - -* Mon Feb 23 2009 Fedora Release Engineering - 2.0.1.1-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild - -* Mon Feb 23 2009 Rex Dieter - 2.0.1.1-4 -- qt45 patch - -* Fri Feb 20 2009 Todd Zullinger - 2.0.1.1-3 -- Rebuild against libgpod-0.7.0 -- Drop gtk2-devel BR, libgpod properly requires that now - -* Thu Jan 22 2009 Rex Dieter - 2.0.1.1-2 -- respin (mysql) - -* Fri Jan 09 2009 Rex Dieter - 2.0.1.1-1 -- amarok-2.0.1.1 - -* Tue Jan 06 2009 Rex Dieter - 2.0.1-1 -- amarok-2.0.1 - -* Tue Dec 09 2008 Rex Dieter - 2.0-2 -- respin tarball - -* Fri Dec 05 2008 Rex Dieter - 2.0-1 -- amarok-2.0 (final, first cut) - -* Fri Nov 21 2008 Rex Dieter - 1.98-1 -- amarok-1.98 (2rc1) - -* Fri Oct 31 2008 Rex Dieter - 1.94-2 -- amarok-1.94 (2beta4) - -* Wed Oct 15 2008 Rex Dieter - 1.92.2-1 -- amarok-1.92.2 (2beta3) - -* Thu Oct 02 2008 Rex Dieter - 1.92-2 -- BR: gtk2-devel (gdk-pixbuf ipod artwork support) - -* Thu Oct 02 2008 Rex Dieter - 1.92-1 -- amarok-1.92 (2beta2) - -* Wed Aug 20 2008 Rex Dieter - 1.90-1 -- amarok-1.90 (2beta1) - -* Tue Jul 22 2008 Rex Dieter - 1.86-1 -- amarok-1.86 (amarok2 alpha 2) - -* Wed Jun 11 2008 Dennis Gilmore - 1.4.9.1-4 -- we are building sparc32 as sparcv9 not sparc now fix ifnarch - -* Fri May 2 2008 Rex Dieter - 1.4.9.1-3 -- fix libnjb support (#444940) - -* Thu May 1 2008 Rex Dieter - 1.4.9.1-2.1 -- --with-libvisual fedora-only (epel misses libvisual-plugins) - -* Thu Apr 17 2008 Rex Dieter - 1.4.9.1-2 -- specfile typo (unclosed macro) - -* Tue Apr 15 2008 Rex Dieter - 1.4.9.1-1 -- amarok-1.4.9.1 - -* Wed Mar 12 2008 Rex Dieter - 1.4.8-5 -- -konqueror: drop Obsoletes: %%name < 1.4.8-4 , which breaks - multilib upgrades (#436578) - -* Thu Feb 21 2008 Rex Dieter - 1.4.8-4 -- -konqueror subpkg (#426803) -- fix multiarch conflicts (#340641) - drop Provides: amarok-devel (f9+), add Obsoletes: amarok-devel -- gcc43 patch (#433904) - -* Mon Feb 18 2008 Fedora Release Engineering - 1.4.8-3 -- Autorebuild for GCC 4.3 - -* Wed Jan 09 2008 Rex Dieter 1.4.8-2 -- f9+: don't build/include konq(3) side bar support - -* Thu Dec 20 2007 Rex Dieter 1.4.8-1 -- amarok-1.4.8 - -* Fri Dec 07 2007 Alex Lancaster 1.4.7-14 -- Rebuild for new openssl - -* Thu Nov 29 2007 Rex Dieter 1.4.7-13 -- fix --with-mp4v2 handling (#346011#c5,6) - -* Thu Nov 29 2007 Rex Dieter 1.4.7-12 -- --with-mp4v2 (#346011#c3) -- fix asf/wma support (rh#346011,kde#151733) - -* Wed Nov 21 2007 Rex Dieter 1.4.7-11 -- dynamic mode floods playlist ... (kde #148317) - -* Wed Nov 21 2007 Todd Zullinger 1.4.7-10 -- rebuild for libgpod-0.6.0 - -* Tue Nov 20 2007 Rex Dieter 1.4.7-9 -- cosmetics (cleanup/sort BR's mostly) -- omit "for KDE" from summary/description -- make gst support toggled by macro (disabled by default) - -* Sat Nov 10 2007 Aurelien Bompard 1.4.7-8 -- rebuild - -* Sun Oct 07 2007 Aurelien Bompard 1.4.7-7 -- use xdg-open to start the configured browser - -* Sat Oct 06 2007 Aurelien Bompard 1.4.7-6 -- add "alpha" to the list of archs where HelixPlayer is not available - (bug 318431) - -* Fri Sep 28 2007 Aurelien Bompard 1.4.7-5 -- add patch 1 to fix Fedora bug 242862: Amarok doesn't support transfer - of Unicode filenames to MTP devices - -* Sun Sep 02 2007 Aurelien Bompard 1.4.7-4 -- add patch for kde bug 147126 : amarok freezes when trying to play - mp3 files without mp3 support - -* Fri Aug 24 2007 Todd Zullinger 1.4.7-3 -- rebuild with libgpod-0.5.2 - -* Sat Aug 18 2007 Aurelien Bompard 1.4.7-2 -- version 1.4.7 - -* Sun Aug 05 2007 Aurelien Bompard 1.4.6-3 -- rebuild for new libmtp (bug 250905) - -* Wed Jun 27 2007 Aurelien Bompard 1.4.6-2 -- add explicit Requires on kdelibs >= 3.5.7 to fix bug 245386 - -* Mon Jun 18 2007 Aurelien Bompard 1.4.6-1 -- version 1.4.6 - -* Mon Feb 19 2007 Aurelien Bompard 1.4.5-4 -- have the visualisation subpackage require libvisual-plugins (bug 229131) - -* Thu Feb 15 2007 Aurelien Bompard 1.4.5-3 -- fix patch (provided by upstream) - -* Wed Feb 14 2007 Aurelien Bompard 1.4.5-2 -- add patch to fix CVE-2006-6979 (bug 228138) - -* Sat Feb 03 2007 Aurelien Bompard 1.4.5-1 -- version 1.4.5 -- drop patch0 and patch1 (merged upstream) - -* Thu Jan 25 2007 Aurelien Bompard 1.4.4-7 -- add patch to enable building with libgpod >= 0.4.2, thanks go to Todd Zullinger - -* Wed Jan 17 2007 Aurelien Bompard 1.4.4-6 -- rebuild for new libgpod - -* Thu Jan 11 2007 Aurelien Bompard 1.4.4-5 -- HelixPlayer is not available on Sparc, exclude it from this arch too - (#221058) - -* Tue Dec 19 2006 Aurelien Bompard 1.4.4-4 -- add patch to make lastfm work with xine-lib 1.1.3 (sent by upstream) - -* Sat Dec 09 2006 Aurelien Bompard 1.4.4-3 -- rebuild - -* Wed Dec 06 2006 Aurelien Bompard 1.4.4-2 -- rebuild - -* Fri Oct 27 2006 Aurelien Bompard 1.4.4-1 -- version 1.4.4 -- enable xine support since xine is now in Fedora - -* Sat Oct 07 2006 Aurelien Bompard 1.4.3-6 -- rebuild for new libtunepimp - -* Thu Oct 05 2006 Aurelien Bompard 1.4.3-5 -- add libmtp support - -* Sun Oct 01 2006 Aurelien Bompard 1.4.3-4 -- rebuild - -* Fri Sep 15 2006 Aurelien Bompard 1.4.3-3 -- add patch for playlist encoding - -* Wed Sep 13 2006 Aurelien Bompard 1.4.3-2 -- buildrequires ruby-devel (checked by configure) - -* Wed Sep 13 2006 Aurelien Bompard 1.4.3-1 -- update to 1.4.3 - -* Thu Aug 31 2006 Aurelien Bompard 1.4.2-2 -- add amarok patchset 1 - -* Wed Aug 30 2006 Aurelien Bompard 1.4.2-1 -- update to 1.4.2 -- don't build on x86_64 (requested by the amarok devs) - -* Wed Jul 19 2006 Aurelien Bompard 1.4.1-3 -- fix the gstreamer engine (wrong X-KDE-Amarok-framework-version) - -* Sat Jul 08 2006 Aurelien Bompard 1.4.1-2 -- BuildRequires ruby - -* Sat Jul 08 2006 Aurelien Bompard 1.4.1-1 -- version 1.4.1 -- make it possible to build the gst10 engine with a "--with gst10" switch - -* Wed May 24 2006 Aurelien Bompard 1.4.0-5 -- Require HelixPlayer on archs where it is the only engine available - -* Sun May 21 2006 Aurelien Bompard 1.4.0-4 -- really fix building gst engine on x86_64 - -* Sun May 21 2006 Aurelien Bompard 1.4.0-3 -- missing buildrequires - -* Sun May 21 2006 Aurelien Bompard 1.4.0-2 -- gstreamer engine has been disabled, bring it back in SOURCE1 - where Helix is unavailable (only engine available) - -* Mon May 15 2006 Aurelien Bompard 1.4-1 -- version 1.4 final - -* Mon May 01 2006 Aurelien Bompard 1.4-0.13.rc1 -- rc1 - -* Fri Apr 14 2006 Aurelien Bompard 1.4-0.12.beta3 -- add patch to make Gstreamer sufficient to build (only engine available - on x86_64 - -* Sun Apr 09 2006 Aurelien Bompard 1.4-0.11.beta3 -- drop the non-free bits -- beta 3 (akode has been disabled) - -* Wed Mar 22 2006 Aurelien Bompard 1.4-0.10.beta2 -- enable libgpod support - -* Wed Mar 22 2006 Aurelien Bompard 1.4-0.9.beta2 -- make amarok build even with gstreamer only - -* Sun Mar 05 2006 Aurelien Bompard 1.4-0.8.beta2 -- version 1.4 beta2 - -* Wed Feb 22 2006 Aurelien Bompard 1.4-0.7.beta1 -- disable build of Helix engine on x86_64 - -* Wed Feb 22 2006 Aurelien Bompard 1.4-0.6.beta1 -- remove requirement on HelixPlayer for x86_64, amarok include the headers - -* Wed Feb 22 2006 Aurelien Bompard 1.4-0.5.beta1 -- build Helix engine on x86_64 - -* Wed Feb 22 2006 Aurelien Bompard 1.4-0.4.beta1 -- fix gstramer 0.10 detection again - -* Mon Feb 20 2006 Aurelien Bompard 1.4-0.3.beta1 -- fix gstreamer 0.10 detection - -* Fri Feb 17 2006 Aurelien Bompard 1.4-0.1.beta1 -- fix gstreamer dependency - -* Wed Feb 15 2006 Aurelien Bompard 1.4-0.1.beta1 -- version 1.4-beta1 - -* Sun Feb 12 2006 Aurelien Bompard 1.3.8-2 -- fix BR for gstreamer < 0.10 - -* Sat Jan 21 2006 Aurelien Bompard 1.3.8-1 -- version 1.3.8 - -* Wed Dec 07 2005 Aurelien Bompard 1.3.7-1 -- version 1.3.7 - -* Sun Nov 20 2005 Aurelien Bompard 1.3.6-2 -- build with libtunepimp -- add patch to use libtunepimp 0.4.0 (api changed) - -* Tue Nov 08 2005 Aurelien Bompard 1.3.6-1 -- version 1.3.6 -- BR libGL instead of xorg-x11-Mesa-libGL to prepare for X11R7 - -* Tue Oct 25 2005 Aurelien Bompard 1.3.5-1 -- version 1.3.5 - -* Mon Oct 24 2005 Aurelien Bompard 1.3.4-1 -- version 1.3.4 -- add mysql and postgresql support -- update desktop database -- add %%doc files - -* Thu Oct 13 2005 Aurelien Bompard 1.3.3-1 -- version 1.3.3 -- drop endian patch - -* Wed Sep 21 2005 Aurelien Bompard 1.3.2-1 -- version 1.3.2 -- remove patch 4 (applied upstream) - -* Sat Sep 10 2005 Aurelien Bompard 1.3.1-2 -- add patch from upstream to fix alsasink in gstreamer -- default to autoaudiosink for gstreamer - -* Mon Sep 05 2005 Aurelien Bompard 1.3.1-1 -- version 1.3.1 - -* Tue Aug 23 2005 Aurelien Bompard 1.3-6 -- add version to obsoletes - -* Tue Aug 23 2005 Aurelien Bompard 1.3-5 -- add missing Obsoletes. - -* Mon Aug 22 2005 Aurelien Bompard 1.3-4 -- fix endian declaration on ppc - -* Mon Aug 22 2005 Aurelien Bompard 1.3-3 -- dont build the Helix engine on arches where HelixPlayer is not built - -* Mon Aug 22 2005 Aurelien Bompard 1.3-2 -- disable the akode engine (disabled upstream, see Changelog) -- merge in the Helix engine, since it does not have special Requires. - HelixPlayer or RealPlayer need to be installed manually (either one) -- updated description - -* Mon Aug 22 2005 Aurelien Bompard 1.3-1 -- update to version 1.3 -- add Michel Salim's improvements: - - call gtk-update-icon-cache to (de-)register icons - - new output plugin subpackage: helix - - patched gst and helix plugins' default settings - -* Fri Jul 01 2005 Aurelien Bompard 1.2.4-6 -- remove -arts subpackage, it is useless - -* Thu Jun 2 2005 Michael Schwendt - 1.2.4-6.fc5 -- remove temporary work-around from 1.2.4-2.fc4 -- add patch to fix several missing forward declarations which let - compilation with gcc >= 4.0.0-9 fail -- re-enable SMP make flags - -* Thu Jun 2 2005 Michael Schwendt - 1.2.4-5.fc4 -- disable SMP make flags, since previous release failed miserably on - i386 while the one before it succeeded - -* Thu Jun 2 2005 Michael Schwendt - 1.2.4-4.fc4 -- set QTLIB and QTINC, so configure script does not search for Qt in - QTDIR/lib64 on 64-bit multilib platforms - -* Thu Jun 2 2005 Michael Schwendt - 1.2.4-3.fc4 -- try to fix build problems (#158654): always set QTDIR, always - buildrequire libtool-ltdl-devel, disable %%fedora conditional BR - -* Thu Jun 2 2005 Michael Schwendt - 1.2.4-2.fc4 -- temporarily add patch to work around Fedora Core bug 159090 - -* Mon May 23 2005 Aurelien Bompard 1.2.4-1 -- version 1.2.4 -- use dist tag -- conditional builds for fc3 and fc4 - -* Sun May 22 2005 Jeremy Katz - 1.2.3-2.fc4 -- rebuild on all arches - -* Tue Mar 29 2005 Aurelien Bompard 1.2.3-1.fc4 -- version 1.2.3 -- add libtool to BuildRequirements -- change release tag for FC4 -- add a subpackage for aKode engine - -* Mon Mar 14 2005 Aurelien Bompard 1.2.2-1 -- version 1.2.2 - -* Sat Mar 05 2005 Aurelien Bompard 1.2.1-1 -- version 1.2.1 (bugfixes) - -* Mon Feb 14 2005 Aurelien Bompard 1.2-2 -- show in the GNOME menus too - -* Sun Feb 13 2005 Aurelien Bompard 1.2-1 -- version 1.2 final -- drop --disable-rpath, won't build with it. -- drop epoch - -* Thu Feb 10 2005 Aurelien Bompard 0:1.2-0.2.beta4 -- version 1.2 beta 4 - -* Sat Nov 27 2004 Aurelien Bompard 0:1.2-0.fdr.0.1.beta1 -- version 1.2beta 1 -- minor cleanups -- don't ship the desktop files, split the provided one instead - -* Sun Oct 24 2004 Aurelien Bompard 0:1.1.1-0.fdr.2 -- clean-up buildrequires -- fix --with xine switch -- make a -visualisation subpackage for visualisation plugins -- make a -arts subpackage to lower dependencies - -* Wed Oct 20 2004 Aurelien Bompard 0:1.1.1-0.fdr.1 -- version 1.1.1 - -* Mon Sep 27 2004 Aurelien Bompard 0:1.1.0-0.fdr.2 -- improve buildrequires - -* Sun Sep 26 2004 Aurelien Bompard 0:1.1.0-0.fdr.1 -- version 1.1 final - -* Tue Sep 14 2004 Aurelien Bompard 0:1.1.0-0.fdr.0.1.beta2 -- version 1.1 beta2 - -* Thu Aug 05 2004 Aurelien Bompard 0:1.0.2-0.fdr.1 -- version 1.0.2 -- added new xine engine - -* Tue Jul 13 2004 Aurelien Bompard 0:1.0.1-0.fdr.3 -- remove BR: libselinux-devel: RH fixed the bug - -* Wed Jun 30 2004 Aurelien Bompard 0:1.0.1-0.fdr.2 -- add Requires: xorg-x11-devel because of a qt packaging bug - -* Tue Jun 29 2004 Aurelien Bompard 0:1.0.1-0.fdr.1 -- version 1.0.1 (bugfixes) - -* Mon Jun 21 2004 Aurelien Bompard 0:1.0-0.fdr.3 -- remove BR: xine-lib-devel -- add BR: xorg-x11-Mesa-libGL and libselinux-devel - -* Thu Jun 17 2004 Aurelien Bompard 0:1.0-0.fdr.2 -- add translations - -* Thu Jun 17 2004 Aurelien Bompard 0:1.0-0.fdr.1 -- version 1.0 final - -* Tue Jun 01 2004 Aurelien Bompard 0:1.0-0.fdr.0.1.beta4 -- update to beta4 - -* Sun May 09 2004 Aurelien Bompard 1.0-0.fdr.0.1.beta3 -- version 1.0-beta3 - -* Fri Apr 23 2004 Aurelien Bompard 1.0-0.fdr.0.1.beta2 -- version 1.0-beta2 -- use desktop-file-install -- remove .la files -- remove --enable-final (won't build with it) - -* Thu Apr 15 2004 Aurelien Bompard 1.0-0.fdr.0.1.beta1 -- version 1.0-beta1 -- reduce BuildRequires : arts-devel already requires arts, libvorbis-devel - and audiofile-devel - -* Mon Mar 08 2004 Aurelien Bompard 0:0.9-0.fdr.1 -- version 0.9 - -* Wed Feb 11 2004 Aurelien Bompard 0.8.3-0.fdr.1 -- initial package From f5c265418e6adbef719b32b2b2454e3efd338338 Mon Sep 17 00:00:00 2001 From: Till Maas Date: Sun, 12 Mar 2017 08:30:36 +0100 Subject: [PATCH 32/32] 2017-03-12: Retired orphaned package, because it was orphaned for more than six weeks. --- .gitignore | 2 - ...all-tracks-from-XSPF-using-MetaProxy.patch | 753 --------------- amarok-2.2.1.90-qtscript_not_required.patch | 14 - amarok-2.5.0-kde48_context_view.patch | 59 -- amarok-2.5.0-onlinedoc.patch | 91 -- amarok.spec | 889 ------------------ dead.package | 3 + sources | 1 - 8 files changed, 3 insertions(+), 1809 deletions(-) delete mode 100644 .gitignore delete mode 100644 0001-Load-all-tracks-from-XSPF-using-MetaProxy.patch delete mode 100644 amarok-2.2.1.90-qtscript_not_required.patch delete mode 100644 amarok-2.5.0-kde48_context_view.patch delete mode 100644 amarok-2.5.0-onlinedoc.patch delete mode 100644 amarok.spec create mode 100644 dead.package delete mode 100644 sources diff --git a/.gitignore b/.gitignore deleted file mode 100644 index baf85a5..0000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -amarok-2.3.0.tar.bz2 -/amarok-2.5.0.tar.bz2 diff --git a/0001-Load-all-tracks-from-XSPF-using-MetaProxy.patch b/0001-Load-all-tracks-from-XSPF-using-MetaProxy.patch deleted file mode 100644 index 6ee7849..0000000 --- a/0001-Load-all-tracks-from-XSPF-using-MetaProxy.patch +++ /dev/null @@ -1,753 +0,0 @@ -diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt -index 4241e69..bbe3f75 100644 ---- a/src/CMakeLists.txt -+++ b/src/CMakeLists.txt -@@ -284,6 +284,7 @@ set(libmetaimpl_SRCS - core-impl/meta/multi/MultiTrack.cpp - core-impl/meta/cue/CueFileSupport.cpp - core-impl/meta/proxy/MetaProxy.cpp -+ core-impl/meta/proxy/MetaProxyWorker.cpp - core-impl/meta/stream/Stream.cpp - core-impl/playlists/types/file/PlaylistFile.cpp - core-impl/statistics/providers/url/PermanentUrlStatisticsProvider.cpp -diff --git a/src/core-impl/collections/support/CollectionManager.cpp b/src/core-impl/collections/support/CollectionManager.cpp -index 37fe03a..9085b5a 100644 ---- a/src/core-impl/collections/support/CollectionManager.cpp -+++ b/src/core-impl/collections/support/CollectionManager.cpp -@@ -463,6 +463,7 @@ CollectionManager::trackForUrl( const KUrl &url ) - } - } - -+ //TODO: create specific TrackProviders for these: - if( url.protocol() == QLatin1String("http") || url.protocol() == QLatin1String("mms") || - url.protocol() == QLatin1String("smb") ) - return Meta::TrackPtr( new MetaStream::Track( url ) ); -diff --git a/src/core-impl/meta/proxy/MetaProxy.h b/src/core-impl/meta/proxy/MetaProxy.h -index d8329be..060223f 100644 ---- a/src/core-impl/meta/proxy/MetaProxy.h -+++ b/src/core-impl/meta/proxy/MetaProxy.h -@@ -17,6 +17,8 @@ - #ifndef AMAROK_METAPROXY_H - #define AMAROK_METAPROXY_H - -+#include "MetaProxyWorker.h" -+ - #include "core/meta/Meta.h" - #include "core/capabilities/Capability.h" - -@@ -82,6 +84,7 @@ namespace MetaProxy - virtual void setDiscNumber( int discNumber ); - - virtual qint64 length() const; -+ virtual void setLength( qint64 length ); - virtual int filesize() const; - virtual int sampleRate() const; - virtual int bitrate() const; -@@ -110,11 +113,12 @@ namespace MetaProxy - * allows subclasses to create an instance of trackprovider which will only check the TrackProvider - * passed to lookupTrack(TrackProvider*) for the real track. - */ -- Track( const KUrl &url, bool awaitLookupNotification); -+ Track( const KUrl &url, bool awaitLookupNotification ); -+ - /** - * MetaProxy will check the given trackprovider if it can provide the track for the proxy's url. - */ -- void lookupTrack(Collections::TrackProvider *provider); -+ void lookupTrack( Collections::TrackProvider *provider ); - - /** - * MetaProxy will update the proxy with the track. -@@ -123,7 +127,7 @@ namespace MetaProxy - - private: - void init( const KUrl &url, bool awaitLookupNotification ); -- Private * const d; -+ Private *const d; - }; - - } -diff --git a/src/core-impl/meta/proxy/MetaProxy.cpp b/src/core-impl/meta/proxy/MetaProxy.cpp -index d1577a2..6a27f0e 100644 ---- a/src/core-impl/meta/proxy/MetaProxy.cpp -+++ b/src/core-impl/meta/proxy/MetaProxy.cpp -@@ -17,6 +17,7 @@ - #include "core-impl/meta/proxy/MetaProxy.h" - #include "core-impl/meta/proxy/MetaProxy_p.h" - #include "core-impl/meta/proxy/MetaProxy_p.moc" -+#include "core-impl/meta/proxy/MetaProxyWorker.h" - - #include "core/capabilities/EditCapability.h" - -@@ -27,6 +28,7 @@ - #include - - #include -+#include - - using namespace MetaProxy; - -@@ -83,18 +85,20 @@ MetaProxy::Track::init( const KUrl &url, bool awaitLookupNotification ) - d->url = url; - d->proxy = this; - d->cachedLength = 0; -- -- if( !awaitLookupNotification ) -- { -- QObject::connect( CollectionManager::instance(), SIGNAL( trackProviderAdded( Collections::TrackProvider* ) ), d, SLOT( slotNewTrackProvider( Collections::TrackProvider* ) ) ); -- QObject::connect( CollectionManager::instance(), SIGNAL( collectionAdded( Collections::Collection* ) ), d, SLOT( slotNewCollection( Collections::Collection* ) ) ); -- } -- - d->albumPtr = Meta::AlbumPtr( new ProxyAlbum( d ) ); - d->artistPtr = Meta::ArtistPtr( new ProxyArtist( d ) ); - d->genrePtr = Meta::GenrePtr( new ProxyGenre( d ) ); - d->composerPtr = Meta::ComposerPtr( new ProxyComposer( d ) ); - d->yearPtr = Meta::YearPtr( new ProxyYear( d ) ); -+ -+ if( !awaitLookupNotification ) -+ { -+ Worker *worker = new Worker( d->url ); -+ QObject::connect( worker, SIGNAL(finishedLookup( const Meta::TrackPtr & )), -+ d, SLOT(slotUpdateTrack(Meta::TrackPtr)) ); -+ -+ ThreadWeaver::Weaver::instance()->enqueue( worker ); -+ } - } - - MetaProxy::Track::~Track() -@@ -345,6 +349,12 @@ MetaProxy::Track::length() const - return d->cachedLength; - } - -+void -+MetaProxy::Track::setLength( qint64 length ) -+{ -+ d->cachedLength = length; -+} -+ - int - MetaProxy::Track::filesize() const - { -@@ -424,7 +434,7 @@ MetaProxy::Track::inCollection() const - return false; - } - --Collections::Collection* -+Collections::Collection * - MetaProxy::Track::collection() const - { - if( d->realTrack ) -@@ -450,7 +460,11 @@ MetaProxy::Track::unsubscribe( Meta::Observer *observer ) - void - MetaProxy::Track::lookupTrack( Collections::TrackProvider *provider ) - { -- d->slotNewTrackProvider( provider ); -+ if( provider->possiblyContainsTrack( d->url ) ) -+ { -+ Meta::TrackPtr track = provider->trackForUrl( d->url ); -+ d->slotUpdateTrack( track ); -+ } - } - - void -@@ -470,7 +484,7 @@ MetaProxy::Track::hasCapabilityInterface( Capabilities::Capability::Type type ) - return false; - } - --Capabilities::Capability* -+Capabilities::Capability * - MetaProxy::Track::createCapabilityInterface( Capabilities::Capability::Type type ) - { - if( d->realTrack ) -@@ -484,7 +498,7 @@ MetaProxy::Track::createCapabilityInterface( Capabilities::Capability::Type type - bool - MetaProxy::Track::operator==( const Meta::Track &track ) const - { -- const MetaProxy::Track *proxy = dynamic_cast( &track ); -+ const MetaProxy::Track *proxy = dynamic_cast( &track ); - if( proxy && d->realTrack ) - return d->realTrack == proxy->d->realTrack; - else if( proxy ) -diff --git a/src/core-impl/meta/proxy/MetaProxyWorker.h b/src/core-impl/meta/proxy/MetaProxyWorker.h -new file mode 100644 -index 0000000..557f29d ---- /dev/null -+++ b/src/core-impl/meta/proxy/MetaProxyWorker.h -@@ -0,0 +1,42 @@ -+/**************************************************************************************** -+ * Copyright (c) 2012 Bart Cerneels * -+ * * -+ * This program 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 2 of the License, or (at your option) any later * -+ * version. * -+ * * -+ * This program 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 * -+ * this program. If not, see . * -+ ****************************************************************************************/ -+ -+#ifndef METAPROXY_METAPROXYWORKER_H -+#define METAPROXY_METAPROXYWORKER_H -+ -+#include -+#include -+ -+namespace MetaProxy { -+ -+class Worker : public Amarok::TrackForUrlWorker -+{ -+ Q_OBJECT -+ public: -+ explicit Worker( const KUrl &url ); -+ -+ //TrackForUrlWorker virtual methods -+ virtual void run(); -+ -+ private slots: -+ void slotNewTrackProvider( Collections::TrackProvider *newTrackProvider ); -+ void slotNewCollection( Collections::Collection *newCollection ); -+ -+}; -+ -+} // namespace MetaProxy -+ -+#endif // METAPROXY_METAPROXYWORKER_H -diff --git a/src/core-impl/meta/proxy/MetaProxyWorker.cpp b/src/core-impl/meta/proxy/MetaProxyWorker.cpp -new file mode 100644 -index 0000000..0cde280 ---- /dev/null -+++ b/src/core-impl/meta/proxy/MetaProxyWorker.cpp -@@ -0,0 +1,82 @@ -+/**************************************************************************************** -+ * Copyright (c) 2012 Bart Cerneels * -+ * * -+ * This program 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 2 of the License, or (at your option) any later * -+ * version. * -+ * * -+ * This program 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 * -+ * this program. If not, see . * -+ ****************************************************************************************/ -+ -+#include "MetaProxyWorker.h" -+ -+#include "core-impl/collections/support/CollectionManager.h" -+ -+namespace MetaProxy { -+ -+Worker::Worker( const KUrl &url ) -+ : Amarok::TrackForUrlWorker( url ) -+{ -+ -+} -+ -+void -+Worker::run() -+{ -+ Meta::TrackPtr track = CollectionManager::instance()->trackForUrl( m_url ); -+ -+ //no TrackProvider has a track for us yet, query new ones that are added. -+ if( track.isNull() ) -+ { -+ //TODO: should only have to connecto to TrackProvider signals. -+ //Each Collection contains a TrackProvider -+ connect( CollectionManager::instance(), -+ SIGNAL(trackProviderAdded( Collections::TrackProvider * )), -+ SLOT(slotNewTrackProvider( Collections::TrackProvider * )) ); -+ connect( CollectionManager::instance(), -+ SIGNAL(collectionAdded( Collections::Collection * )), -+ SLOT(slotNewCollection( Collections::Collection * )) ); -+ -+ return; -+ } -+ -+ emit( finishedLookup( track ) ); -+} -+ -+void -+Worker::slotNewTrackProvider( Collections::TrackProvider *newTrackProvider ) -+{ -+ if( !newTrackProvider ) -+ { -+ return; -+ } -+ -+ if( newTrackProvider->possiblyContainsTrack( m_url ) ) -+ { -+ Meta::TrackPtr track = newTrackProvider->trackForUrl( m_url ); -+ emit( finishedLookup( track ) ); -+ } -+} -+ -+void -+Worker::slotNewCollection( Collections::Collection *newCollection ) -+{ -+ if( !newCollection ) -+ { -+ return; -+ } -+ -+ if( newCollection->possiblyContainsTrack( m_url ) ) -+ { -+ Meta::TrackPtr track = newCollection->trackForUrl( m_url ); -+ emit( finishedLookup( track ) ); -+ } -+} -+ -+} // namespace MetaProxy -diff --git a/src/core-impl/meta/proxy/MetaProxy_p.h b/src/core-impl/meta/proxy/MetaProxy_p.h -index 792675d..ac8efb0 100644 ---- a/src/core-impl/meta/proxy/MetaProxy_p.h -+++ b/src/core-impl/meta/proxy/MetaProxy_p.h -@@ -43,7 +43,7 @@ class MetaProxy::Track::Private : public QObject, public Meta::Observer - - Meta::TrackPtr realTrack; - -- QList observers; -+ QList observers; - - QString cachedArtist; - QString cachedAlbum; -@@ -82,34 +82,6 @@ class MetaProxy::Track::Private : public QObject, public Meta::Observer - } - - public slots: -- void slotNewTrackProvider( Collections::TrackProvider *newTrackProvider ) -- { -- if ( !newTrackProvider ) -- { -- return; -- } -- -- if( newTrackProvider->possiblyContainsTrack( url ) ) -- { -- Meta::TrackPtr track = newTrackProvider->trackForUrl( url ); -- slotUpdateTrack( track ); -- } -- } -- -- void slotNewCollection( Collections::Collection *newCollection ) -- { -- if ( !newCollection ) -- { -- return; -- } -- -- if( newCollection->possiblyContainsTrack( url ) ) -- { -- Meta::TrackPtr track = newCollection->trackForUrl( url ); -- slotUpdateTrack( track ); -- } -- } -- - void slotUpdateTrack( Meta::TrackPtr track ) - { - if( track ) -diff --git a/src/core-impl/playlists/types/file/xspf/XSPFPlaylist.cpp b/src/core-impl/playlists/types/file/xspf/XSPFPlaylist.cpp -index 4cb49fb..01cf1e6 100644 ---- a/src/core-impl/playlists/types/file/xspf/XSPFPlaylist.cpp -+++ b/src/core-impl/playlists/types/file/xspf/XSPFPlaylist.cpp -@@ -233,8 +233,7 @@ XSPFPlaylist::trackCount() const - Meta::TrackList - XSPFPlaylist::tracks() - { -- //If you do not load before, m_tracks -- //can be empty before usage. -+ //If you do not load, m_tracks can be empty before usage. - triggerTrackLoad(); - - return m_tracks; -@@ -251,76 +250,14 @@ XSPFPlaylist::triggerTrackLoad() - - foreach( const XSPFTrack &track, xspfTracks ) - { -- Meta::TrackPtr trackPtr; -- if( !track.identifier.isEmpty() ) -- trackPtr = CollectionManager::instance()->trackForUrl( track.identifier ); -- else -- trackPtr = CollectionManager::instance()->trackForUrl( track.location ); -- if( trackPtr ) -- { -- /** -- * NOTE: If this is a MetaProxy::Track, it probably isn't playable yet, -- * but that's okay. However, it's not a good idea to get another -- * one from the same provider, since the proxy probably means that -- * making one involves quite a bit of work. -- * - Andy Coder -- */ -- if( !trackPtr->isPlayable() && ( typeid( * trackPtr.data() ) != typeid( MetaProxy::Track ) ) ) -- trackPtr = CollectionManager::instance()->trackForUrl( track.identifier ); -- } -- -- if( trackPtr ) -- { -- if( typeid( * trackPtr.data() ) == typeid( MetaStream::Track ) ) -- { -- MetaStream::Track * streamTrack = dynamic_cast ( trackPtr.data() ); -- if ( streamTrack ) -- { -- streamTrack->setTitle( track.title ); -- streamTrack->setAlbum( track.album ); -- streamTrack->setArtist( track.creator ); -- } -- } -- else if( typeid( * trackPtr.data() ) == typeid( Meta::TimecodeTrack ) ) -- { -- Meta::TimecodeTrack * timecodeTrack = -- dynamic_cast( trackPtr.data() ); -- if( timecodeTrack ) -- { -- timecodeTrack->beginMetaDataUpdate(); -- timecodeTrack->setTitle( track.title ); -- timecodeTrack->setAlbum( track.album ); -- timecodeTrack->setArtist( track.creator ); -- timecodeTrack->endMetaDataUpdate(); -- } -- } -- -- m_tracks << trackPtr; -- } -- -- -- // why do we need this? sqlplaylist is not doing this -- // we don't want (probably) unplayable tracks -- // and it causes problems for me (DanielW) as long -- // amarok not respects Track::isPlayable() -- /*else { -- -- MetaProxy::Track *proxyTrack = new MetaProxy::Track( track.location ); -- { -- //Fill in values from xspf.. -- QVariantMap map; -- map.insert( Meta::Field::TITLE, track.title ); -- map.insert( Meta::Field::ALBUM, track.album ); -- map.insert( Meta::Field::ARTIST, track.creator ); -- map.insert( Meta::Field::LENGTH, track.duration ); -- map.insert( Meta::Field::TRACKNUMBER, track.trackNum ); -- map.insert( Meta::Field::URL, track.location ); -- Meta::Field::updateTrack( proxyTrack, map ); -- } -- m_tracks << Meta::TrackPtr( proxyTrack ); -- // m_tracks << CollectionManager::instance()->trackForUrl( track.location ); -- }*/ -- -+ MetaProxy::Track *proxyTrack = new MetaProxy::Track( track.location ); -+ //Fill in values from xspf.. -+ proxyTrack->setName( track.title ); -+ proxyTrack->setAlbum( track.album ); -+ proxyTrack->setArtist( track.creator ); -+ proxyTrack->setLength( track.duration ); -+ proxyTrack->setTrackNumber( track.trackNum ); -+ m_tracks << Meta::TrackPtr( proxyTrack ); - } - - m_tracksLoaded = true; -diff --git a/src/core/collections/support/TrackForUrlWorker.h b/src/core/collections/support/TrackForUrlWorker.h -index 64d23bd..16d764e 100644 ---- a/src/core/collections/support/TrackForUrlWorker.h -+++ b/src/core/collections/support/TrackForUrlWorker.h -@@ -35,17 +35,17 @@ class AMAROK_CORE_EXPORT TrackForUrlWorker : public ThreadWeaver::Job - { - Q_OBJECT - public: -- TrackForUrlWorker ( const KUrl &url ); -- TrackForUrlWorker ( const QString &url ); -+ TrackForUrlWorker( const KUrl &url ); -+ TrackForUrlWorker( const QString &url ); - ~TrackForUrlWorker(); - -- virtual void run () = 0; -+ virtual void run() = 0; - signals: -- void finishedLookup ( const Meta::TrackPtr &track ); -+ void finishedLookup( const Meta::TrackPtr &track ); - - protected: -- KUrl mUrl; -- Meta::TrackPtr mTrack; -+ KUrl m_url; -+ Meta::TrackPtr m_track; - - private slots: - void completeJob(); -diff --git a/src/core/collections/support/TrackForUrlWorker.cpp b/src/core/collections/support/TrackForUrlWorker.cpp -index 7e8f289..28d92bb 100644 ---- a/src/core/collections/support/TrackForUrlWorker.cpp -+++ b/src/core/collections/support/TrackForUrlWorker.cpp -@@ -16,14 +16,18 @@ - - #include "TrackForUrlWorker.h" - --Amarok::TrackForUrlWorker::TrackForUrlWorker ( const KUrl &url ) : ThreadWeaver::Job(), mUrl ( url ) -+Amarok::TrackForUrlWorker::TrackForUrlWorker( const KUrl &url ) -+ : ThreadWeaver::Job() -+ , m_url( url ) - { -- connect ( this, SIGNAL ( done ( ThreadWeaver::Job* ) ), SLOT ( completeJob() ) ); -+ connect( this, SIGNAL(done( ThreadWeaver::Job * )), SLOT( completeJob()) ); - } - --Amarok::TrackForUrlWorker::TrackForUrlWorker( const QString &url ) : ThreadWeaver::Job(), mUrl ( KUrl ( url ) ) -+Amarok::TrackForUrlWorker::TrackForUrlWorker( const QString &url ) -+ : ThreadWeaver::Job() -+ , m_url( KUrl( url ) ) - { -- connect ( this, SIGNAL ( done ( ThreadWeaver::Job* ) ), SLOT ( completeJob() ) ); -+ connect( this, SIGNAL(done( ThreadWeaver::Job * )), SLOT( completeJob()) ); - } - - Amarok::TrackForUrlWorker::~TrackForUrlWorker() -@@ -32,6 +36,6 @@ Amarok::TrackForUrlWorker::~TrackForUrlWorker() - void - Amarok::TrackForUrlWorker::completeJob() - { -- emit ( finishedLookup ( mTrack ) ); -+ emit( finishedLookup( m_track ) ); - deleteLater(); - } -diff --git a/src/services/ampache/AmpacheServiceCollection.h b/src/services/ampache/AmpacheServiceCollection.h -index a48c8f2..cc49775 100644 ---- a/src/services/ampache/AmpacheServiceCollection.h -+++ b/src/services/ampache/AmpacheServiceCollection.h -@@ -25,14 +25,16 @@ class AmpacheTrackForUrlWorker : public Amarok::TrackForUrlWorker - { - Q_OBJECT - public: -- AmpacheTrackForUrlWorker( const KUrl &url, MetaProxy::TrackPtr track, const QString &server, const QString &sessionId, ServiceBase* service); -+ AmpacheTrackForUrlWorker( const KUrl &url, MetaProxy::TrackPtr track, -+ const QString &server, const QString &sessionId, -+ ServiceBase *service); - ~AmpacheTrackForUrlWorker(); -- virtual void run (); -+ virtual void run(); - void parseTrack( const QString &xml ); - signals: - void authenticationNeeded(); - private: -- MetaProxy::TrackPtr mProxy; -+ MetaProxy::TrackPtr m_proxy; - int m_urlTrackId; - int m_urlAlbumId; - int m_urlArtistId; -@@ -44,7 +46,7 @@ class AmpacheTrackForUrlWorker : public Amarok::TrackForUrlWorker - QString m_server; - QString m_sessionId; - -- ServiceBase* m_service; -+ ServiceBase *m_service; - }; - - namespace Collections { -@@ -59,11 +61,12 @@ class AmpacheServiceCollection : public ServiceCollection - Q_OBJECT - - public: -- AmpacheServiceCollection( ServiceBase * service, const QString &server, const QString &sessionId ); -+ AmpacheServiceCollection( ServiceBase *service, const QString &server, -+ const QString &sessionId ); - - virtual ~AmpacheServiceCollection(); - -- virtual QueryMaker* queryMaker(); -+ virtual QueryMaker *queryMaker(); - - virtual QString collectionId() const; - virtual QString prettyName() const; -@@ -76,16 +79,13 @@ signals: - - public slots: - void slotAuthenticationNeeded(); -- void slotLookupComplete( const Meta::TrackPtr& ); -+ void slotLookupComplete( const Meta::TrackPtr & ); - - private: -- /*void parseAlbum( const QString &xml ); -- void parseArtist( const QString &xml );*/ -- - QString m_server; - QString m_sessionId; - -- AmpacheTrackForUrlWorker * m_trackForUrlWorker; -+ AmpacheTrackForUrlWorker *m_trackForUrlWorker; - }; - - } //namespace Collections --- -1.7.5.4 - -diff --git a/src/services/ampache/AmpacheServiceCollection.cpp b/src/services/ampache/AmpacheServiceCollection.cpp -index b684e34..c3b5115 100644 ---- a/src/services/ampache/AmpacheServiceCollection.cpp -+++ b/src/services/ampache/AmpacheServiceCollection.cpp -@@ -27,7 +27,9 @@ - - using namespace Collections; - --AmpacheServiceCollection::AmpacheServiceCollection( ServiceBase * service, const QString &server, const QString &sessionId ) -+AmpacheServiceCollection::AmpacheServiceCollection( ServiceBase *service, -+ const QString &server, -+ const QString &sessionId ) - : ServiceCollection( service, "AmpacheCollection", "AmpacheCollection" ) - , m_server( server ) - , m_sessionId( sessionId ) -@@ -58,7 +60,7 @@ AmpacheServiceCollection::prettyName() const - } - - bool --AmpacheServiceCollection::possiblyContainsTrack(const KUrl & url) const -+AmpacheServiceCollection::possiblyContainsTrack( const KUrl &url ) const - { - return url.url().contains( m_server ); - } -@@ -70,77 +72,82 @@ AmpacheServiceCollection::slotAuthenticationNeeded() - } - - Meta::TrackPtr --AmpacheServiceCollection::trackForUrl( const KUrl & url ) -+AmpacheServiceCollection::trackForUrl( const KUrl &url ) - { -- MetaProxy::Track* ptrack = new MetaProxy::Track( url.url(), true ); -- MetaProxy::TrackPtr trackptr(ptrack); -- AmpacheTrackForUrlWorker * worker = new AmpacheTrackForUrlWorker(url, trackptr, m_server, m_sessionId, service() ); --// connect( worker, SIGNAL( finishedLookup ( const Meta::TrackPtr& ) ), this, --// SLOT( slotLookupComplete( const Meta::TrackPtr& ) ) ); -- connect( worker, SIGNAL( authenticationNeeded() ), this, -- SLOT( slotAuthenticationNeeded() ) ); -+ MetaProxy::Track *ptrack = new MetaProxy::Track( url.url(), true ); -+ MetaProxy::TrackPtr trackptr( ptrack ); -+ AmpacheTrackForUrlWorker *worker = new AmpacheTrackForUrlWorker( url, trackptr, -+ m_server, -+ m_sessionId, -+ service() ); -+ connect( worker, SIGNAL(authenticationNeeded()), SLOT(slotAuthenticationNeeded()) ); - ThreadWeaver::Weaver::instance()->enqueue( worker ); - - return Meta::TrackPtr::staticCast( trackptr ); - } -+ - void AmpacheServiceCollection::slotLookupComplete( const Meta::TrackPtr& ) - { - } - - void AmpacheTrackForUrlWorker::parseTrack( const QString &xml ) - { --// DEBUG_BLOCK -- --// debug() << "Received track response: " << xml; -- -- //so lets figure out what we got here: -+ //so lets figure out what we got here: - QDomDocument doc( "reply" ); - doc.setContent( xml ); -- QDomElement root = doc.firstChildElement("root"); -- QDomElement song = root.firstChildElement("song"); -+ QDomElement root = doc.firstChildElement( "root" ); -+ QDomElement song = root.firstChildElement( "song" ); - -- m_urlTrackId = song.attribute( "id", "0").toInt(); -+ m_urlTrackId = song.attribute( "id", "0" ).toInt(); - -- QDomElement element = song.firstChildElement("title"); -+ QDomElement element = song.firstChildElement( "title" ); - - QString title = element.text(); - if ( title.isEmpty() ) title = "Unknown"; - -- element = song.firstChildElement("url"); -+ element = song.firstChildElement( "url" ); - - m_urlTrack = new Meta::AmpacheTrack( title, m_service ); - Meta::TrackPtr trackPtr( m_urlTrack ); - -- //debug() << "Adding track: " << title; - m_urlTrack->setUidUrl( element.text() ); - m_urlTrack->setId( m_urlTrackId ); - -- element = song.firstChildElement("time"); -+ element = song.firstChildElement( "time" ); - m_urlTrack->setLength( element.text().toInt() * 1000 ); - -- element = song.firstChildElement("track"); -+ element = song.firstChildElement( "track" ); - m_urlTrack->setTrackNumber( element.text().toInt() ); - -- QDomElement albumElement = song.firstChildElement("album"); -- //m_urlAlbumId = albumElement.attribute( "id", "0").toInt(); -+ QDomElement albumElement = song.firstChildElement( "album" ); -+ m_urlAlbumId = albumElement.attribute( "id", "0" ).toInt(); - -- Meta::AmpacheAlbum * album = new Meta::AmpacheAlbum( albumElement.text() ); -+ Meta::AmpacheAlbum *album = new Meta::AmpacheAlbum( albumElement.text() ); - -- QDomElement artElement = song.firstChildElement("art"); -+ QDomElement artElement = song.firstChildElement( "art" ); - album->setCoverUrl( artElement.text() ); - - album->addTrack( trackPtr ); - m_urlTrack->setAlbumPtr( Meta::AlbumPtr( album ) ); - -- QDomElement artistElement = song.firstChildElement("artist"); -- Meta::ServiceArtist * artist = new Meta::ServiceArtist( artistElement.text() ); -+ QDomElement artistElement = song.firstChildElement( "artist" ); -+ Meta::ServiceArtist *artist = new Meta::ServiceArtist( artistElement.text() ); - - Meta::ArtistPtr artistPtr( artist ); - m_urlTrack->setArtist( artistPtr ); - album->setAlbumArtist( artistPtr ); - } - --AmpacheTrackForUrlWorker::AmpacheTrackForUrlWorker(const KUrl &url, MetaProxy::TrackPtr track, const QString &server, const QString &sessionId, ServiceBase* service) : Amarok::TrackForUrlWorker(url), mProxy(track), m_server(server), m_sessionId(sessionId), m_service(service) -+AmpacheTrackForUrlWorker::AmpacheTrackForUrlWorker( const KUrl &url, -+ MetaProxy::TrackPtr track, -+ const QString &server, -+ const QString &sessionId, -+ ServiceBase *service ) -+ : Amarok::TrackForUrlWorker( url ) -+ , m_proxy( track ) -+ , m_server( server ) -+ , m_sessionId( sessionId ) -+ , m_service( service ) - { - } - -@@ -150,8 +157,6 @@ AmpacheTrackForUrlWorker::~AmpacheTrackForUrlWorker() - void - AmpacheTrackForUrlWorker::run() - { -- // DEBUG_BLOCK; -- - m_urlTrack = 0; - m_urlAlbum = 0; - m_urlArtist = 0; -@@ -162,9 +167,9 @@ AmpacheTrackForUrlWorker::run() - - //send url_to_song to Ampache - -- QString requestUrl = QString( "%1/server/xml.server.php?action=url_to_song&auth=%2&url=%3") -- . arg( m_server, m_sessionId, QUrl::toPercentEncoding( mUrl.url() ) ); -- // debug() << "request url: " << requestUrl; -+ QString requestUrl = -+ QString( "%1/server/xml.server.php?action=url_to_song&auth=%2&url=%3" ) -+ .arg( m_server, m_sessionId, QUrl::toPercentEncoding( m_url.url() ) ); - - QNetworkRequest req( requestUrl ); - QNetworkReply *reply = The::networkAccessManager()->get( req ); -@@ -178,7 +183,7 @@ AmpacheTrackForUrlWorker::run() - } - } - parseTrack( reply->readAll() ); -- mTrack = Meta::TrackPtr( m_urlTrack ); -- mProxy->updateTrack( mTrack ); -+ m_track = Meta::TrackPtr( m_urlTrack ); -+ m_proxy->updateTrack( m_track ); - reply->deleteLater(); - } diff --git a/amarok-2.2.1.90-qtscript_not_required.patch b/amarok-2.2.1.90-qtscript_not_required.patch deleted file mode 100644 index 111c52b..0000000 --- a/amarok-2.2.1.90-qtscript_not_required.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff -up amarok-2.2.1.90/CMakeLists.txt.qtscript_not_required amarok-2.2.1.90/CMakeLists.txt ---- amarok-2.2.1.90/CMakeLists.txt.qtscript_not_required 2009-12-10 04:45:37.000000000 -0600 -+++ amarok-2.2.1.90/CMakeLists.txt 2009-12-10 09:42:21.253183224 -0600 -@@ -75,8 +75,8 @@ if( WITH_PLAYER ) - - macro_log_feature( KDE4_FOUND "kdelibs" "The toolkit Amarok uses to build" "http://www.kde.org" TRUE "4.3.0" "" ) - -- find_package( QtScriptQtBindings REQUIRED ) -- macro_log_feature( QTSCRIPTQTBINDINGS_FOUND "qtscript-qt" "QtScript Qt Bindings" "http://code.google.com/p/qtscriptgenerator/" TRUE "" "" ) -+ macro_optional_find_package( QtScriptQtBindings ) -+ macro_log_feature( QTSCRIPTQTBINDINGS_FOUND "qtscript-qt" "QtScript Qt Bindings" "http://code.google.com/p/qtscriptgenerator/" FALSE "" "" ) - - add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS}) - diff --git a/amarok-2.5.0-kde48_context_view.patch b/amarok-2.5.0-kde48_context_view.patch deleted file mode 100644 index bc10491..0000000 --- a/amarok-2.5.0-kde48_context_view.patch +++ /dev/null @@ -1,59 +0,0 @@ -diff -up amarok-2.5.0/src/context/toolbar/AppletToolbar.cpp.kde48-1 amarok-2.5.0/src/context/toolbar/AppletToolbar.cpp ---- amarok-2.5.0/src/context/toolbar/AppletToolbar.cpp.kde48-1 2011-12-15 01:36:48.000000000 -0600 -+++ amarok-2.5.0/src/context/toolbar/AppletToolbar.cpp 2012-01-27 08:07:40.125916151 -0600 -@@ -67,6 +67,19 @@ Context::AppletToolbar::~AppletToolbar() - } - - void -+ -+Context::AppletToolbar::setContainment( Containment * containment ) -+{ -+ m_cont = containment; -+} -+ -+Context::Containment * -+Context::AppletToolbar::containment() const -+{ -+ return m_cont; -+} -+ -+void - Context::AppletToolbar::resizeEvent( QGraphicsSceneResizeEvent * event ) - { - debug() << "setting layout to" << QRectF( QPointF( 0, 0 ), event->newSize() ); -diff -up amarok-2.5.0/src/context/toolbar/AppletToolbar.h.kde48-1 amarok-2.5.0/src/context/toolbar/AppletToolbar.h ---- amarok-2.5.0/src/context/toolbar/AppletToolbar.h.kde48-1 2011-12-15 01:36:48.000000000 -0600 -+++ amarok-2.5.0/src/context/toolbar/AppletToolbar.h 2012-01-27 08:07:40.123916180 -0600 -@@ -55,6 +55,9 @@ class AppletToolbar : public QGraphicsWi - - void appletRemoved( Plasma::Applet* applet ); - -+ void setContainment( Containment * containment ); -+ Containment* containment() const; -+ - signals: - void showApplet( Plasma::Applet* ); - void appletAddedToToolbar( Plasma::Applet* applet, int loc ); -diff -up amarok-2.5.0/src/context/ToolbarView.cpp.kde48-1 amarok-2.5.0/src/context/ToolbarView.cpp ---- amarok-2.5.0/src/context/ToolbarView.cpp.kde48-1 2011-12-15 01:36:48.000000000 -0600 -+++ amarok-2.5.0/src/context/ToolbarView.cpp 2012-01-27 08:07:40.122916194 -0600 -@@ -74,7 +74,9 @@ Context::ToolbarView::ToolbarView( Plasm - setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); - - // now we create the toolbar -- m_toolbar = new AppletToolbar( containment ); -+ m_toolbar = new AppletToolbar(0); -+ scene->addItem(m_toolbar.data()); -+ m_toolbar.data()->setContainment( qobject_cast(containment) ); - m_toolbar.data()->setZValue( m_toolbar.data()->zValue() + 1000 ); - m_toolbar.data()->setPos( TOOLBAR_X_OFFSET, 0 ); - -@@ -96,7 +98,7 @@ Context::ToolbarView::ToolbarView( Plasm - - Context::ToolbarView::~ToolbarView() - { -- -+ delete m_toolbar.data(); - } - - void diff --git a/amarok-2.5.0-onlinedoc.patch b/amarok-2.5.0-onlinedoc.patch deleted file mode 100644 index dc731d4..0000000 --- a/amarok-2.5.0-onlinedoc.patch +++ /dev/null @@ -1,91 +0,0 @@ -diff -ur amarok-2.5.0/src/ActionClasses.cpp amarok-2.5.0-onlinedoc/src/ActionClasses.cpp ---- amarok-2.5.0/src/ActionClasses.cpp 2011-12-15 08:36:48.000000000 +0100 -+++ amarok-2.5.0-onlinedoc/src/ActionClasses.cpp 2012-01-29 08:23:50.000000000 +0100 -@@ -31,10 +31,12 @@ - #include "playlist/PlaylistActions.h" - #include "playlist/PlaylistModelStack.h" - -+#include - #include - #include - #include - #include -+#include - #include - #include - -@@ -63,6 +65,7 @@ - using namespace Amarok; - - KHelpMenu *Menu::s_helpMenu = 0; -+OnlineHelpHandler *Menu::s_onlineHelpHandler = 0; - - static void - safePlug( KActionCollection *ac, const char *name, QWidget *w ) -@@ -152,6 +155,20 @@ - - KMenu* menu = s_helpMenu->menu(); - -+ // If amarok-doc is not installed, bring up the online version instead. -+ if ( !QFile::exists( "/usr/share/doc/HTML/en/amarok/index.docbook" ) ) { -+ QAction *contentsAction = s_helpMenu->action( KHelpMenu::menuHelpContents ); -+ // disconnect the default slot which fires up KHelpCenter -+ disconnect( contentsAction, SIGNAL(triggered(bool)), s_helpMenu, SLOT(appHelpActivated()) ); -+ if ( s_onlineHelpHandler == 0 ) -+ s_onlineHelpHandler = new OnlineHelpHandler( parent ); -+ else -+ // ensure no duplicate connection -+ disconnect( contentsAction, SIGNAL(triggered(bool)), s_onlineHelpHandler, SLOT(onlineHelpActivated()) ); -+ // connect our custom slot which fires up a browser on UserBase instead -+ connect( contentsAction, SIGNAL(triggered(bool)), s_onlineHelpHandler, SLOT(onlineHelpActivated()) ); -+ } -+ - // NOTE: We hide "Report Bug..." because we need to add it on our own to name the dialog - // so it can be blacklisted from LikeBack. - s_helpMenu->action( KHelpMenu::menuReportBug )->setVisible( false ); -@@ -164,6 +181,17 @@ - return menu; - } - -+OnlineHelpHandler::OnlineHelpHandler( QObject* parent ) -+ : QObject( parent ) -+{ -+} -+ -+void -+OnlineHelpHandler::onlineHelpActivated() -+{ -+ KToolInvocation::invokeBrowser( "http://userbase.kde.org/Amarok/Manual" ); -+} -+ - ////////////////////////////////////////////////////////////////////////////////////////// - // PlayPauseAction - ////////////////////////////////////////////////////////////////////////////////////////// -diff -ur amarok-2.5.0/src/ActionClasses.h amarok-2.5.0-onlinedoc/src/ActionClasses.h ---- amarok-2.5.0/src/ActionClasses.h 2011-12-15 08:36:48.000000000 +0100 -+++ amarok-2.5.0-onlinedoc/src/ActionClasses.h 2012-01-29 08:08:13.000000000 +0100 -@@ -34,6 +34,16 @@ - - namespace Amarok - { -+ class OnlineHelpHandler : public QObject -+ { -+ Q_OBJECT -+ public: -+ OnlineHelpHandler( QObject* parent ); -+ -+ public slots: -+ void onlineHelpActivated(); -+ }; -+ - class Menu : public KMenu - { - Q_OBJECT -@@ -45,6 +55,7 @@ - private: - static Menu *s_instance; - static KHelpMenu *s_helpMenu; -+ static OnlineHelpHandler *s_onlineHelpHandler; - }; - - class MenuAction : public KAction diff --git a/amarok.spec b/amarok.spec deleted file mode 100644 index 2578861..0000000 --- a/amarok.spec +++ /dev/null @@ -1,889 +0,0 @@ - -Name: amarok -Summary: Media player -Version: 2.5.0 -Release: 1%{?dist} - -# KDE e.V. may determine that future GPL versions are accepted -License: GPLv2 or GPLv3 -Url: http://amarok.kde.org/ -Source0: http://download.kde.org/stable/amarok/%{version}/src/amarok-%{version}.tar.bz2 -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) - -# Invoke a browser on the online UserBase documentation instead of KHelpCenter -# for the help contents if the amarok-doc subpackage is not installed. -Patch0: amarok-2.5.0-onlinedoc.patch - -#Patch50: amarok-2.2.1.90-qtscript_not_required.patch - -## upstream patches -# https://bugs.kde.org/show_bug.cgi?id=290123 -Patch100: amarok-2.5.0-kde48_context_view.patch -# Load all tracks from XSPF using MetaProxy. -# https://bugs.kde.org/show_bug.cgi?id=295199 -Patch101: 0001-Load-all-tracks-from-XSPF-using-MetaProxy.patch - -BuildRequires: curl-devel -BuildRequires: desktop-file-utils -## non-modular MusicBrainz-based audio fingerprint tag lookup support :( -#BuildRequires: ffmpeg-devel libofa-devel -BuildRequires: gettext -BuildRequires: kdelibs4-devel -# extra libaio linkage comes from use of mysql_config --libs -BuildRequires: mysql-embedded-devel libaio-devel -BuildRequires: pkgconfig(libgpod-1.0) >= 0.7.0 -BuildRequires: pkgconfig(libmtp) >= 0.3.0 -BuildRequires: pkgconfig(libmygpo-qt) >= 1.0.5 -BuildRequires: pkgconfig(libxml-2.0) -BuildRequires: pkgconfig(loudmouth-1.0) -BuildRequires: pkgconfig(qca2) -BuildRequires: pkgconfig(soprano) -BuildRequires: pkgconfig(taglib) >= 1.6 -BuildRequires: pkgconfig(taglib-extras) >= 1.0.1 - -# not strictly required at buildtime, but if it's not available here, -# then you're hosed at runtime anyway -BuildRequires: qtscriptbindings -Requires: qtscriptbindings%{?_isa} -Requires: %{name}-utils = %{version}-%{release} -Requires: kdebase-runtime%{?_kde4_version: >= %{_kde4_version}} -%if 0%{?fedora} == 14 -# lame, see http://bugzilla.redhat.com/666173 -Requires: libmtp-hal -%endif - -Requires: %{name}-libs%{?_isa} = %{version}-%{release} - -%description -Amarok is a multimedia player with: - - fresh playlist concept, very fast to use, with drag and drop - - plays all formats supported by the various engines - - audio effects, like reverb and compressor - - compatible with the .m3u and .pls formats for playlists - - nice GUI, integrates into the KDE look, but with a unique touch - -%package libs -Summary: Runtime libraries for %{name} -Requires: %{name} = %{version}-%{release} -%{?_qt4_version:Requires: qt4%{?_isa} >= %{_qt4_version}} -%description libs -%{summary}. - -%package utils -Summary: Amarok standalone utilities -Obsoletes: amarok-collectionscanner < 2.0.90-2 -Obsoletes: amarok-utilities < 2.0.96 -%description utils -%{summary}, including amarokcollectionscanner. - -%package doc -Summary: Application handbook, documentation. -# for upgrade path -Obsoletes: amarok < 2.5.0-4 -Requires: amarok = %{version}-%{release} -BuildArch: noarch -%description doc -%{summary}. - - -%prep -%setup -q - -%patch0 -p1 -b .onlinedoc -#patch50 -p1 -b .qtscript_not_required -%patch100 -p1 -b .kde48_context_view -%patch101 -p1 -b .loadall_xspf - - -%build -mkdir -p %{_target_platform} -pushd %{_target_platform} -%{cmake_kde4} .. -popd - -make %{?_smp_mflags} -C %{_target_platform} - - -%install -rm -rf %{buildroot} - -make install/fast DESTDIR=%{buildroot} -C %{_target_platform} - -%find_lang amarok --with-kde --without-mo && mv amarok.lang amarok-doc.lang -%find_lang amarok -%find_lang amarokcollectionscanner_qt -%find_lang amarokpkg && cat amarokpkg.lang >> amarok.lang -%find_lang amarok_scriptengine_qscript && cat amarok_scriptengine_qscript.lang >> amarok.lang - -# unpackaged files -rm -fv %{buildroot}%{_kde4_libdir}/libamarok{-sqlcollection,_taglib,core,lib,plasma,pud,ocsclient,-transcoding}.so - - -%check -desktop-file-validate %{buildroot}%{_kde4_datadir}/applications/kde4/amarok.desktop -desktop-file-validate %{buildroot}%{_kde4_datadir}/applications/kde4/amarok_containers.desktop - - -%post -touch --no-create %{_kde4_iconsdir}/hicolor &> /dev/null || : - -%posttrans -gtk-update-icon-cache %{_kde4_iconsdir}/hicolor &> /dev/null || : -update-desktop-database -q &> /dev/null ||: - -%postun -if [ $1 -eq 0 ] ; then -touch --no-create %{_kde4_iconsdir}/hicolor &> /dev/null || : -gtk-update-icon-cache %{_kde4_iconsdir}/hicolor &> /dev/null || : -update-desktop-database -q &> /dev/null ||: -fi - -%files -f amarok.lang -%doc AUTHORS COPYING ChangeLog README -%{_kde4_bindir}/amarok -%{_kde4_bindir}/amarokpkg -%{_kde4_bindir}/amarok_afttagger -%{_kde4_bindir}/amarokmp3tunesharmonydaemon -%{_kde4_appsdir}/amarok/ -%{_kde4_appsdir}/kconf_update/amarok* -%{_kde4_appsdir}/desktoptheme/Amarok-Mockup/ -%{_kde4_appsdir}/desktoptheme/default/widgets/* -%{_kde4_appsdir}/solid/actions/amarok-play-audiocd.desktop -%{_kde4_configdir}/amarok.knsrc -%{_kde4_configdir}/amarok_homerc -%{_kde4_configdir}/amarokapplets.knsrc -%{_kde4_datadir}/applications/kde4/amarok.desktop -%{_kde4_datadir}/applications/kde4/amarok_containers.desktop -%{_kde4_datadir}/config.kcfg/amarokconfig.kcfg -%{_kde4_datadir}/kde4/services/*.desktop -%{_kde4_datadir}/kde4/services/*.protocol -%{_kde4_datadir}/kde4/services/ServiceMenus/amarok_append.desktop -%{_kde4_datadir}/kde4/servicetypes/*.desktop -%{_kde4_iconsdir}/hicolor/*/*/* -%{_kde4_libdir}/kde4/*.so -%{_datadir}/dbus-1/interfaces/*.xml - -%post libs -p /sbin/ldconfig -%postun libs -p /sbin/ldconfig - -%files libs -%{_kde4_libdir}/libamarokcore.so.1* -%{_kde4_libdir}/libamaroklib.so.1* -%{_kde4_libdir}/libamarokocsclient.so.4* -%{_kde4_libdir}/libamarokpud.so.1* -%{_kde4_libdir}/libamarok-sqlcollection.so.1* -%{_kde4_libdir}/libamarok-transcoding.so.1* -%{_kde4_libdir}/libampache_account_login.so - -%files utils -f amarokcollectionscanner_qt.lang -%{_kde4_bindir}/amarokcollectionscanner - -%files doc -f amarok-doc.lang - - -%changelog -* Tue Mar 18 2012 Keiran "Affix" Smith 2.5.0-1 -- Update of EPEL Packages - -* Tue Mar 13 2012 Rex Dieter 2.5.0-8 -- Load all XSPF tracks (kde#295199) - -* Tue Feb 28 2012 Fedora Release Engineering - 2.5.0-7 -- Rebuilt for c++ ABI breakage - -* Sun Jan 29 2012 Kevin Kofler 2.5.0-6 -- help: invoke a browser on the online UserBase doc if amarok-doc not installed - -* Fri Jan 27 2012 Rex Dieter 2.5.0-5 -- make -doc only handbook, put translations back in main pkg - -* Fri Jan 27 2012 Rex Dieter 2.5.0-4 -- -doc subpkg for large'ish application handbook and translations - -* Fri Jan 27 2012 Rex Dieter 2.5.0-3 -- fix context view when on kde48 (kde#290123) - -* Thu Jan 12 2012 Fedora Release Engineering - 2.5.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild - -* Fri Dec 16 2011 Rex Dieter 2.5.0-1 -- 2.5.0 - -* Mon Nov 14 2011 Rex Dieter 2.4.90-1 -- 2.4.90 - -* Wed Nov 09 2011 Rex Dieter 2.4.3-4 -- pkgconfig-style deps -- drop extraneous/old BR's - -* Mon Sep 19 2011 Rex Dieter 2.4.3-3 -- Wikipedia applet crashes (kde#279813) - -* Fri Sep 16 2011 Rex Dieter 2.4.3-2 -- re-enable libgpod support inadvertantly lost in 2.4.1.90-1 - -* Sat Jul 30 2011 Rex Dieter 2.4.3-1 -- 2.4.3 - -* Sun Jul 24 2011 Rex Dieter 2.4.2-2 -- don't query kwallet for lastfm credentials on every track change (kde#278177) - -* Fri Jul 22 2011 Rex Dieter 2.4.2-1 -- 2.4.2 - -* Fri Jul 08 2011 Rex Dieter 2.4.1.90-1 -- 2.4.1.90 -- drop no-longer-needed %%ifarch s390 conditionals - -* Fri Jun 10 2011 Rex Dieter 2.4.1-4 -- drop ancient Obsoletes - -* Fri Jun 10 2011 Rex Dieter 2.4.1-3 -- rebuild (libmtp) - -* Tue May 24 2011 Rex Dieter 2.4.1-2 -- BR: libmygpo-qt-devel - -* Fri May 06 2011 Rex Dieter 2.4.1-1 -- 2.4.1 (final) - -* Wed Mar 23 2011 Rex Dieter 2.4.0.90-2 -- rebuild (mysql) - -* Mon Mar 21 2011 Rex Dieter 2.4.0.90-1 -- 2.4.1 beta1 - -* Wed Feb 09 2011 Rex Dieter 2.4.0-3 -- License: GPLv2 or GPLv3 - -* Mon Feb 07 2011 Fedora Release Engineering - 2.4.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild - -* Tue Jan 11 2011 Rex Dieter 2.4.0-1 -- 2.4.0 -- libmtp-hal dependency missing for amarok (#666173) - -* Tue Dec 28 2010 Rex Dieter 2.3.90-3 -- rebuild (mysql) - -* Tue Dec 07 2010 Thomas Janssen 2.3.90-2 -- fixed missing libampache - -* Mon Dec 06 2010 Thomas Janssen 2.3.90-1 -- 2.3.90 (2.4beta1) - -* Tue Nov 30 2010 Rex Dieter 2.3.2-7 -- recognize audio/flac mimetype too (kde#257488) - -* Fri Nov 05 2010 Thomas Janssen 2.3.2-6 -- rebuild for new libxml2 - -* Thu Nov 04 2010 Rex Dieter 2.3.2-5 -- appletsize patch -- fix/improve ipod3 support patch -- another collectionscanner patch - -* Wed Sep 29 2010 jkeating - 2.3.2-4 -- Rebuilt for gcc bug 634757 - -* Fri Sep 24 2010 Thomas Janssen 2.3.2-3 -- added patch to fix scanning qt bug/regression - -* Mon Sep 20 2010 Thomas Janssen 2.3.2-2 -- added patch to fix BPM tags in flac - -* Thu Sep 16 2010 Rex Dieter - 2.3.2-1 -- amarok-2.3.2 - -* Thu Sep 16 2010 Dan Horák - 2.3.1.90-3 -- no libgpod on s390(x) - -* Tue Aug 16 2010 Rex Dieter - 2.3.1.90-2 -- fix/patch installation of amarok handbooks - -* Mon Aug 16 2010 Rex Dieter - 2.3.1.90-1 -- amarok-2.3.1.90 (2.3.2 beta1) - -* Fri Jul 09 2010 Rex Dieter - 2.3.1-2 -- No Notification Area icon for non-KDE desktops (kde#232578,rh#603336) - -* Fri May 28 2010 Rex Dieter - 2.3.1-1 -- amarok-2.3.1 - -* Sat Apr 17 2010 Rex Dieter - 2.3.0.90-1 -- amarok-2.3.0.90 - -* Thu Mar 25 2010 Rex Dieter - 2.3.0-5 -- fix mp3 support logic - -* Mon Mar 22 2010 Rex Dieter - 2.3.0-4 -- rebuild (libgpod) - -* Mon Mar 22 2010 Rex Dieter - 2.3.0-3 -- workaround info applet crasher (kde#227639,kde#229756) - -* Thu Mar 11 2010 Rex Dieter - 2.3.0-2 -- fix Source0 URL -- -libs: drop unused/extraneous kdelibs4 dep - -* Thu Mar 11 2010 Thomas Janssen 2.3.0-1 -- amarok 2.3.0 - -* Sat Feb 13 2010 Rex Dieter - 2.2.2.90-1 -- amarok-2.2.2.90 (2.3beta1) - -* Thu Jan 28 2010 Rex Dieter - 2.2.2-4 -- use %%{_kde4_version} provided elsewhere (kde-filesystem) - -* Sun Jan 10 2010 Rex Dieter - 2.2.2-3 -- collection scan crash patch, take 2 (kde#220532) - -* Fri Jan 08 2010 Rex Dieter - 2.2.2-2 -- collection scan crash patch (kde#220532) - -* Wed Jan 05 2010 Rex Dieter - 2.2.2-1 -- amarok-2.2.2 - -* Thu Dec 10 2009 Rex Dieter - 2.2.1.90-1 -- amarok-2.2.1.90 (2.2.2 beta1) - -* Mon Nov 23 2009 Rex Dieter - 2.2.1-3 -- rebuild (for qt-4.6.0-rc1, f13+) - -* Mon Nov 16 2009 Rex Dieter 2.2.1-2 -- playlist_default_layout_fix.diff (kde#211717) - -* Wed Nov 11 2009 Rex Dieter 2.2.1-1 -- amarok-2.2.1 - -* Thu Oct 08 2009 Rex Dieter 2.2.0-3 -- upstream lyric.patch - -* Fri Oct 02 2009 Rex Dieter 2.2.0-2 -- Requires: kdebase-runtime (need kio_trash, kcm_phonon, etc) - -* Tue Sep 29 2009 Rex Dieter 2.2.0-1 -- amarok-2.2.0 - -* Wed Sep 23 2009 Rex Dieter 2.1.90-2.20090923git -- 20090923git snapshot - -* Mon Sep 21 2009 Rex Dieter 2.1.90-1 -- amarok-2.1.90 (2.2rc1) - -* Thu Sep 17 2009 Rex Dieter 2.1.85-2 -- BR: taglib-devel >= 1.6, taglib-extras-devel >= 1.0 - -* Mon Sep 14 2009 Rex Dieter 2.1.85-1 -- amarok-2.1.85 (2.2beta2) - -* Wed Sep 02 2009 Rex Dieter 2.1.80-2 -- another lyricwiki fix - -* Wed Sep 02 2009 Rex Dieter 2.1.80-1 -- amarok-2.1.80 (2.2beta1) -- -libs subpkg - -* Fri Aug 21 2009 Tomas Mraz - 2.1.1-5 -- rebuilt with new openssl - -* Sat Aug 08 2009 Rex Dieter 2.1.1-4 -- lyricwiki patch (kdebug#202366) - -* Fri Jul 24 2009 Fedora Release Engineering - 2.1.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild - -* Tue Jul 07 2009 Rex Dieter 2.1.1-2 -- Requires: qtscriptbindings%%{?_isa} (#510133) - -* Fri Jun 12 2009 Rex Dieter 2.1.1-1 -- amarok-2.1.1 - -* Sat May 30 2009 Rex Dieter 2.1-1 -- amarok-2.1 - -* Mon May 18 2009 Rex Dieter 2.0.96-2.20090518 -- 20090518svn snapshot - -* Mon May 11 2009 Rex Dieter 2.0.96-1 -- amarok-2.9.96 (2.1 beta2) -- -utilities -> -utils - -* Fri Apr 10 2009 Rex Dieter 2.0.90-2 -- -collectionscanner -> -utilities - -* Fri Apr 10 2009 Rex Dieter 2.0.90-1 -- amarok-2.0.90 (amarok-2.1 beta1) - -* Wed Apr 08 2009 Rex Dieter 2.0.2-6 -- fix lastfm (kdebug#188678, rhbz#494871) -- fix qtscriptgenerator/qtscriptbindings deps - -* Tue Apr 07 2009 Rex Dieter 2.0.2-5 -- enable external qtscriptgenerator/qtscriptbindings -- optimize scriptlets - -* Tue Mar 10 2009 Rex Dieter 2.0.2-4 -- Req: qtscriptgenerator (f11+) (not enabled, pending review) -- use desktop-file-validate - -* Fri Mar 06 2009 Rex Dieter 2.0.2-3 -- add minimal qt4,kdelibs4 deps - -* Wed Mar 04 2009 Rex Dieter 2.0.2-1 -- amarok-2.0.2 - -* Tue Feb 24 2009 Than Ngo 2.0.1.1-6 -- fix build issue against gcc-4.4 - -* Mon Feb 23 2009 Fedora Release Engineering - 2.0.1.1-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild - -* Mon Feb 23 2009 Rex Dieter - 2.0.1.1-4 -- qt45 patch - -* Fri Feb 20 2009 Todd Zullinger - 2.0.1.1-3 -- Rebuild against libgpod-0.7.0 -- Drop gtk2-devel BR, libgpod properly requires that now - -* Thu Jan 22 2009 Rex Dieter - 2.0.1.1-2 -- respin (mysql) - -* Fri Jan 09 2009 Rex Dieter - 2.0.1.1-1 -- amarok-2.0.1.1 - -* Tue Jan 06 2009 Rex Dieter - 2.0.1-1 -- amarok-2.0.1 - -* Tue Dec 09 2008 Rex Dieter - 2.0-2 -- respin tarball - -* Fri Dec 05 2008 Rex Dieter - 2.0-1 -- amarok-2.0 (final, first cut) - -* Fri Nov 21 2008 Rex Dieter - 1.98-1 -- amarok-1.98 (2rc1) - -* Fri Oct 31 2008 Rex Dieter - 1.94-2 -- amarok-1.94 (2beta4) - -* Wed Oct 15 2008 Rex Dieter - 1.92.2-1 -- amarok-1.92.2 (2beta3) - -* Thu Oct 02 2008 Rex Dieter - 1.92-2 -- BR: gtk2-devel (gdk-pixbuf ipod artwork support) - -* Thu Oct 02 2008 Rex Dieter - 1.92-1 -- amarok-1.92 (2beta2) - -* Wed Aug 20 2008 Rex Dieter - 1.90-1 -- amarok-1.90 (2beta1) - -* Tue Jul 22 2008 Rex Dieter - 1.86-1 -- amarok-1.86 (amarok2 alpha 2) - -* Wed Jun 11 2008 Dennis Gilmore - 1.4.9.1-4 -- we are building sparc32 as sparcv9 not sparc now fix ifnarch - -* Fri May 2 2008 Rex Dieter - 1.4.9.1-3 -- fix libnjb support (#444940) - -* Thu May 1 2008 Rex Dieter - 1.4.9.1-2.1 -- --with-libvisual fedora-only (epel misses libvisual-plugins) - -* Thu Apr 17 2008 Rex Dieter - 1.4.9.1-2 -- specfile typo (unclosed macro) - -* Tue Apr 15 2008 Rex Dieter - 1.4.9.1-1 -- amarok-1.4.9.1 - -* Wed Mar 12 2008 Rex Dieter - 1.4.8-5 -- -konqueror: drop Obsoletes: %%name < 1.4.8-4 , which breaks - multilib upgrades (#436578) - -* Thu Feb 21 2008 Rex Dieter - 1.4.8-4 -- -konqueror subpkg (#426803) -- fix multiarch conflicts (#340641) - drop Provides: amarok-devel (f9+), add Obsoletes: amarok-devel -- gcc43 patch (#433904) - -* Mon Feb 18 2008 Fedora Release Engineering - 1.4.8-3 -- Autorebuild for GCC 4.3 - -* Wed Jan 09 2008 Rex Dieter 1.4.8-2 -- f9+: don't build/include konq(3) side bar support - -* Thu Dec 20 2007 Rex Dieter 1.4.8-1 -- amarok-1.4.8 - -* Fri Dec 07 2007 Alex Lancaster 1.4.7-14 -- Rebuild for new openssl - -* Thu Nov 29 2007 Rex Dieter 1.4.7-13 -- fix --with-mp4v2 handling (#346011#c5,6) - -* Thu Nov 29 2007 Rex Dieter 1.4.7-12 -- --with-mp4v2 (#346011#c3) -- fix asf/wma support (rh#346011,kde#151733) - -* Wed Nov 21 2007 Rex Dieter 1.4.7-11 -- dynamic mode floods playlist ... (kde #148317) - -* Wed Nov 21 2007 Todd Zullinger 1.4.7-10 -- rebuild for libgpod-0.6.0 - -* Tue Nov 20 2007 Rex Dieter 1.4.7-9 -- cosmetics (cleanup/sort BR's mostly) -- omit "for KDE" from summary/description -- make gst support toggled by macro (disabled by default) - -* Sat Nov 10 2007 Aurelien Bompard 1.4.7-8 -- rebuild - -* Sun Oct 07 2007 Aurelien Bompard 1.4.7-7 -- use xdg-open to start the configured browser - -* Sat Oct 06 2007 Aurelien Bompard 1.4.7-6 -- add "alpha" to the list of archs where HelixPlayer is not available - (bug 318431) - -* Fri Sep 28 2007 Aurelien Bompard 1.4.7-5 -- add patch 1 to fix Fedora bug 242862: Amarok doesn't support transfer - of Unicode filenames to MTP devices - -* Sun Sep 02 2007 Aurelien Bompard 1.4.7-4 -- add patch for kde bug 147126 : amarok freezes when trying to play - mp3 files without mp3 support - -* Fri Aug 24 2007 Todd Zullinger 1.4.7-3 -- rebuild with libgpod-0.5.2 - -* Sat Aug 18 2007 Aurelien Bompard 1.4.7-2 -- version 1.4.7 - -* Sun Aug 05 2007 Aurelien Bompard 1.4.6-3 -- rebuild for new libmtp (bug 250905) - -* Wed Jun 27 2007 Aurelien Bompard 1.4.6-2 -- add explicit Requires on kdelibs >= 3.5.7 to fix bug 245386 - -* Mon Jun 18 2007 Aurelien Bompard 1.4.6-1 -- version 1.4.6 - -* Mon Feb 19 2007 Aurelien Bompard 1.4.5-4 -- have the visualisation subpackage require libvisual-plugins (bug 229131) - -* Thu Feb 15 2007 Aurelien Bompard 1.4.5-3 -- fix patch (provided by upstream) - -* Wed Feb 14 2007 Aurelien Bompard 1.4.5-2 -- add patch to fix CVE-2006-6979 (bug 228138) - -* Sat Feb 03 2007 Aurelien Bompard 1.4.5-1 -- version 1.4.5 -- drop patch0 and patch1 (merged upstream) - -* Thu Jan 25 2007 Aurelien Bompard 1.4.4-7 -- add patch to enable building with libgpod >= 0.4.2, thanks go to Todd Zullinger - -* Wed Jan 17 2007 Aurelien Bompard 1.4.4-6 -- rebuild for new libgpod - -* Thu Jan 11 2007 Aurelien Bompard 1.4.4-5 -- HelixPlayer is not available on Sparc, exclude it from this arch too - (#221058) - -* Tue Dec 19 2006 Aurelien Bompard 1.4.4-4 -- add patch to make lastfm work with xine-lib 1.1.3 (sent by upstream) - -* Sat Dec 09 2006 Aurelien Bompard 1.4.4-3 -- rebuild - -* Wed Dec 06 2006 Aurelien Bompard 1.4.4-2 -- rebuild - -* Fri Oct 27 2006 Aurelien Bompard 1.4.4-1 -- version 1.4.4 -- enable xine support since xine is now in Fedora - -* Sat Oct 07 2006 Aurelien Bompard 1.4.3-6 -- rebuild for new libtunepimp - -* Thu Oct 05 2006 Aurelien Bompard 1.4.3-5 -- add libmtp support - -* Sun Oct 01 2006 Aurelien Bompard 1.4.3-4 -- rebuild - -* Fri Sep 15 2006 Aurelien Bompard 1.4.3-3 -- add patch for playlist encoding - -* Wed Sep 13 2006 Aurelien Bompard 1.4.3-2 -- buildrequires ruby-devel (checked by configure) - -* Wed Sep 13 2006 Aurelien Bompard 1.4.3-1 -- update to 1.4.3 - -* Thu Aug 31 2006 Aurelien Bompard 1.4.2-2 -- add amarok patchset 1 - -* Wed Aug 30 2006 Aurelien Bompard 1.4.2-1 -- update to 1.4.2 -- don't build on x86_64 (requested by the amarok devs) - -* Wed Jul 19 2006 Aurelien Bompard 1.4.1-3 -- fix the gstreamer engine (wrong X-KDE-Amarok-framework-version) - -* Sat Jul 08 2006 Aurelien Bompard 1.4.1-2 -- BuildRequires ruby - -* Sat Jul 08 2006 Aurelien Bompard 1.4.1-1 -- version 1.4.1 -- make it possible to build the gst10 engine with a "--with gst10" switch - -* Wed May 24 2006 Aurelien Bompard 1.4.0-5 -- Require HelixPlayer on archs where it is the only engine available - -* Sun May 21 2006 Aurelien Bompard 1.4.0-4 -- really fix building gst engine on x86_64 - -* Sun May 21 2006 Aurelien Bompard 1.4.0-3 -- missing buildrequires - -* Sun May 21 2006 Aurelien Bompard 1.4.0-2 -- gstreamer engine has been disabled, bring it back in SOURCE1 - where Helix is unavailable (only engine available) - -* Mon May 15 2006 Aurelien Bompard 1.4-1 -- version 1.4 final - -* Mon May 01 2006 Aurelien Bompard 1.4-0.13.rc1 -- rc1 - -* Fri Apr 14 2006 Aurelien Bompard 1.4-0.12.beta3 -- add patch to make Gstreamer sufficient to build (only engine available - on x86_64 - -* Sun Apr 09 2006 Aurelien Bompard 1.4-0.11.beta3 -- drop the non-free bits -- beta 3 (akode has been disabled) - -* Wed Mar 22 2006 Aurelien Bompard 1.4-0.10.beta2 -- enable libgpod support - -* Wed Mar 22 2006 Aurelien Bompard 1.4-0.9.beta2 -- make amarok build even with gstreamer only - -* Sun Mar 05 2006 Aurelien Bompard 1.4-0.8.beta2 -- version 1.4 beta2 - -* Wed Feb 22 2006 Aurelien Bompard 1.4-0.7.beta1 -- disable build of Helix engine on x86_64 - -* Wed Feb 22 2006 Aurelien Bompard 1.4-0.6.beta1 -- remove requirement on HelixPlayer for x86_64, amarok include the headers - -* Wed Feb 22 2006 Aurelien Bompard 1.4-0.5.beta1 -- build Helix engine on x86_64 - -* Wed Feb 22 2006 Aurelien Bompard 1.4-0.4.beta1 -- fix gstramer 0.10 detection again - -* Mon Feb 20 2006 Aurelien Bompard 1.4-0.3.beta1 -- fix gstreamer 0.10 detection - -* Fri Feb 17 2006 Aurelien Bompard 1.4-0.1.beta1 -- fix gstreamer dependency - -* Wed Feb 15 2006 Aurelien Bompard 1.4-0.1.beta1 -- version 1.4-beta1 - -* Sun Feb 12 2006 Aurelien Bompard 1.3.8-2 -- fix BR for gstreamer < 0.10 - -* Sat Jan 21 2006 Aurelien Bompard 1.3.8-1 -- version 1.3.8 - -* Wed Dec 07 2005 Aurelien Bompard 1.3.7-1 -- version 1.3.7 - -* Sun Nov 20 2005 Aurelien Bompard 1.3.6-2 -- build with libtunepimp -- add patch to use libtunepimp 0.4.0 (api changed) - -* Tue Nov 08 2005 Aurelien Bompard 1.3.6-1 -- version 1.3.6 -- BR libGL instead of xorg-x11-Mesa-libGL to prepare for X11R7 - -* Tue Oct 25 2005 Aurelien Bompard 1.3.5-1 -- version 1.3.5 - -* Mon Oct 24 2005 Aurelien Bompard 1.3.4-1 -- version 1.3.4 -- add mysql and postgresql support -- update desktop database -- add %%doc files - -* Thu Oct 13 2005 Aurelien Bompard 1.3.3-1 -- version 1.3.3 -- drop endian patch - -* Wed Sep 21 2005 Aurelien Bompard 1.3.2-1 -- version 1.3.2 -- remove patch 4 (applied upstream) - -* Sat Sep 10 2005 Aurelien Bompard 1.3.1-2 -- add patch from upstream to fix alsasink in gstreamer -- default to autoaudiosink for gstreamer - -* Mon Sep 05 2005 Aurelien Bompard 1.3.1-1 -- version 1.3.1 - -* Tue Aug 23 2005 Aurelien Bompard 1.3-6 -- add version to obsoletes - -* Tue Aug 23 2005 Aurelien Bompard 1.3-5 -- add missing Obsoletes. - -* Mon Aug 22 2005 Aurelien Bompard 1.3-4 -- fix endian declaration on ppc - -* Mon Aug 22 2005 Aurelien Bompard 1.3-3 -- dont build the Helix engine on arches where HelixPlayer is not built - -* Mon Aug 22 2005 Aurelien Bompard 1.3-2 -- disable the akode engine (disabled upstream, see Changelog) -- merge in the Helix engine, since it does not have special Requires. - HelixPlayer or RealPlayer need to be installed manually (either one) -- updated description - -* Mon Aug 22 2005 Aurelien Bompard 1.3-1 -- update to version 1.3 -- add Michel Salim's improvements: - - call gtk-update-icon-cache to (de-)register icons - - new output plugin subpackage: helix - - patched gst and helix plugins' default settings - -* Fri Jul 01 2005 Aurelien Bompard 1.2.4-6 -- remove -arts subpackage, it is useless - -* Thu Jun 2 2005 Michael Schwendt - 1.2.4-6.fc5 -- remove temporary work-around from 1.2.4-2.fc4 -- add patch to fix several missing forward declarations which let - compilation with gcc >= 4.0.0-9 fail -- re-enable SMP make flags - -* Thu Jun 2 2005 Michael Schwendt - 1.2.4-5.fc4 -- disable SMP make flags, since previous release failed miserably on - i386 while the one before it succeeded - -* Thu Jun 2 2005 Michael Schwendt - 1.2.4-4.fc4 -- set QTLIB and QTINC, so configure script does not search for Qt in - QTDIR/lib64 on 64-bit multilib platforms - -* Thu Jun 2 2005 Michael Schwendt - 1.2.4-3.fc4 -- try to fix build problems (#158654): always set QTDIR, always - buildrequire libtool-ltdl-devel, disable %%fedora conditional BR - -* Thu Jun 2 2005 Michael Schwendt - 1.2.4-2.fc4 -- temporarily add patch to work around Fedora Core bug 159090 - -* Mon May 23 2005 Aurelien Bompard 1.2.4-1 -- version 1.2.4 -- use dist tag -- conditional builds for fc3 and fc4 - -* Sun May 22 2005 Jeremy Katz - 1.2.3-2.fc4 -- rebuild on all arches - -* Tue Mar 29 2005 Aurelien Bompard 1.2.3-1.fc4 -- version 1.2.3 -- add libtool to BuildRequirements -- change release tag for FC4 -- add a subpackage for aKode engine - -* Mon Mar 14 2005 Aurelien Bompard 1.2.2-1 -- version 1.2.2 - -* Sat Mar 05 2005 Aurelien Bompard 1.2.1-1 -- version 1.2.1 (bugfixes) - -* Mon Feb 14 2005 Aurelien Bompard 1.2-2 -- show in the GNOME menus too - -* Sun Feb 13 2005 Aurelien Bompard 1.2-1 -- version 1.2 final -- drop --disable-rpath, won't build with it. -- drop epoch - -* Thu Feb 10 2005 Aurelien Bompard 0:1.2-0.2.beta4 -- version 1.2 beta 4 - -* Sat Nov 27 2004 Aurelien Bompard 0:1.2-0.fdr.0.1.beta1 -- version 1.2beta 1 -- minor cleanups -- don't ship the desktop files, split the provided one instead - -* Sun Oct 24 2004 Aurelien Bompard 0:1.1.1-0.fdr.2 -- clean-up buildrequires -- fix --with xine switch -- make a -visualisation subpackage for visualisation plugins -- make a -arts subpackage to lower dependencies - -* Wed Oct 20 2004 Aurelien Bompard 0:1.1.1-0.fdr.1 -- version 1.1.1 - -* Mon Sep 27 2004 Aurelien Bompard 0:1.1.0-0.fdr.2 -- improve buildrequires - -* Sun Sep 26 2004 Aurelien Bompard 0:1.1.0-0.fdr.1 -- version 1.1 final - -* Tue Sep 14 2004 Aurelien Bompard 0:1.1.0-0.fdr.0.1.beta2 -- version 1.1 beta2 - -* Thu Aug 05 2004 Aurelien Bompard 0:1.0.2-0.fdr.1 -- version 1.0.2 -- added new xine engine - -* Tue Jul 13 2004 Aurelien Bompard 0:1.0.1-0.fdr.3 -- remove BR: libselinux-devel: RH fixed the bug - -* Wed Jun 30 2004 Aurelien Bompard 0:1.0.1-0.fdr.2 -- add Requires: xorg-x11-devel because of a qt packaging bug - -* Tue Jun 29 2004 Aurelien Bompard 0:1.0.1-0.fdr.1 -- version 1.0.1 (bugfixes) - -* Mon Jun 21 2004 Aurelien Bompard 0:1.0-0.fdr.3 -- remove BR: xine-lib-devel -- add BR: xorg-x11-Mesa-libGL and libselinux-devel - -* Thu Jun 17 2004 Aurelien Bompard 0:1.0-0.fdr.2 -- add translations - -* Thu Jun 17 2004 Aurelien Bompard 0:1.0-0.fdr.1 -- version 1.0 final - -* Tue Jun 01 2004 Aurelien Bompard 0:1.0-0.fdr.0.1.beta4 -- update to beta4 - -* Sun May 09 2004 Aurelien Bompard 1.0-0.fdr.0.1.beta3 -- version 1.0-beta3 - -* Fri Apr 23 2004 Aurelien Bompard 1.0-0.fdr.0.1.beta2 -- version 1.0-beta2 -- use desktop-file-install -- remove .la files -- remove --enable-final (won't build with it) - -* Thu Apr 15 2004 Aurelien Bompard 1.0-0.fdr.0.1.beta1 -- version 1.0-beta1 -- reduce BuildRequires : arts-devel already requires arts, libvorbis-devel - and audiofile-devel - -* Mon Mar 08 2004 Aurelien Bompard 0:0.9-0.fdr.1 -- version 0.9 - -* Wed Feb 11 2004 Aurelien Bompard 0.8.3-0.fdr.1 -- initial package diff --git a/dead.package b/dead.package new file mode 100644 index 0000000..6dc51c6 --- /dev/null +++ b/dead.package @@ -0,0 +1,3 @@ +2017-03-12: Retired orphaned package, because it was orphaned for +more than six weeks. + diff --git a/sources b/sources deleted file mode 100644 index ed9678e..0000000 --- a/sources +++ /dev/null @@ -1 +0,0 @@ -b7983eaa33e4771769ae9e330c811995 amarok-2.5.0.tar.bz2