Changeset 17 for lib/mpdparseutils.cpp


Ignore:
Timestamp:
12/30/07 20:55:36 (4 years ago)
Author:
sander
Message:

Lots of updates, the music library is now being showed in the tree view. Though it doesn't actually do anything yet.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/mpdparseutils.cpp

    r7 r17  
    44 
    55 
    6 MPDStatus * MPDParseUtils::parseStatus(const QByteArray * const data) 
     6void MPDParseUtils::parseStatus(const QByteArray * const data, MPDStatus &destStatus) 
    77{ 
    8     MPDStatus *status = new MPDStatus; 
    9  
    108    QList<QByteArray> lines = data->split('\n'); 
    119    QList<QByteArray> tokens; 
     
    1513 
    1614        if(tokens.at(0) == "volume") { 
    17             status->volume = tokens.at(1).toUInt(); 
     15            destStatus.volume = tokens.at(1).toUInt(); 
    1816        } else if(tokens.at(0) == "repeat") { 
    1917            if(tokens.at(1) == "1") { 
    20                 status->repeat = true; 
     18                destStatus.repeat = true; 
    2119            } else { 
    22                 status->repeat = false; 
     20                destStatus.repeat = false; 
    2321            } 
    2422        } else if(tokens.at(0) == "random") { 
    2523            if(tokens.at(1) == "1") { 
    26                 status->random = "1"; 
     24                destStatus.random = "1"; 
    2725            } else { 
    28                 status->random = "0"; 
     26                destStatus.random = "0"; 
    2927            } 
    3028        } else if(tokens.at(0) == "playlist") { 
    31             status->playlist = tokens.at(1).toUInt(); 
     29            destStatus.playlist = tokens.at(1).toUInt(); 
    3230        } else if(tokens.at(0) == "playlistlength") { 
    33             status->playlistlength = tokens.at(1).toInt(); 
     31            destStatus.playlistlength = tokens.at(1).toInt(); 
    3432        } else if(tokens.at(0) == "playlistqueue") { 
    35             status->playlistqueue = tokens.at(1).toInt(); 
     33            destStatus.playlistqueue = tokens.at(1).toInt(); 
    3634        } else if(tokens.at(0) == "xfade") { 
    37             status->xfade = tokens.at(1).toInt(); 
     35            destStatus.xfade = tokens.at(1).toInt(); 
    3836        } else if(tokens.at(0) == "state") { 
    3937            if(tokens.at(1).contains("play")) { 
    40                 status->state = MPDStatus::State_Playing; 
     38                destStatus.state = MPDStatus::State_Playing; 
    4139            } else if(tokens.at(1).contains("stop")) { 
    42                 status->state = MPDStatus::State_Stopped; 
     40                destStatus.state = MPDStatus::State_Stopped; 
    4341            } else { 
    44                 status->state = MPDStatus::State_Paused; 
     42                destStatus.state = MPDStatus::State_Paused; 
    4543            } 
    4644        } else if(tokens.at(0) == "song") { 
    47             status->song = tokens.at(1).toInt(); 
     45            destStatus.song = tokens.at(1).toInt(); 
    4846        } else if(tokens.at(0) == "songid") { 
    49             status->song_id = tokens.at(1).toInt(); 
     47            destStatus.song_id = tokens.at(1).toInt(); 
    5048        } else if(tokens.at(0) == "time") { 
    51             status->time_elapsed = tokens.at(1).toInt(); 
    52             status->time_total = tokens.at(2).toInt(); 
     49            destStatus.time_elapsed = tokens.at(1).toInt(); 
     50            destStatus.time_total = tokens.at(2).toInt(); 
    5351        } else if(tokens.at(0) == "bitrate") { 
    54             status->bitrate = tokens.at(1).toUInt(); 
     52            destStatus.bitrate = tokens.at(1).toUInt(); 
    5553        } else if(tokens.at(0) == "audio") { 
    5654        } else if(tokens.at(0) == "updating_db") { 
    57             status->updating_db = tokens.at(1).toInt(); 
     55            destStatus.updating_db = tokens.at(1).toInt(); 
    5856        } else if(tokens.at(0) == "error") { 
    59             status->error = tokens.at(1); 
     57            destStatus.error = tokens.at(1); 
    6058        } 
    6159    } 
    62  
    63     return status; 
    6460} 
    6561 
     
    7773            song->file = tokens.at(1); 
    7874        } else if(tokens.at(0) == "Time") { 
     75            song->time = tokens.at(1).toUInt(); 
    7976        } else if(tokens.at(0) == "Album") { 
    80             song->album = tokens.at(1); 
     77            for(qint32 j = 1; j < tokens.size(); j++) { 
     78                if(j != 1 && j != tokens.size() - 1) 
     79                    song->album += ":"; 
     80                song->album += tokens.at(j); 
     81            } 
    8182        } else if(tokens.at(0) == "Artist") { 
    82             song->artist = tokens.at(1); 
     83            for(qint32 j = 1; j < tokens.size(); j++) { 
     84                if(j != 1 && j != tokens.size() - 1) 
     85                    song->artist += ":"; 
     86                song->artist += tokens.at(j); 
     87            } 
    8388        } else if(tokens.at(0) == "Title") { 
    84             song->title = tokens.at(1); 
     89            for(qint32 j = 1; j < tokens.size(); j++) { 
     90                if(j != 1 && j != tokens.size() - 1) 
     91                    song->title += ":"; 
     92                song->title += tokens.at(j); 
     93            } 
    8594        } else if(tokens.at(0) == "Track") { 
     95            song->track = tokens.at(1).toInt(); 
    8696        } else if(tokens.at(0) == "Pos") { 
    8797        } else if(tokens.at(0) == "Id") { 
     
    111121    return songs; 
    112122} 
     123 
     124QList<MusicLibraryItem *> * MPDParseUtils::parseLibraryItems(const QByteArray * const data) 
     125{ 
     126    QList<MusicLibraryItem *> *artists = new QList<MusicLibraryItem *>; 
     127    QByteArray currentItem; 
     128    MusicLibraryItem *artistItem, *albumItem, *songItem; 
     129    Song *currentSong; 
     130    bool found = false; 
     131 
     132    QList<QByteArray> lines = data->split('\n'); 
     133 
     134    for(qint32 i = 0; i < lines.size(); i++) { 
     135        currentItem += lines.at(i); 
     136        currentItem += "\n"; 
     137        if(i == lines.size() - 1 || lines.at(i + 1).startsWith("file:")) { 
     138            currentSong = parseSong(&currentItem); 
     139            currentItem.clear(); 
     140 
     141            if(currentSong->isEmpty()) { 
     142                delete currentSong; 
     143                continue; 
     144            } 
     145 
     146            currentSong->fillEmptyFields(); 
     147 
     148            // Check if artist already exists 
     149            for(qint32 i = 0; i < artists->size(); i++) { 
     150                if(artists->at(i)->data(0) == currentSong->artist) { 
     151                    artistItem = artists->at(i); 
     152                    found = true; 
     153                } 
     154            } 
     155 
     156            if(!found) { 
     157                artistItem = new MusicLibraryItem(currentSong->artist, MusicLibraryItem::Type_Artist); 
     158                artists->append(artistItem); 
     159            } 
     160 
     161            found = false; 
     162 
     163            // Check if album already exists 
     164            for(qint32 i = 0; i < artistItem->childCount(); i++) { 
     165                if(artistItem->child(i)->data(0) == currentSong->album) { 
     166                    albumItem = artistItem->child(i); 
     167                    found = true; 
     168                } 
     169            } 
     170 
     171            if(!found) { 
     172                albumItem = new MusicLibraryItem(currentSong->album, MusicLibraryItem::Type_Album, artistItem); 
     173                artistItem->appendChild(albumItem); 
     174            } 
     175 
     176            found = false; 
     177 
     178            // Add song to album (possibly in track order) 
     179            songItem = new MusicLibraryItem(currentSong->title, MusicLibraryItem::Type_Song, albumItem); 
     180            songItem->setFile(currentSong->file); 
     181            albumItem->appendChild(songItem); 
     182 
     183            delete currentSong; 
     184        } 
     185    } 
     186 
     187    return artists; 
     188} 
Note: See TracChangeset for help on using the changeset viewer.