bool CCDDARipper::RipCD() { // return here if cd is not a CDDA disc MEDIA_DETECT::CCdInfo* pInfo = g_mediaManager.GetCdInfo(); if (pInfo == NULL || !pInfo->IsAudio(1)) { CLog::Log(LOGDEBUG, "cddaripper: CD is not an audio cd"); return false; } // get cd cdda contents CFileItemList vecItems; XFILE::CCDDADirectory directory; directory.GetDirectory("cdda://local/", vecItems); // get cddb info for (int i = 0; i < vecItems.Size(); ++i) { CFileItemPtr pItem = vecItems[i]; CMusicInfoTagLoaderFactory factory; auto_ptr<IMusicInfoTagLoader> pLoader (factory.CreateLoader(pItem->GetPath())); if (NULL != pLoader.get()) { pLoader->Load(pItem->GetPath(), *pItem->GetMusicInfoTag()); // get tag from file if (!pItem->GetMusicInfoTag()->Loaded()) break; // No CDDB info available } } // construct directory where the tracks are stored CStdString strDirectory; int legalType; if (!CreateAlbumDir(*vecItems[0]->GetMusicInfoTag(), strDirectory, legalType)) return false; // rip all tracks one by one for (int i = 0; i < vecItems.Size(); i++) { CFileItemPtr item = vecItems[i]; // construct filename CStdString strFile = URIUtils::AddFileToFolder(strDirectory, CUtil::MakeLegalFileName(GetTrackName(item.get()), legalType)); // don't rip non cdda items if (item->GetPath().Find(".cdda") < 0) continue; bool eject = CSettings::Get().GetBool("audiocds.ejectonrip") && i == vecItems.Size()-1; AddJob(new CCDDARipJob(item->GetPath(),strFile, *item->GetMusicInfoTag(), CSettings::Get().GetInt("audiocds.encoder"), eject)); } return true; }
bool CCDDARipper::RipCD() { // return here if cd is not a CDDA disc MEDIA_DETECT::CCdInfo* pInfo = g_mediaManager.GetCdInfo(); if (pInfo == NULL || !pInfo->IsAudio(1)) { CLog::Log(LOGDEBUG, "cddaripper: CD is not an audio cd"); return false; } // get cd cdda contents CFileItemList vecItems; XFILE::CCDDADirectory directory; directory.GetDirectory(CURL("cdda://local/"), vecItems); // get cddb info for (int i = 0; i < vecItems.Size(); ++i) { CFileItemPtr pItem = vecItems[i]; CMusicInfoTagLoaderFactory factory; std::unique_ptr<IMusicInfoTagLoader> pLoader (factory.CreateLoader(*pItem)); if (NULL != pLoader.get()) { pLoader->Load(pItem->GetPath(), *pItem->GetMusicInfoTag()); // get tag from file if (!pItem->GetMusicInfoTag()->Loaded()) break; // No CDDB info available } } // construct directory where the tracks are stored std::string strDirectory; int legalType; if (!CreateAlbumDir(*vecItems[0]->GetMusicInfoTag(), strDirectory, legalType)) return false; // rip all tracks one by one const std::shared_ptr<CSettings> settings = CServiceBroker::GetSettingsComponent()->GetSettings(); for (int i = 0; i < vecItems.Size(); i++) { CFileItemPtr item = vecItems[i]; // construct filename std::string strFile = URIUtils::AddFileToFolder(strDirectory, CUtil::MakeLegalFileName(GetTrackName(item.get()), legalType)); // don't rip non cdda items if (item->GetPath().find(".cdda") == std::string::npos) continue; bool eject = settings->GetBool(CSettings::SETTING_AUDIOCDS_EJECTONRIP) && i == vecItems.Size()-1; AddJob(new CCDDARipJob(item->GetPath(),strFile, *item->GetMusicInfoTag(), settings->GetInt(CSettings::SETTING_AUDIOCDS_ENCODER), eject)); } return true; }