static void handleMedia(MythMediaDevice *cd) { // Note that we should deal with other disks that may contain music. // e.g. MEDIATYPE_MMUSIC or MEDIATYPE_MIXED if (!cd) return; if (cd->isUsable()) { QString newDevice; #ifdef Q_OS_MAC newDevice = cd->getMountPath(); #else newDevice = cd->getDevicePath(); #endif if (gCDdevice.length() && gCDdevice != newDevice) { // In the case of multiple audio CDs, clear the old stored device // so the user has to choose (via MediaMonitor::defaultCDdevice()) gCDdevice = QString::null; VERBOSE(VB_MEDIA, "MythMusic: Forgetting existing CD"); } else { gCDdevice = newDevice; VERBOSE(VB_MEDIA, "MythMusic: Storing CD device " + gCDdevice); } } else { gCDdevice = QString::null; return; } GetMythMainWindow()->JumpTo("Main Menu"); if (gCoreContext->GetNumSetting("AutoPlayCD", 0)) { // Empty the playlist to ensure CD is played first if (gMusicData->all_music) gMusicData->all_music->clearCDData(); if (gMusicData->all_playlists) gMusicData->all_playlists->clearCDList(); runMusicPlayback(); } else mythplugin_run(); }
static void handleCDMedia(MythMediaDevice *cd) { if (!cd) return; LOG(VB_MEDIA, LOG_NOTICE, "Got a media changed event"); QString newDevice; // save the device if valid if (cd->isUsable()) { #ifdef Q_OS_MAC newDevice = cd->getMountPath(); #else newDevice = cd->getDevicePath(); #endif gCDdevice = newDevice; LOG(VB_MEDIA, LOG_INFO, "MythMusic: Storing CD device " + gCDdevice); } else { LOG(VB_MEDIA, LOG_INFO, "Device is not usable clearing cd data"); if (gPlayer->isPlaying() && gPlayer->getCurrentMetadata() && gPlayer->getCurrentMetadata()->isCDTrack()) { // we was playing a cd track which is no longer available so stop playback // TODO should check the playing track is from the ejected drive if more than one is available gPlayer->stop(true); } // device is not usable so remove any existing CD tracks if (gMusicData->all_music) { gMusicData->all_music->clearCDData(); gMusicData->all_playlists->getActive()->removeAllCDTracks(); } gPlayer->activePlaylistChanged(-1, false); gPlayer->sendCDChangedEvent(); return; } if (!gMusicData->initialized) gMusicData->loadMusic(); // remove any existing CD tracks if (gMusicData->all_music) { gMusicData->all_music->clearCDData(); gMusicData->all_playlists->getActive()->removeAllCDTracks(); } // find any new cd tracks CdDecoder *decoder = new CdDecoder("cda", NULL, NULL); decoder->setDevice(newDevice); int tracks = decoder->getNumTracks(); bool setTitle = false; for (int trackNo = 1; trackNo <= tracks; trackNo++) { MusicMetadata *track = decoder->getMetadata(trackNo); if (track) { gMusicData->all_music->addCDTrack(*track); if (!setTitle) { QString parenttitle = " "; if (track->FormatArtist().length() > 0) { parenttitle += track->FormatArtist(); parenttitle += " ~ "; } if (track->Album().length() > 0) parenttitle += track->Album(); else { parenttitle = " " + qApp->translate("(MythMusicMain)", "Unknown"); LOG(VB_GENERAL, LOG_INFO, "Couldn't find your " " CD. It may not be in the freedb database.\n" " More likely, however, is that you need to delete\n" " ~/.cddb and ~/.cdserverrc and restart MythMusic."); } gMusicData->all_music->setCDTitle(parenttitle); setTitle = true; } delete track; } } gPlayer->sendCDChangedEvent(); delete decoder; // if the AutoPlayCD setting is set we remove all the existing tracks // from the playlist and replace them with the new CD tracks found if (gCoreContext->GetNumSetting("AutoPlayCD", 0)) { gMusicData->all_playlists->getActive()->removeAllTracks(); QList<int> songList; for (int x = 1; x <= gMusicData->all_music->getCDTrackCount(); x++) { MusicMetadata *mdata = gMusicData->all_music->getCDMetadata(x); if (mdata) songList.append((mdata)->ID()); } if (songList.count()) { gMusicData->all_playlists->getActive()->fillSonglistFromList( songList, true, PL_REPLACE, 0); gPlayer->setCurrentTrackPos(0); } } else { // don't show the music screen if AutoPlayCD is off return; } // if there is no music screen showing show the Playlist view if (!gPlayer->hasClient()) { // make sure we start playing from the first track gCoreContext->SaveSetting("MusicBookmark", 0); gCoreContext->SaveSetting("MusicBookmarkPosition", 0); runMusicPlayback(); } }