Ticket #4877: CDefficiency.svn.patch

File CDefficiency.svn.patch, 4.0 KB (added by Nigel, 12 years ago)

SVN checkMedia optimisation

  • mythcdrom-linux.cpp

     
    379379        case CDS_DISC_OK:
    380380            VERBOSE(VB_MEDIA, m_DevicePath + " Disk OK, type = "
    381381                              + MediaTypeString(m_MediaType) );
    382             // 1. Audio CDs are not mounted
    383             // 2. If we don't know the media type yet,
    384             //    test the disk after this switch exits
    385             if (m_MediaType == MEDIATYPE_AUDIO ||
    386                 m_MediaType == MEDIATYPE_UNKNOWN)
    387                 break;
    388             // If we have tried to mount and failed, don't keep trying:
    389             if (m_Status == MEDIASTAT_ERROR)
    390                 return m_Status;
    391             // If the disc is ok and we already know it's mediatype
    392             // returns MOUNTED.
    393             if (isMounted())
    394                 return setStatus(MEDIASTAT_MOUNTED, OpenedHere);
     382            // further checking is required
    395383            break;
    396384        case CDS_TRAY_OPEN:
    397385            VERBOSE(VB_MEDIA, m_DevicePath + " Tray open or no disc");
     386            // First, send a message to the
     387            // plugins to forget the current media type
    398388            setStatus(MEDIASTAT_OPEN, OpenedHere);
     389            // then "clear out" this device
    399390            m_MediaType = MEDIATYPE_UNKNOWN;
    400391            return MEDIASTAT_OPEN;
    401392            break;
     
    424415        return setStatus(MEDIASTAT_OPEN, OpenedHere);
    425416    }
    426417
    427     VERBOSE(VB_MEDIA+VB_EXTRA, m_DevicePath + " Media unchanged...");
     418
     419    if (isUsable())
     420    {
     421        VERBOSE(VB_MEDIA+VB_EXTRA, "Disc useable, media unchanged. All good!");
     422        if (OpenedHere)
     423            closeDevice();
     424        return MEDIASTAT_USEABLE;
     425    }
     426
     427    // If we have tried to mount and failed, don't keep trying
     428    if (m_Status == MEDIASTAT_ERROR)
     429    {
     430        VERBOSE(VB_MEDIA+VB_EXTRA, "Disc is unmountable?");
     431        if (OpenedHere)
     432            closeDevice();
     433        return m_Status;
     434    }
     435
    428436    if ((m_Status == MEDIASTAT_OPEN) ||
    429437        (m_Status == MEDIASTAT_UNKNOWN))
    430438    {
     
    517525                return setStatus(MEDIASTAT_UNKNOWN, OpenedHere);
    518526        }
    519527    }
    520     else if (m_Status == MEDIASTAT_MOUNTED ||
    521              m_Status == MEDIASTAT_NOTMOUNTED)
    522     {
    523         VERBOSE(VB_MEDIA, QString("Current status == ")
    524                           + MythMediaDevice::MediaStatusStrings[m_Status]);
    525         VERBOSE(VB_MEDIA, "Setting mount status");
    526         if (isMounted())
    527             setStatus(MEDIASTAT_MOUNTED, OpenedHere);
    528         else
    529             setStatus(MEDIASTAT_NOTMOUNTED, OpenedHere);
    530     }
    531528
    532529    if (m_AllowEject)
    533530        unlock();
  • mythcdrom.h

     
    1414
    1515    virtual bool mediaChanged(void) { return false; }
    1616    virtual bool checkOK(void)      { return true; }
    17     virtual bool openDevice(void);
    1817    virtual MediaStatus checkMedia(void)
    1918    {
    2019        return setStatus(MEDIASTAT_UNKNOWN, false);
  • mythcdrom.cpp

     
    4747{
    4848}
    4949
    50 bool MythCDROM::openDevice()
    51 {
    52     if (MythMediaDevice::openDevice())
    53     {
    54         // If allow eject is on, unlock the door.
    55         if (m_AllowEject)
    56             unlock();
    57        
    58         return true;
    59     }
    60 
    61     return false;
    62 }
    63 
    6450void MythCDROM::onDeviceMounted()
    6551{
    6652    if (!QDir(m_MountPath).exists())
     
    119105    if (MEDIATYPE_DATA == m_MediaType)
    120106        MythMediaDevice::onDeviceMounted();
    121107
     108    // Unlock the door, and if appropriate unmount the media,
     109    // so the user can press the manual eject button
    122110    if (m_AllowEject)
     111    {
    123112        unlock();
     113        if (m_MediaType == MEDIATYPE_DVD || m_MediaType == MEDIATYPE_VCD)
     114            unmount();
     115    }
    124116}
    125117