Ticket #1676: AlbumSort-plugins.patch

File AlbumSort-plugins.patch, 4.5 KB (added by anonymous, 18 years ago)

patch for mythplugins

  • mythmusic/mythmusic/playbackbox.cpp

     
    107107        setShuffleMode(SHUFFLE_RANDOM);
    108108    else if (playmode.lower() == "intelligent")
    109109        setShuffleMode(SHUFFLE_INTELLIGENT);
     110    else if (playmode.lower() == "album")
     111        setShuffleMode(SHUFFLE_ALBUM);
    110112    else
    111113        setShuffleMode(SHUFFLE_OFF);
    112114
     
    233235        gContext->SaveSetting("PlayMode", "intelligent");
    234236    else if (shufflemode == SHUFFLE_RANDOM)
    235237        gContext->SaveSetting("PlayMode", "random");
     238    else if (shufflemode == SHUFFLE_ALBUM)
     239        gContext->SaveSetting("PlayMode", "album");
    236240    else
    237241        gContext->SaveSetting("PlayMode", "none");
    238242
     
    14171421            if (class LCD *lcd = LCD::Get())
    14181422                lcd->setMusicShuffle(LCD::MUSIC_SHUFFLE_RAND);
    14191423            break;
     1424        case SHUFFLE_ALBUM:
     1425            if(shuffle_button)
     1426            {
     1427                if (keyboard_accelerators)
     1428                    shuffle_button->setText(tr("1 Shuffle: Album"));
     1429                else
     1430                    shuffle_button->setText(tr("Shuffle: Album"));
     1431            }
     1432            music_tree_list->scrambleParents(true);
     1433
     1434            if (class LCD *lcd = LCD::Get())
     1435                lcd->setMusicShuffle(LCD::MUSIC_SHUFFLE_ALBUM);
     1436            break;
    14201437        default:
    14211438            if(shuffle_button)
    14221439            {
     
    15341551    // We ask the playlist object to write out the whole tree (all playlists
    15351552    // and all music). It will set attributes for nodes in the tree, such as
    15361553    // whether a node is selectable, how it can be ordered (normal, random,
    1537     // intelligent), etc.
     1554    // intelligent, album), etc.
    15381555
    15391556    all_playlists->writeTree(playlist_tree);
    15401557    music_tree_list->assignTreeData(playlist_tree);
  • mythmusic/mythmusic/playlist.cpp

     
    11#include <unistd.h>
     2#include <inttypes.h>
    23#include <iostream>
    34using namespace std;
    45#include "playlist.h"
     
    883884    int playcountMax = 0;
    884885    double lastplayMin = 0.0;
    885886    double lastplayMax = 0.0;
     887
     888    typedef map<QString, uint32_t> AlbumMap;
     889    AlbumMap                       album_map;
     890    AlbumMap::iterator             Ialbum;
     891    QString                        album;
     892
     893
    886894    for(it = songs.first(); it; it = songs.next())
    887895    {
    888896        if(!it->getCDFlag())
     
    957965                    double rating_value =  (RatingWeight * ratingValue + PlayCountWeight * playcountValue +
    958966                                            LastPlayWeight * lastplayValue + RandomWeight * (double)rand() /
    959967                                            (RAND_MAX + 1.0));
    960                     int integer_rating = (int) (4000001 - rating_value * 10000);
     968                    uint32_t integer_rating = (int) (4000001 - rating_value * 10000);
    961969                    added_node->setAttribute(3, integer_rating); //  "intelligent" order
    962                                          }
     970
     971                    // "intellegent/album" order
     972                    album = tmpdata->Artist() + "~" + tmpdata->Album();
     973                    if ((Ialbum = album_map.find(album)) == album_map.end()) {
     974                      // Add room for 100 albums with 100 tracks.
     975                      integer_rating *= 10000;
     976                      integer_rating += (a_counter * 100);
     977
     978                      album_map.insert(AlbumMap::value_type(album,
     979                                                            integer_rating));
     980
     981                      integer_rating += tmpdata->Track();
     982                      added_node->setAttribute(4, integer_rating);
     983                    }
     984                    else {
     985                      integer_rating = Ialbum->second;
     986                      integer_rating += tmpdata->Track();
     987                      added_node->setAttribute(4, integer_rating);
     988                    }
     989                }
    963990            }
    964991            if(it->getValue() < 0)
    965992            {
  • mythmusic/mythmusic/playbackbox.h

     
    129129    { SHUFFLE_OFF = 0,
    130130      SHUFFLE_RANDOM,
    131131      SHUFFLE_INTELLIGENT,
     132      SHUFFLE_ALBUM,
    132133      MAX_SHUFFLE_MODES
    133134    };
    134135