Exemple #1
0
void CMusicInfoTag::SetSong(const CSong& song)
{
  Clear();
  SetTitle(song.strTitle);
  SetGenre(song.genre);
  /* Set all artist infomation from song artist credits and artist description.
     During processing e.g. Cue Sheets, song may only have artist description string 
     rather than a fully populated artist credits vector.
  */
  if (!song.HasArtistCredits())
    SetArtist(song.GetArtistString()); //Sets both artist description string and artist vector from string
  else
  {
    SetArtistDesc(song.GetArtistString());
    SetArtist(song.GetArtist());
    SetMusicBrainzArtistID(song.GetMusicBrainzArtistID());
  }
  SetAlbum(song.strAlbum);
  SetAlbumArtist(song.GetAlbumArtist()); //Only have album artist in song as vector, no desc or MBID
  SetMusicBrainzTrackID(song.strMusicBrainzTrackID);
  SetContributors(song.GetContributors());
  SetComment(song.strComment);
  SetCueSheet(song.strCueSheet);
  SetPlayCount(song.iTimesPlayed);
  SetLastPlayed(song.lastPlayed);
  SetDateAdded(song.dateAdded);
  SetCoverArtInfo(song.embeddedArt.size, song.embeddedArt.mime);
  SetRating(song.rating);
  SetUserrating(song.userrating);
  SetVotes(song.votes);
  SetURL(song.strFileName);
  SYSTEMTIME stTime;
  stTime.wYear = song.iYear;
  SetReleaseDate(stTime);
  SetTrackAndDiscNumber(song.iTrack);
  SetDuration(song.iDuration);
  SetMood(song.strMood);
  SetCompilation(song.bCompilation);
  SetAlbumId(song.idAlbum);
  SetDatabaseId(song.idSong, MediaTypeSong);

  if (song.replayGain.Get(ReplayGain::TRACK).Valid())
    m_replayGain.Set(ReplayGain::TRACK, song.replayGain.Get(ReplayGain::TRACK));
  if (song.replayGain.Get(ReplayGain::ALBUM).Valid())
    m_replayGain.Set(ReplayGain::ALBUM, song.replayGain.Get(ReplayGain::ALBUM));

  SetLoaded();
}
Exemple #2
0
void CMusicInfoTag::SetSong(const CSong& song)
{
  SetTitle(song.strTitle);
  SetGenre(song.genre);
  //Set all artist infomation from song artist credits and artist description
  SetArtistDesc(song.strArtistDesc);
  SetArtist(song.GetArtist());
  SetMusicBrainzArtistID(song.GetMusicBrainzArtistID());
  SetAlbum(song.strAlbum);
  SetAlbumArtist(song.albumArtist); //Only have album artist in song as vector, no desc or MBID
  SetMusicBrainzTrackID(song.strMusicBrainzTrackID);
  SetComment(song.strComment);
  SetCueSheet(song.strCueSheet);
  SetPlayCount(song.iTimesPlayed);
  SetLastPlayed(song.lastPlayed);
  SetDateAdded(song.dateAdded);
  SetCoverArtInfo(song.embeddedArt.size, song.embeddedArt.mime);
  SetRating(song.rating);
  SetURL(song.strFileName);
  SYSTEMTIME stTime;
  stTime.wYear = song.iYear;
  SetReleaseDate(stTime);
  SetTrackNumber(song.iTrack);
  SetDuration(song.iDuration);
  SetMood(song.strMood);
  SetCompilation(song.bCompilation);
  SetAlbumId(song.idAlbum);
  SetDatabaseId(song.idSong, MediaTypeSong);

  if (song.replayGain.Get(ReplayGain::TRACK).Valid())
    m_replayGain.Set(ReplayGain::TRACK, song.replayGain.Get(ReplayGain::TRACK));
  if (song.replayGain.Get(ReplayGain::ALBUM).Valid())
    m_replayGain.Set(ReplayGain::ALBUM, song.replayGain.Get(ReplayGain::ALBUM));

  SetLoaded();
}
Exemple #3
0
bool CMusicLibrary::SaveMedia(CMedia* pMedia)
{
    CSong* pSong = static_cast<CSong*>(pMedia);
    long ID = pSong->GetID();

    // save the song to the device
    wxString Path = this->GetLibraryPath();
    bool OK = true;
    OK = OK | m_pDevice->AddFolder(cms::ReplaceIllegalPathCharsWithUnderscore(pSong->GetArtist() ), Path);
    OK = OK | m_pDevice->AddFolder(cms::ReplaceIllegalPathCharsWithUnderscore(pSong->GetAlbum() ), Path);
    Path << cms::ReplaceIllegalPathCharsWithUnderscore(pSong->GetTitle() ) << ".";
    Path << CMedia::GetFileTypeStr(pSong->GetFullPath() );
    if (!OK)
    {
        return false;
    }
    if (!m_pDevice->SaveMedia(pSong, Path) )
    {
        return false;
    }

    // add song to library database
    wxString str;
    if (pSong->GetID() < 0)
    {
        str << "INSERT INTO main." << m_pDevice->GetDeviceName()
            << " (col_Artist,col_Album,col_Title,col_Genre,"
            << "col_Time,col_Track,col_Year,col_Type,col_BitRate,col_SampleRate,"
            << "col_Channels,col_Comment,col_FullPath) VALUES ("
            << "'" << cms::sqlEscapeQuotes(pSong->GetArtist() ) << "',"
            << "'" << cms::sqlEscapeQuotes(pSong->GetAlbum() ) << "',"
            << "'" << cms::sqlEscapeQuotes(pSong->GetTitle() ) << "',"
            << "'" << cms::sqlEscapeQuotes(pSong->GetGenre() ) << "',"
            << "'" << pSong->GetTimeString() << "',"
            << "'" << pSong->GetTrack() << "',"
            << "'" << pSong->GetYear() << "',"
            << "'" << pSong->GetType() << "',"
            << "'" << pSong->GetBitRate() << "',"
            << "'" << pSong->GetSampleRate() << "',"
            << "'" << pSong->GetChannels() << "',"
            << "'" << cms::sqlEscapeQuotes(pSong->GetComment() ) << "',"
            << "'" << cms::sqlEscapeQuotes(pSong->GetFullPath() ) << "')";
    }
    else
    {
        str << "UPDATE main." << m_pDevice->GetDeviceName() << " SET "
            << "col_Artist=" << cms::sqlEscapeQuotes(pSong->GetArtist() ) << ","
            << "col_Album=" << cms::sqlEscapeQuotes(pSong->GetAlbum() ) << ","
            << "col_Title=" << cms::sqlEscapeQuotes(pSong->GetTitle() ) << ","
            << "col_Genre=" << cms::sqlEscapeQuotes(pSong->GetGenre() ) << ","
            << "col_Time=" << pSong->GetTimeString() << ","
            << "col_Track=" << pSong->GetTrack() << ","
            << "col_Year=" << pSong->GetYear() << ","
            << "col_Type=" << pSong->GetType() << ","
            << "col_BitRate=" << pSong->GetBitRate() << ","
            << "col_SampleRate=" << pSong->GetSampleRate() << ","
            << "col_Channels=" << pSong->GetChannels() << ","
            << "col_Comment=" << cms::sqlEscapeQuotes(pSong->GetComment() ) << ","
            << "col_FullPath=" << cms::sqlEscapeQuotes(pSong->GetFullPath() )
            << " WHERE ROWID=" << pSong->GetID();
    }
    if (!m_pDatabase->ProcessStatement(str) )
    {
        return false;
    }
    return true;
}
Exemple #4
0
bool CMusicLibrary::InsertMediaInList(CMedia* pMedia)
{
    CSong* pThisSong = static_cast<CSong*>(pMedia);

    wxTreeListItem ArtistItem,
                   AlbumItem,
                   TitleItem,
                   ThisItem,
                   LastArtistItem,
                   LastAlbumItem,
                   LastTitleItem;

    // artist
    ThisItem = m_pTreelistCtrl->GetFirstChild(m_pTreelistCtrl->GetRootItem() );
    if (!ThisItem.IsOk() )
    {
        ArtistItem = m_pTreelistCtrl->AppendItem(m_pTreelistCtrl->GetRootItem(), pThisSong->GetArtist() );
    }
    else
    {
        while (ThisItem.IsOk() )
        {
            int comp = pThisSong->GetArtist().CmpNoCase(m_pTreelistCtrl->GetItemText(ThisItem, 0) );
            if (comp > 0) // keep going
            {
                LastArtistItem = ThisItem;
                ThisItem = m_pTreelistCtrl->GetNextSibling(LastArtistItem);
                if (!ThisItem.IsOk() )
                {
                    ArtistItem = m_pTreelistCtrl->AppendItem(m_pTreelistCtrl->GetRootItem(), pThisSong->GetArtist() );
                    break;
                }
            }
            else if (comp < 0)  // prepend
            {
                if (LastArtistItem.IsOk() )
                    ArtistItem = m_pTreelistCtrl->InsertItem(m_pTreelistCtrl->GetRootItem(), LastArtistItem, pThisSong->GetArtist() );
                else
                    ArtistItem = m_pTreelistCtrl->PrependItem(m_pTreelistCtrl->GetRootItem(), pThisSong->GetArtist() );
                break;
            }
            else if (comp == 0) // append here
            {
                ArtistItem = ThisItem;
                break;
            }
        }
    }

    // album
    ThisItem = m_pTreelistCtrl->GetFirstChild(ArtistItem);
    if (!ThisItem.IsOk() )
    {
        AlbumItem = m_pTreelistCtrl->AppendItem(ArtistItem, pThisSong->GetAlbum() );
    }
    else
    {
        while (ThisItem.IsOk() )
        {
            int comp = pThisSong->GetAlbum().CmpNoCase(m_pTreelistCtrl->GetItemText(ThisItem, 0) );
            if (comp > 0)  // append
            {
                LastAlbumItem = ThisItem;
                ThisItem = m_pTreelistCtrl->GetNextSibling(LastAlbumItem);
                if (!ThisItem.IsOk() )
                {
                    AlbumItem = m_pTreelistCtrl->AppendItem(ArtistItem, pThisSong->GetAlbum() );
                    break;
                }
            }
            else if (comp < 0)  // prepend
            {
                if (LastAlbumItem.IsOk() )
                    AlbumItem = m_pTreelistCtrl->InsertItem(ArtistItem, LastAlbumItem, pThisSong->GetAlbum() );
                else
                    AlbumItem = m_pTreelistCtrl->PrependItem(ArtistItem, pThisSong->GetAlbum() );
                break;
            }
            else if (comp == 0) // append here
            {
                AlbumItem = ThisItem;
                break;
            }
        }
    }

    // track
    ThisItem = m_pTreelistCtrl->GetFirstChild(AlbumItem);
    if (!ThisItem.IsOk() )
    {
        TitleItem = m_pTreelistCtrl->AppendItem(AlbumItem, pThisSong->GetTitle() );
    }
    else
    {
        while (ThisItem.IsOk() )
        {
            wxString temp = m_pTreelistCtrl->GetItemText(ThisItem, TRACK_COLUMN_NUM);
            long CurrentTrack = -1;
            temp.ToLong(&CurrentTrack);
            int ThisTrack = pThisSong->GetTrack();
            if (ThisTrack > CurrentTrack)  // append
            {
                LastTitleItem = ThisItem;
                ThisItem = m_pTreelistCtrl->GetNextSibling(LastTitleItem);
                if (!ThisItem.IsOk() )
                {
                    TitleItem = m_pTreelistCtrl->AppendItem(AlbumItem, pThisSong->GetTitle() );
                    break;
                }
            }
            else if (ThisTrack < CurrentTrack)  // prepend
            {
                if (LastTitleItem.IsOk() )
                    TitleItem = m_pTreelistCtrl->InsertItem(AlbumItem, LastTitleItem, pThisSong->GetTitle() );
                else
                    TitleItem = m_pTreelistCtrl->PrependItem(AlbumItem, pThisSong->GetTitle() );
                break;
            }
            else if (ThisTrack == CurrentTrack) // duplicate item
            {
                return true;
            }
        }
    }

    // song info
    m_pTreelistCtrl->SetItemText(TitleItem, GENRE_COLUMN_NUM, pThisSong->GetGenre() );
    m_pTreelistCtrl->SetItemText(TitleItem, TIME_COLUMN_NUM, pThisSong->GetTimeString() );
    m_pTreelistCtrl->SetItemText(TitleItem, TRACK_COLUMN_NUM, wxString::Format("%d", pThisSong->GetTrack() ) );
    m_pTreelistCtrl->SetItemText(TitleItem, YEAR_COLUMN_NUM, wxString::Format("%d", pThisSong->GetYear() ) );
    m_pTreelistCtrl->SetItemText(TitleItem, TYPE_COLUMN_NUM, pThisSong->GetType() );
    m_pTreelistCtrl->SetItemText(TitleItem, BITRATE_COLUMN_NUM, wxString::Format("%d", pThisSong->GetBitRate() ) );
    m_pTreelistCtrl->SetItemText(TitleItem, SAMPLERATE_COLUMN_NUM, wxString::Format("%d", pThisSong->GetSampleRate() ) );
    CListItemData* pData = new CListItemData(pThisSong->GetID() );
    m_pTreelistCtrl->SetItemData(TitleItem, pData);
    m_ItemCount++;

    return true;
}