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(); }
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(); }
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; }
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; }