bool SSortFileItem::StudioDescendingNoThe(CFileItem *left, CFileItem *right) { // sanity RETURN_IF_NULL(left,false); RETURN_IF_NULL(right,false); // special cases if (left->IsParentFolder()) return true; if (right->IsParentFolder()) return false; // only if they're both folders or both files do we do the full comparison if (left->m_bIsFolder == right->m_bIsFolder) { char *l = (char *)left->GetVideoInfoTag()->m_strStudio.c_str(); char *r = (char *)right->GetVideoInfoTag()->m_strStudio.c_str(); l += StartsWithToken(left->GetVideoInfoTag()->m_strStudio); r += StartsWithToken(right->GetVideoInfoTag()->m_strStudio); return StringUtils::AlphaNumericCompare(l, r) > 0; } return left->m_bIsFolder; }
void SSortFileItem::BySongAlbumNoThe(CFileItemPtr &item) { if (!item) return; CStdString label; if (item->HasMusicInfoTag()) label = item->GetMusicInfoTag()->GetAlbum(); else if (item->HasVideoInfoTag()) label = item->GetVideoInfoTag()->m_strAlbum; label = label.Mid(StartsWithToken(label)); CStdString artist; if (item->HasMusicInfoTag()) artist = item->GetMusicInfoTag()->GetArtist(); else if (item->HasVideoInfoTag()) artist = item->GetVideoInfoTag()->m_strArtist; artist = artist.Mid(StartsWithToken(artist)); label += " " + artist; if (item->HasMusicInfoTag()) label.AppendFormat(" %i", item->GetMusicInfoTag()->GetTrackAndDiskNumber()); item->SetSortLabel(label); }
void SSortFileItem::ByLabelNoThe(CFileItemPtr &item) { if (!item) return; item->SetSortLabel(item->GetLabel().Mid(StartsWithToken(item->GetLabel()))); }
void SSortFileItem::ByStudioNoThe(CFileItemPtr &item) { if (!item) return; CStdString studio = item->GetVideoInfoTag()->m_strStudio; item->SetSortLabel(studio.Mid(StartsWithToken(studio))); }
void SSortFileItem::BySongTitleNoThe(CFileItemPtr &item) { if (!item) return; int start = StartsWithToken(item->GetMusicInfoTag()->GetTitle()); item->SetSortLabel(item->GetMusicInfoTag()->GetTitle().Mid(start)); }
bool SSortFileItem::SongAlbumDescendingNoThe(CFileItem *left, CFileItem *right) { // sanity RETURN_IF_NULL(left,false); RETURN_IF_NULL(right,false); // special cases if (left->IsParentFolder()) return true; if (right->IsParentFolder()) return false; // only if they're both folders or both files do we do the full comparison if (left->m_bIsFolder == right->m_bIsFolder) { char *l; CStdString strL; if (left->HasMusicInfoTag()) l = (char *)left->GetMusicInfoTag()->GetAlbum().c_str(); else if (left->HasVideoInfoTag()) l = (char*)left->GetVideoInfoTag()->m_strAlbum.c_str(); else l = (char*)strL.c_str(); char *r; CStdString strR; if (right->HasMusicInfoTag()) r = (char *)right->GetMusicInfoTag()->GetAlbum().c_str(); else if (right->HasVideoInfoTag()) r = (char*)right->GetVideoInfoTag()->m_strAlbum.c_str(); else r = (char*)strR.c_str(); l += StartsWithToken(l); r += StartsWithToken(r); int result = StringUtils::AlphaNumericCompare(l, r); if (result > 0) return true; if (result < 0) return false; // album names match, try the artist if (left->HasMusicInfoTag()) l = (char *)left->GetMusicInfoTag()->GetArtist().c_str(); else if (left->HasVideoInfoTag()) { strL = left->GetVideoInfoTag()->m_strArtist; l = (char*)strL.c_str(); } if (right->HasMusicInfoTag()) r = (char *)right->GetMusicInfoTag()->GetArtist().c_str(); else if (right->HasVideoInfoTag()) { strR = right->GetVideoInfoTag()->m_strArtist; r = (char*)strR.c_str(); } l += StartsWithToken(l); r += StartsWithToken(r); result = StringUtils::AlphaNumericCompare(l, r); if (result > 0) return true; if (result < 0) return false; // album and artist match - sort by track int lt = 0, rt=0; if (left->HasMusicInfoTag()) lt = left->GetMusicInfoTag()->GetTrackAndDiskNumber(); if (right->HasMusicInfoTag()) rt = right->GetMusicInfoTag()->GetTrackAndDiskNumber(); return rt < lt; } return left->m_bIsFolder; }
bool SSortFileItem::SongArtistDescendingNoThe(CFileItem *left, CFileItem *right) { // sanity RETURN_IF_NULL(left,false); RETURN_IF_NULL(right,false); // special cases if (left->IsParentFolder()) return true; if (right->IsParentFolder()) return false; // only if they're both folders or both files do we do the full comparison if (left->m_bIsFolder == right->m_bIsFolder) { char *l; CStdString strL; if (left->HasMusicInfoTag()) l = (char *)left->GetMusicInfoTag()->GetArtist().c_str(); else if (left->HasVideoInfoTag()) { strL = left->GetVideoInfoTag()->m_strArtist; l = (char*)strL.c_str(); } else l = (char*)strL.c_str(); char *r; CStdString strR; if (right->HasMusicInfoTag()) r = (char *)right->GetMusicInfoTag()->GetArtist().c_str(); else if (right->HasVideoInfoTag()) { strR = right->GetVideoInfoTag()->m_strArtist; r = (char*)strR.c_str(); } else r = (char*)strR.c_str(); l += StartsWithToken(l); r += StartsWithToken(r); int result = StringUtils::AlphaNumericCompare(l, r); if (result > 0) return true; if (result < 0) return false; // test year if (g_advancedSettings.m_bMusicLibraryAlbumsSortByArtistThenYear) { int yL = 0, yR = 0; if (left->HasMusicInfoTag()) yL = left->GetMusicInfoTag()->GetYear(); else if (left->HasVideoInfoTag()) yL = left->GetVideoInfoTag()->m_iYear; if (right->HasMusicInfoTag()) yR = right->GetMusicInfoTag()->GetYear(); else if (right->HasVideoInfoTag()) yR = right->GetVideoInfoTag()->m_iYear; if (yL > yR) return true; if (yL < yR) return false; } // artists agree, test the album if (left->HasMusicInfoTag()) l = (char *)left->GetMusicInfoTag()->GetAlbum().c_str(); else if (left->HasVideoInfoTag()) l = (char*)left->GetVideoInfoTag()->m_strAlbum.c_str(); if (right->HasMusicInfoTag()) r = (char *)right->GetMusicInfoTag()->GetAlbum().c_str(); else if (right->HasVideoInfoTag()) r = (char*)right->GetVideoInfoTag()->m_strAlbum.c_str(); l += StartsWithToken(l); r += StartsWithToken(r); result = StringUtils::AlphaNumericCompare(l, r); if (result > 0) return true; if (result < 0) return false; // artist and album agree, test the track number int lt = 0, rt=0; if (left->HasMusicInfoTag()) lt = left->GetMusicInfoTag()->GetTrackAndDiskNumber(); if (right->HasMusicInfoTag()) rt = right->GetMusicInfoTag()->GetTrackAndDiskNumber(); return rt < lt; } return left->m_bIsFolder;}