public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Rex Dieter <rdieter@fedoraproject.org>
To: git-commits@fedoraproject.org
Subject: [rpms/amarok] epel10.2: - amarok-2.2.0
Date: Mon, 06 Jul 2026 18:30:55 GMT	[thread overview]
Message-ID: <178336265584.1.6475058094518080141.rpms-amarok-8ee4419382ab@fedoraproject.org> (raw)

A new commit has been pushed.

Repo   : rpms/amarok
Branch : epel10.2
Commit : 8ee4419382abd241ff2bcf514a7b621069c6a9f8
Author : Rex Dieter <rdieter@fedoraproject.org>
Date   : 2009-09-29T11:50:02+00:00
Stats  : +10/-1354 in 4 file(s)
URL    : https://src.fedoraproject.org/rpms/amarok/c/8ee4419382abd241ff2bcf514a7b621069c6a9f8?branch=epel10.2

Log:
- amarok-2.2.0

---
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 <rdieter@fedoraproject.org> 2.2.0-1
+- amarok-2.2.0
+
 * Wed Sep 23 2009 Rex Dieter <rdieter@fedoraproject.org> 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<QVariantMap > &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<QVariantMap > &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<QString, int> *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<QString, int> 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<QString, int> 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<QString, int> m_artists;
--        QMap<QString, int> m_genre;
--        QMap<QString, int> m_year;
--        QMap<QString, int> m_composer;
-+        QMap<QString, int> m_genres;
-+        QMap<QString, int> m_years;
-+        QMap<QString, int> m_composers;
-         QMap<QPair<QString, int>, int> m_albums;
-         QMap<QPair<QString, int>, int> m_images;
-         QMap<QString, int> 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"<<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<quint64>& ) ), this, SLOT( slotRemovedIds( 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( 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<quint64> &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<quint64>& ) ), 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

                 reply	other threads:[~2026-07-06 18:30 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=178336265584.1.6475058094518080141.rpms-amarok-8ee4419382ab@fedoraproject.org \
    --to=rdieter@fedoraproject.org \
    --cc=git-commits@fedoraproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox