VirtualBox

Changeset 78398 in vbox


Ignore:
Timestamp:
May 6, 2019 6:03:31 PM (5 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:7127: UIMediumEnumerator: Implement OnMediumRegistered event handler.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumEnumerator.cpp

    r78397 r78398  
    2222#include "VBoxGlobal.h"
    2323#include "UIMediumEnumerator.h"
     24#include "UIMessageCenter.h"
    2425#include "UIThreadPool.h"
    2526#include "UIVirtualBoxEventHandler.h"
     
    392393    LogRel2(("GUI: UIMediumEnumerator: OnMediumRegistered event received, Medium ID = {%s}, Medium type = {%d}, Registered = {%d}\n",
    393394             uMediumId.toString().toUtf8().constData(), enmMediumType, fRegistered));
     395
     396    /* New medium registered: */
     397    if (fRegistered)
     398    {
     399        /* Make sure this medium isn't already cached: */
     400        if (!medium(uMediumId).isNull())
     401        {
     402            LogRel2(("GUI: UIMediumEnumerator:  Medium {%s} is cached already and will be enumerated!\n",
     403                     uMediumId.toString().toUtf8().constData()));
     404            /// @todo is this valid case?
     405            AssertFailed();
     406
     407            /* Enumerate corresponding UIMedium: */
     408            createMediumEnumerationTask(m_media.value(uMediumId));
     409        }
     410        else
     411        {
     412            /* Get VBox for temporary usage, it will cache the error info: */
     413            CVirtualBox comVBox = vboxGlobal().virtualBox();
     414            /* Open existing medium, this API can be used to open known medium as well, using ID as location for that: */
     415            CMedium comMedium = comVBox.OpenMedium(uMediumId.toString(), enmMediumType, KAccessMode_ReadWrite, false);
     416
     417            /* Show error message if necessary: */
     418            if (!comVBox.isOk())
     419                msgCenter().cannotOpenKnownMedium(comVBox, uMediumId);
     420            else
     421            {
     422                /* Create new UIMedium: */
     423                const UIMedium guiMedium(comMedium, UIMediumDefs::mediumTypeToLocal(comMedium.GetDeviceType()));
     424                const QUuid &uUIMediumKey = guiMedium.key();
     425
     426                /* Cache corresponding UIMedium: */
     427                m_media.insert(uUIMediumKey, guiMedium);
     428                LogRel2(("GUI: UIMediumEnumerator:  Medium {%s} is now cached and will be enumerated..\n",
     429                         uUIMediumKey.toString().toUtf8().constData()));
     430
     431                /* And notify listeners: */
     432                emit sigMediumCreated(uUIMediumKey);
     433
     434                /* Enumerate corresponding UIMedium: */
     435                createMediumEnumerationTask(m_media.value(uMediumId));
     436            }
     437        }
     438    }
     439    /* Old medium unregistered: */
     440    else
     441    {
     442        /* Make sure this medium is still cached: */
     443        if (medium(uMediumId).isNull())
     444        {
     445            LogRel2(("GUI: UIMediumEnumerator:  Medium {%s} was not currently cached!\n",
     446                     uMediumId.toString().toUtf8().constData()));
     447            /// @todo is this a valid case?
     448            AssertFailed();
     449        }
     450        else
     451        {
     452            /* Forget corresponding UIMedium: */
     453            m_media.remove(uMediumId);
     454            LogRel2(("GUI: UIMediumEnumerator:  Medium {%s} is no more cached!\n",
     455                     uMediumId.toString().toUtf8().constData()));
     456
     457            /* And notify listeners: */
     458            emit sigMediumDeleted(uMediumId);
     459        }
     460    }
    394461}
    395462
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette