void CScrobbler::AddSong(const MUSIC_INFO::CMusicInfoTag &tag, bool lastfmradio) { ClearSubmissionState(); if (!CanScrobble() || !tag.Loaded()) return; if (tag.GetArtist().empty() || tag.GetTitle().IsEmpty()) return; // our tags are stored as UTF-8, so no conversion needed m_CurrentTrack.length = tag.GetDuration(); m_CurrentTrack.strArtist = StringUtils::Join(tag.GetArtist(), g_advancedSettings.m_musicItemSeparator); m_CurrentTrack.strAlbum = tag.GetAlbum(); m_CurrentTrack.strTitle = tag.GetTitle(); m_CurrentTrack.strMusicBrainzID = tag.GetMusicBrainzTrackID(); if (lastfmradio) // TODO Set source more appropriately m_CurrentTrack.strSource = "L" + tag.GetComment(); else m_CurrentTrack.strSource = "P"; m_CurrentTrack.strRating = ""; m_CurrentTrack.strLength.Format("%d", m_CurrentTrack.length); m_CurrentTrack.strStartTime.Format("%d", time(NULL)); m_CurrentTrack.strTrackNum.Format("%d",tag.GetTrackNumber()); CURL::Encode(m_CurrentTrack.strArtist); CURL::Encode(m_CurrentTrack.strTitle); CURL::Encode(m_CurrentTrack.strAlbum); CURL::Encode(m_CurrentTrack.strMusicBrainzID); m_bNotified = false; m_bSubmitted = !((lastfmradio && g_guiSettings.GetBool("scrobbler.lastfmsubmitradio")) || (!lastfmradio && g_guiSettings.GetBool("scrobbler.lastfmsubmit") && (m_CurrentTrack.length > SCROBBLER_MIN_DURATION || !m_CurrentTrack.strMusicBrainzID.IsEmpty()))); }
CStdString CCDDARipper::GetAlbumDirName(const MUSIC_INFO::CMusicInfoTag& infoTag) { CStdString strAlbumDir; // use audiocds.trackpathformat setting to format // directory name where CD tracks will be stored, // use only format part ending at the last '/' strAlbumDir = CSettings::Get().GetString("audiocds.trackpathformat"); int pos = max(strAlbumDir.ReverseFind('/'), strAlbumDir.ReverseFind('\\')); if (pos < 0) return ""; // no directory strAlbumDir = strAlbumDir.Left(pos); // replace %A with album artist name if (strAlbumDir.Find("%A") != -1) { CStdString strAlbumArtist = StringUtils::Join(infoTag.GetAlbumArtist(), g_advancedSettings.m_musicItemSeparator); if (strAlbumArtist.IsEmpty()) strAlbumArtist = StringUtils::Join(infoTag.GetArtist(), g_advancedSettings.m_musicItemSeparator); if (strAlbumArtist.IsEmpty()) strAlbumArtist = "Unknown Artist"; else strAlbumArtist.Replace('/', '_'); strAlbumDir.Replace("%A", strAlbumArtist); } // replace %B with album title if (strAlbumDir.Find("%B") != -1) { CStdString strAlbum = infoTag.GetAlbum(); if (strAlbum.IsEmpty()) strAlbum.Format("Unknown Album %s", CDateTime::GetCurrentDateTime().GetAsLocalizedDateTime().c_str()); else strAlbum.Replace('/', '_'); strAlbumDir.Replace("%B", strAlbum); } // replace %G with genre if (strAlbumDir.Find("%G") != -1) { CStdString strGenre = StringUtils::Join(infoTag.GetGenre(), g_advancedSettings.m_musicItemSeparator); if (strGenre.IsEmpty()) strGenre = "Unknown Genre"; else strGenre.Replace('/', '_'); strAlbumDir.Replace("%G", strGenre); } // replace %Y with year if (strAlbumDir.Find("%Y") != -1) { CStdString strYear = infoTag.GetYearString(); if (strYear.IsEmpty()) strYear = "Unknown Year"; else strYear.Replace('/', '_'); strAlbumDir.Replace("%Y", strYear); } return strAlbumDir; }
std::string CCDDARipper::GetAlbumDirName(const MUSIC_INFO::CMusicInfoTag& infoTag) { std::string strAlbumDir; // use audiocds.trackpathformat setting to format // directory name where CD tracks will be stored, // use only format part ending at the last '/' strAlbumDir = CSettings::GetInstance().GetString(CSettings::SETTING_AUDIOCDS_TRACKPATHFORMAT); size_t pos = strAlbumDir.find_last_of("/\\"); if (pos == std::string::npos) return ""; // no directory strAlbumDir = strAlbumDir.substr(0, pos); // replace %A with album artist name if (strAlbumDir.find("%A") != std::string::npos) { std::string strAlbumArtist = StringUtils::Join(infoTag.GetAlbumArtist(), g_advancedSettings.m_musicItemSeparator); if (strAlbumArtist.empty()) strAlbumArtist = StringUtils::Join(infoTag.GetArtist(), g_advancedSettings.m_musicItemSeparator); if (strAlbumArtist.empty()) strAlbumArtist = "Unknown Artist"; else StringUtils::Replace(strAlbumArtist, '/', '_'); StringUtils::Replace(strAlbumDir, "%A", strAlbumArtist); } // replace %B with album title if (strAlbumDir.find("%B") != std::string::npos) { std::string strAlbum = infoTag.GetAlbum(); if (strAlbum.empty()) strAlbum = StringUtils::Format("Unknown Album %s", CDateTime::GetCurrentDateTime().GetAsLocalizedDateTime().c_str()); else StringUtils::Replace(strAlbum, '/', '_'); StringUtils::Replace(strAlbumDir, "%B", strAlbum); } // replace %G with genre if (strAlbumDir.find("%G") != std::string::npos) { std::string strGenre = StringUtils::Join(infoTag.GetGenre(), g_advancedSettings.m_musicItemSeparator); if (strGenre.empty()) strGenre = "Unknown Genre"; else StringUtils::Replace(strGenre, '/', '_'); StringUtils::Replace(strAlbumDir, "%G", strGenre); } // replace %Y with year if (strAlbumDir.find("%Y") != std::string::npos) { std::string strYear = infoTag.GetYearString(); if (strYear.empty()) strYear = "Unknown Year"; else StringUtils::Replace(strYear, '/', '_'); StringUtils::Replace(strAlbumDir, "%Y", strYear); } return strAlbumDir; }