示例#1
0
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;
}
示例#2
0
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);
}
示例#3
0
void SSortFileItem::ByLabelNoThe(CFileItemPtr &item)
{
  if (!item) return;
  item->SetSortLabel(item->GetLabel().Mid(StartsWithToken(item->GetLabel())));
}
示例#4
0
void SSortFileItem::ByStudioNoThe(CFileItemPtr &item)
{
  if (!item) return;
  CStdString studio = item->GetVideoInfoTag()->m_strStudio;
  item->SetSortLabel(studio.Mid(StartsWithToken(studio)));
}
示例#5
0
void SSortFileItem::BySongTitleNoThe(CFileItemPtr &item)
{
  if (!item) return;
  int start = StartsWithToken(item->GetMusicInfoTag()->GetTitle());
  item->SetSortLabel(item->GetMusicInfoTag()->GetTitle().Mid(start));
}
示例#6
0
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;
}
示例#7
0
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;}