Ticket #4105: albumfix.patch

File albumfix.patch, 2.8 KB (added by Paul Lambert <paul at planar.id.au>, 12 years ago)
  • mythmusic/mythmusic/playlist.cpp

     
    959959                        else if (tmpdata->LastPlay() > lastplayMax) { lastplayMax = tmpdata->LastPlay(); }
    960960                    }
    961961                }
     962                // pre-fill the album-map with the album name.  This allows us to do album mode in album order
     963                album = tmpdata->Artist() + "~" + tmpdata->Album();
     964                if ((Ialbum = album_map.find(album)) == album_map.end()) {
     965                  album_map.insert(AlbumMap::value_type(album,0));
     966
     967                }
    962968            }
    963969        }
    964970    }
    965971
     972    // populate the sort id into the album map
     973    uint32_t album_count = 1;
     974    for( Ialbum = album_map.begin(); Ialbum != album_map.end(); Ialbum++ )
     975    {
     976        Ialbum->second = album_count;
     977        album_count++;
     978    }   
     979   
    966980    int RatingWeight = 2;
    967981    int PlayCountWeight = 2;
    968982    int LastPlayWeight = 2;
     
    10131027                    added_node->setAttribute(3, integer_rating); //  "intelligent" order
    10141028
    10151029                    // "intellegent/album" order
     1030                    uint32_t album_order;
    10161031                    album = tmpdata->Artist() + "~" + tmpdata->Album();
    1017                     if ((Ialbum = album_map.find(album)) == album_map.end()) {
    1018                       // Add room for 100 albums with 100 tracks.
    1019                       integer_rating *= 10000;
    1020                       integer_rating += (a_counter * 100);
    1021 
    1022                       album_map.insert(AlbumMap::value_type(album,
    1023                                                             integer_rating));
    1024 
    1025                       integer_rating += tmpdata->Track();
    1026                       added_node->setAttribute(4, integer_rating);
     1032                    if ((Ialbum = album_map.find(album)) == album_map.end())
     1033                    {
     1034                        // we didn't find this album in the map, yet we pre-loaded them all
     1035                        // we are broken, but we just set the track order to 1, since there
     1036                        // is no real point in reporting an error
     1037                        album_order = 1;
    10271038                    }
    1028                     else {
    1029                       integer_rating = Ialbum->second;
    1030                       integer_rating += tmpdata->Track();
    1031                       added_node->setAttribute(4, integer_rating);
     1039                    else
     1040                    {
     1041                      album_order = Ialbum->second * 100;
     1042                      album_order += tmpdata->Track();
     1043                      added_node->setAttribute(4, album_order);
    10321044                    }
    10331045                }
    10341046            }