more efficient of updating of metadata

git-svn-id: https://svn.musicpd.org/mpd/trunk@1277 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Warren Dukes 2004-06-01 10:28:06 +00:00
parent decce92949
commit 199ad37e22
3 changed files with 35 additions and 12 deletions

View File

@ -735,24 +735,23 @@ int playPlaylist(FILE * fp, int song, int stopOnError) {
}
void syncCurrentPlayerDecodeMetadata() {
long i = 0;
Song * songPlayer = playerCurrentDecodeSong();
Song * song;
if(!songPlayer) return;
for(i=0; i<playlist.length; i++) {
song = playlist.songs[i];
if(playlist_state!=PLAYLIST_STATE_PLAY);
song = playlist.songs[playlist.order[playlist.current]];
if(song->type == SONG_TYPE_URL &&
0 == strcmp(song->utf8url,
songPlayer->utf8url))
0 == strcmp(song->utf8url, songPlayer->utf8url) &&
!mpdTagsAreEqual(song->tag, songPlayer->tag))
{
if(song->tag) freeMpdTag(song->tag);
song->tag = mpdTagDup(songPlayer->tag);
incrPlaylistVersion();
}
}
}
void syncPlayerAndPlaylist() {

View File

@ -184,4 +184,26 @@ MpdTag * mpdTagDup(MpdTag * tag) {
return ret;
}
/* vim:set shiftwidth=4 tabstop=8 expandtab: */
int mpdTagStringsAreEqual(char * s1, char * s2) {
if(s1 && s2) {
if(strcmp(s1, s2)) return 0;
}
else if(s1 || s2) return 0;
return 1;
}
int mpdTagsAreEqual(MpdTag * tag1, MpdTag * tag2) {
if(tag1 == NULL && tag2 == NULL) return 1;
else if(!tag1 || ! !tag2) return 0;
if(tag1->time != tag2->time) return 0;
if(!mpdTagStringsAreEqual(tag1->artist, tag2->artist)) return 0;
if(!mpdTagStringsAreEqual(tag1->album, tag2->album)) return 0;
if(!mpdTagStringsAreEqual(tag1->track, tag2->track)) return 0;
if(!mpdTagStringsAreEqual(tag1->title, tag2->title)) return 0;
return 1;
}

View File

@ -45,5 +45,7 @@ MpdTag * mpdTagDup(MpdTag * tag);
void validateUtf8Tag(MpdTag * tag);
int mpdTagsAreEqual(MpdTag * tag1, MpdTag * tag2);
#endif
/* vim:set shiftwidth=4 tabstop=8 expandtab: */