diff options
-rw-r--r-- | media_player.c | 85 | ||||
-rw-r--r-- | media_player.h | 3 |
2 files changed, 42 insertions, 46 deletions
diff --git a/media_player.c b/media_player.c index 6bf14177..9ea215c7 100644 --- a/media_player.c +++ b/media_player.c @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: media_player.c,v 1.80 2010-12-09 11:43:56 phintuka Exp $ + * $Id: media_player.c,v 1.81 2010-12-09 11:57:37 phintuka Exp $ * */ @@ -89,6 +89,8 @@ class cXinelibPlayer : public cPlayer const cString& File(void) { return m_File; } int CurrentFile(void) { return m_Playlist.Current()->Index(); } int Files(void) { return m_Playlist.Count(); } + + bool UpdateMetaInfo(bool Force = false); }; cXinelibPlayer::cXinelibPlayer(cXinelibDevice *Dev, const char *File, bool Queue, const char *SubFile) @@ -187,6 +189,38 @@ void cXinelibPlayer::SetSpeed(int Speed) } } +bool cXinelibPlayer::UpdateMetaInfo(bool Force) +{ + // update playlist metainfo + const char *ti = GetMetaInfo(miTitle); + bool TitleChanged = ti && ti[0] && (!*Playlist().Current()->Title || + !strstr(Playlist().Current()->Title, ti)); + if (Force || TitleChanged) { + const char *tr = GetMetaInfo(miTracknumber); + const char *al = GetMetaInfo(miAlbum); + const char *ar = GetMetaInfo(miArtist); + + if (!Force) + LOGDBG("metainfo changed: %s->%s %s->%s %s->%s %s->%s", + *Playlist().Current()->Artist ?: "-", ar ?: "-", + *Playlist().Current()->Album ?: "-", al ?: "-", + *Playlist().Current()->Tracknumber ?: "-", tr ?: "-", + *Playlist().Current()->Title ?: "-", ti ?: "-"); + + m_Playlist.Current()->Title = ti; + if (tr && tr[0]) + m_Playlist.Current()->Tracknumber = tr; + if (al && al[0]) + m_Playlist.Current()->Album = al; + if (ar && ar[0]) + m_Playlist.Current()->Artist = ar; + + return true; + } + + return false; +} + bool cXinelibPlayer::NextFile(int step) { if (m_Playlist.Count() > 0) { @@ -243,21 +277,8 @@ void cXinelibPlayer::Activate(bool On) m_Error = !m_Dev->PlayFile(mrl, pos); LOGDBG("cXinelibPlayer playing %s (%s)", *m_File, m_Error ? "FAIL" : "OK"); - if(!m_Error) { - // update playlist metainfo - const char *ti = GetMetaInfo(miTitle); - const char *tr = GetMetaInfo(miTracknumber); - const char *al = GetMetaInfo(miAlbum); - const char *ar = GetMetaInfo(miArtist); - if(ti && ti[0] && (!*m_Playlist.Current()->Title || !strstr(m_Playlist.Current()->Title, ti))) - m_Playlist.Current()->Title = ti; - if(tr && tr[0]) - m_Playlist.Current()->Tracknumber = tr; - if(al && al[0]) - m_Playlist.Current()->Album = al; - if(ar && ar[0]) - m_Playlist.Current()->Artist = ar; - + if (!m_Error) { + UpdateMetaInfo(true); UpdateNumTracks(); } } else { @@ -636,27 +657,8 @@ eOSState cXinelibPlayerControl::ProcessKey(eKeys Key) } else { - // metainfo may change during playback (DVD titles, CDDA tracks) - const char *ti = m_Player->GetMetaInfo(miTitle); - if(ti && ti[0] && (!*m_Player->Playlist().Current()->Title || - !strstr(m_Player->Playlist().Current()->Title, ti))) { - const char *tr = m_Player->GetMetaInfo(miTracknumber); - const char *al = m_Player->GetMetaInfo(miAlbum); - const char *ar = m_Player->GetMetaInfo(miArtist); - LOGDBG("metainfo changed: %s->%s %s->%s %s->%s %s->%s", - *m_Player->Playlist().Current()->Artist?:"-", ar?:"-", - *m_Player->Playlist().Current()->Album ?:"-", al?:"-", - *m_Player->Playlist().Current()->Tracknumber ?:"-", tr?:"-", - *m_Player->Playlist().Current()->Title ?:"-", ti?:"-"); - m_Player->Playlist().Current()->Title = ti; - if(tr && tr[0]) - m_Player->Playlist().Current()->Tracknumber = tr; - if(al && al[0]) - m_Player->Playlist().Current()->Album = al; - if(ar && ar[0]) - m_Player->Playlist().Current()->Artist = ar; + if (m_Player->UpdateMetaInfo()) MsgReplaying(*m_Player->Playlist().Current()->Title, *m_Player->File()); - } } // playlist menu @@ -955,14 +957,9 @@ eOSState cXinelibDvdPlayerControl::ProcessKey(eKeys Key) return osEnd; } - // Update DVD title information - const char *ti = m_Player->GetMetaInfo(miTitle); - if (ti && ti[0] && (!m_CurrentDVDTitle || !strstr(m_CurrentDVDTitle, ti))) { - memset(m_CurrentDVDTitle, 0, 63); - strn0cpy(m_CurrentDVDTitle, ti, 63); - m_Player->Playlist().Current()->Title = m_CurrentDVDTitle; - MsgReplaying(m_CurrentDVDTitle, NULL); - } + // Check for changed title + if (m_Player->UpdateMetaInfo()) + MsgReplaying(*m_Player->Playlist().Current()->Title, NULL); // Handle menu selection if (m_DvdMenu) { diff --git a/media_player.h b/media_player.h index 94833e00..bd143b1d 100644 --- a/media_player.h +++ b/media_player.h @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: media_player.h,v 1.17 2009-10-25 20:36:08 phintuka Exp $ + * $Id: media_player.h,v 1.18 2010-12-09 11:57:37 phintuka Exp $ * */ @@ -72,7 +72,6 @@ class cXinelibDvdPlayerControl : public cXinelibPlayerControl { private: cDvdMenu *m_DvdMenu; - char m_CurrentDVDTitle[63]; void CloseDvdMenu(void); |