From 6ca074492c815d8bab05d44b6a966283788f433d Mon Sep 17 00:00:00 2001
From: Lawrence Rust <lvr@softsystem.co.uk>
Date: Mon, 30 Jan 2012 20:51:38 +0100
Subject: [PATCH 2/3] libmythbase: Handle mixed-mode (audio+data) CDs

This fixes a bug in mythcdrom-linux.cpp which currently announces
the data portion of a mixed mode CD rather than the audio.  This change
enables MythMusic to autoplay the CD audio.

Signed-off-by: Lawrence Rust <lvr@softsystem.co.uk>
---
 mythtv/libs/libmythbase/mythcdrom-linux.cpp |   20 ++++++++++++++++++--
 1 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/mythtv/libs/libmythbase/mythcdrom-linux.cpp b/mythtv/libs/libmythbase/mythcdrom-linux.cpp
index 309aed8..1069318 100644
--- a/mythtv/libs/libmythbase/mythcdrom-linux.cpp
+++ b/mythtv/libs/libmythbase/mythcdrom-linux.cpp
@@ -23,7 +23,9 @@
 #define LOC     QString("MythCDROMLinux:")
 
 // On a mixed-mode disc (audio+data), set this to 0 to mount the data portion:
+#ifndef ASSUME_WANT_AUDIO
 #define ASSUME_WANT_AUDIO 1
+#endif
 
 
 // Some features cannot be detected (reliably) using the standard
@@ -432,6 +434,15 @@ MythMediaStatus MythCDROMLinux::checkMedia()
     // If we have tried to mount and failed, don't keep trying
     if (m_Status == MEDIASTAT_ERROR)
     {
+        // Check if an external agent (like Gnome/KDE) mounted the disk
+        if (isMounted())
+        {
+            onDeviceMounted();
+            // pretend we're NOTMOUNTED so setStatus emits a signal
+            m_Status = MEDIASTAT_NOTMOUNTED;
+            return setStatus(MEDIASTAT_MOUNTED, OpenedHere);
+        }
+
         LOG(VB_MEDIA, LOG_DEBUG, "Disc is unmountable?");
         if (OpenedHere)
             closeDevice();
@@ -537,18 +548,23 @@ MythMediaStatus MythCDROMLinux::checkMedia()
             }
             case CDS_AUDIO:
                 LOG(VB_MEDIA, LOG_DEBUG, "found an audio disk");
+                // pretend we're NOTMOUNTED so setStatus emits a signal
+                m_Status = MEDIASTAT_NOTMOUNTED;
                 m_MediaType = MEDIATYPE_AUDIO;
                 return setStatus(MEDIASTAT_USEABLE, OpenedHere);
                 break;
             case CDS_MIXED:
-                m_MediaType = MEDIATYPE_MIXED;
                 LOG(VB_MEDIA, LOG_DEBUG, "found a mixed CD");
                 // Note: Mixed mode CDs require an explixit mount call
                 //       since we'll usually want the audio portion.
                 // undefine ASSUME_WANT_AUDIO to change this behavior.
-                #ifdef ASSUME_WANT_AUDIO
+                #if ASSUME_WANT_AUDIO
+                    // pretend we're NOTMOUNTED so setStatus emits a signal
+                    m_Status = MEDIASTAT_NOTMOUNTED;
+                    m_MediaType = MEDIATYPE_AUDIO;
                     return setStatus(MEDIASTAT_USEABLE, OpenedHere);
                 #else
+                    m_MediaType = MEDIATYPE_MIXED;
                     mount();
                     if (isMounted())
                     {
-- 
1.7.4.1

