VirtualBox

Changeset 104888 in vbox


Ignore:
Timestamp:
Jun 12, 2024 11:20:56 AM (10 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
163490
Message:

FE/Qt: UIMediumEnumerator: A bit of sub encapsulation for enumerator functionality which will be wrapped under a proper lock later.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/medium
Files:
2 edited

Legend:

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

    r104887 r104888  
    185185QList<QUuid> UIMediumEnumerator::mediumIDs() const
    186186{
    187     /* Return keys of current media map: */
    188     return m_media.keys();
     187    return mediumIDsSub();
    189188}
    190189
    191190UIMedium UIMediumEnumerator::medium(const QUuid &uMediumID) const
    192191{
    193     /* Search through current media map
    194      * for the UIMedium with passed ID: */
    195     if (m_media.contains(uMediumID))
    196         return m_media.value(uMediumID);
    197     /* Return NULL UIMedium otherwise: */
    198     return UIMedium();
     192    return mediumSub(uMediumID);
    199193}
    200194
    201195void UIMediumEnumerator::createMedium(const UIMedium &guiMedium)
    202196{
    203     /* Get UIMedium ID: */
    204     const QUuid uMediumID = guiMedium.id();
    205 
    206     /* Do not create UIMedium(s) with incorrect ID: */
    207     AssertReturnVoid(!uMediumID.isNull());
    208     /* Make sure UIMedium doesn't exist already: */
    209     if (m_media.contains(uMediumID))
    210         return;
    211 
    212     /* Insert UIMedium: */
    213     m_media[uMediumID] = guiMedium;
    214     LogRel(("GUI: UIMediumEnumerator: Medium with key={%s} created\n", uMediumID.toString().toUtf8().constData()));
    215 
    216     /* Notify listener: */
    217     emit sigMediumCreated(uMediumID);
     197    createMediumSub(guiMedium);
    218198}
    219199
    220200void UIMediumEnumerator::enumerateMedia(const CMediumVector &comMedia /* = CMediumVector() */)
    221201{
    222     /* Compose new map of currently cached media & their children.
    223      * While composing we are using data from already cached media. */
    224     UIMediumMap guiMedia;
    225     addNullMediumToMap(guiMedia);
    226     if (comMedia.isEmpty())
    227     {
    228         /* Compose new map of all known media & their children: */
    229         addMediaToMap(gpGlobalSession->virtualBox().GetHardDisks(), guiMedia);
    230         addMediaToMap(gpGlobalSession->host().GetDVDDrives(), guiMedia);
    231         addMediaToMap(gpGlobalSession->virtualBox().GetDVDImages(), guiMedia);
    232         addMediaToMap(gpGlobalSession->host().GetFloppyDrives(), guiMedia);
    233         addMediaToMap(gpGlobalSession->virtualBox().GetFloppyImages(), guiMedia);
    234     }
    235     else
    236     {
    237         /* Compose new map of passed media & their children: */
    238         addMediaToMap(comMedia, guiMedia);
    239     }
    240 
    241     /* UICommon is cleaning up, abort immediately: */
    242     if (uiCommon().isCleaningUp())
    243         return;
    244 
    245     if (comMedia.isEmpty())
    246     {
    247         /* Replace existing media map since
    248          * we have full medium enumeration: */
    249         m_fFullMediumEnumerationRequested = true;
    250         m_media = guiMedia;
    251     }
    252     else
    253     {
    254         /* Throw the media to existing map: */
    255         foreach (const QUuid &uMediumId, guiMedia.keys())
    256             m_media[uMediumId] = guiMedia.value(uMediumId);
    257     }
    258 
    259     /* If enumeration hasn't yet started: */
    260     if (!m_fMediumEnumerationInProgress)
    261     {
    262         /* Notify listener about enumeration started: */
    263         LogRel(("GUI: UIMediumEnumerator: Medium-enumeration started...\n"));
    264         m_fMediumEnumerationInProgress = true;
    265         emit sigMediumEnumerationStarted();
    266 
    267         /* Make sure we really have more than one UIMedium (which is NULL): */
    268         if (   guiMedia.size() == 1
    269             && guiMedia.first().id() == UIMedium::nullID())
    270         {
    271             /* Notify listener about enumeration finished instantly: */
    272             LogRel(("GUI: UIMediumEnumerator: Medium-enumeration finished!\n"));
    273             m_fMediumEnumerationInProgress = false;
    274             emit sigMediumEnumerationFinished();
    275         }
    276     }
    277 
    278     /* Start enumeration for media with non-NULL ID: */
    279     foreach (const QUuid &uMediumID, guiMedia.keys())
    280         if (!uMediumID.isNull())
    281             createMediumEnumerationTask(guiMedia[uMediumID]);
     202    enumerateMediaSub(comMedia);
    282203}
    283204
    284205void UIMediumEnumerator::refreshMedia()
    285206{
    286     /* Make sure we are not already in progress: */
    287     AssertReturnVoid(!m_fMediumEnumerationInProgress);
    288 
    289     /* Refresh all cached media we have: */
    290     foreach (const QUuid &uMediumID, m_media.keys())
    291         m_media[uMediumID].refresh();
     207    refreshMediaSub();
    292208}
    293209
     
    364280    {
    365281        /* Make sure this medium isn't already cached: */
    366         if (!medium(uMediumId).isNull())
     282        if (!mediumSub(uMediumId).isNull())
    367283        {
    368284            /* This medium can be known because of async event nature. Currently medium registration event comes
     
    415331    {
    416332        /* Make sure this medium is still cached: */
    417         if (medium(uMediumId).isNull())
     333        if (mediumSub(uMediumId).isNull())
    418334        {
    419335            /* This medium can be wiped out already because of async event nature. Currently
     
    518434        emit sigMediumEnumerationFinished();
    519435    }
     436}
     437
     438QList<QUuid> UIMediumEnumerator::mediumIDsSub() const
     439{
     440    /* Return keys of current media map: */
     441    return m_media.keys();
     442}
     443
     444UIMedium UIMediumEnumerator::mediumSub(const QUuid &uMediumID) const
     445{
     446    /* Search through current media map
     447     * for the UIMedium with passed ID: */
     448    if (m_media.contains(uMediumID))
     449        return m_media.value(uMediumID);
     450    /* Return NULL UIMedium otherwise: */
     451    return UIMedium();
     452}
     453
     454void UIMediumEnumerator::createMediumSub(const UIMedium &guiMedium)
     455{
     456    /* Get UIMedium ID: */
     457    const QUuid uMediumID = guiMedium.id();
     458
     459    /* Do not create UIMedium(s) with incorrect ID: */
     460    AssertReturnVoid(!uMediumID.isNull());
     461    /* Make sure UIMedium doesn't exist already: */
     462    if (m_media.contains(uMediumID))
     463        return;
     464
     465    /* Insert UIMedium: */
     466    m_media[uMediumID] = guiMedium;
     467    LogRel(("GUI: UIMediumEnumerator: Medium with key={%s} created\n", uMediumID.toString().toUtf8().constData()));
     468
     469    /* Notify listener: */
     470    emit sigMediumCreated(uMediumID);
     471}
     472
     473void UIMediumEnumerator::enumerateMediaSub(const CMediumVector &comMedia /* = CMediumVector() */)
     474{
     475    /* Compose new map of currently cached media & their children.
     476     * While composing we are using data from already cached media. */
     477    UIMediumMap guiMedia;
     478    addNullMediumToMap(guiMedia);
     479    if (comMedia.isEmpty())
     480    {
     481        /* Compose new map of all known media & their children: */
     482        addMediaToMap(gpGlobalSession->virtualBox().GetHardDisks(), guiMedia);
     483        addMediaToMap(gpGlobalSession->host().GetDVDDrives(), guiMedia);
     484        addMediaToMap(gpGlobalSession->virtualBox().GetDVDImages(), guiMedia);
     485        addMediaToMap(gpGlobalSession->host().GetFloppyDrives(), guiMedia);
     486        addMediaToMap(gpGlobalSession->virtualBox().GetFloppyImages(), guiMedia);
     487    }
     488    else
     489    {
     490        /* Compose new map of passed media & their children: */
     491        addMediaToMap(comMedia, guiMedia);
     492    }
     493
     494    /* UICommon is cleaning up, abort immediately: */
     495    if (uiCommon().isCleaningUp())
     496        return;
     497
     498    if (comMedia.isEmpty())
     499    {
     500        /* Replace existing media map since
     501         * we have full medium enumeration: */
     502        m_fFullMediumEnumerationRequested = true;
     503        m_media = guiMedia;
     504    }
     505    else
     506    {
     507        /* Throw the media to existing map: */
     508        foreach (const QUuid &uMediumId, guiMedia.keys())
     509            m_media[uMediumId] = guiMedia.value(uMediumId);
     510    }
     511
     512    /* If enumeration hasn't yet started: */
     513    if (!m_fMediumEnumerationInProgress)
     514    {
     515        /* Notify listener about enumeration started: */
     516        LogRel(("GUI: UIMediumEnumerator: Medium-enumeration started...\n"));
     517        m_fMediumEnumerationInProgress = true;
     518        emit sigMediumEnumerationStarted();
     519
     520        /* Make sure we really have more than one UIMedium (which is NULL): */
     521        if (   guiMedia.size() == 1
     522            && guiMedia.first().id() == UIMedium::nullID())
     523        {
     524            /* Notify listener about enumeration finished instantly: */
     525            LogRel(("GUI: UIMediumEnumerator: Medium-enumeration finished!\n"));
     526            m_fMediumEnumerationInProgress = false;
     527            emit sigMediumEnumerationFinished();
     528        }
     529    }
     530
     531    /* Start enumeration for media with non-NULL ID: */
     532    foreach (const QUuid &uMediumID, guiMedia.keys())
     533        if (!uMediumID.isNull())
     534            createMediumEnumerationTask(guiMedia[uMediumID]);
     535}
     536
     537void UIMediumEnumerator::refreshMediaSub()
     538{
     539    /* Make sure we are not already in progress: */
     540    AssertReturnVoid(!m_fMediumEnumerationInProgress);
     541
     542    /* Refresh all cached media we have: */
     543    foreach (const QUuid &uMediumID, m_media.keys())
     544        m_media[uMediumID].refresh();
    520545}
    521546
     
    632657
    633658            /* Make sure this medium is already cached: */
    634             if (medium(uMediumId).isNull())
     659            if (mediumSub(uMediumId).isNull())
    635660            {
    636661                /* This medium isn't cached by some reason, which can be different.
     
    655680{
    656681    /* For each the cached UIMedium we have: */
    657     foreach (const QUuid &uMediumId, mediumIDs())
     682    foreach (const QUuid &uMediumId, mediumIDsSub())
    658683    {
    659684        /* Check if medium isn't NULL, used by our
    660685         * machine and wasn't already enumerated. */
    661         const UIMedium guiMedium = medium(uMediumId);
     686        const UIMedium guiMedium = mediumSub(uMediumId);
    662687        if (   !guiMedium.isNull()
    663688            && guiMedium.machineIds().contains(uMachineId)
     
    679704{
    680705    /* For each the cached UIMedium we have: */
    681     foreach (const QUuid &uMediumId, mediumIDs())
     706    foreach (const QUuid &uMediumId, mediumIDsSub())
    682707    {
    683708        /* Check if medium isn't NULL, and is
    684709         * a child of specified parent medium. */
    685         const UIMedium guiMedium = medium(uMediumId);
     710        const UIMedium guiMedium = mediumSub(uMediumId);
    686711        if (   !guiMedium.isNull()
    687712            && guiMedium.parentID() == uParentMediumId)
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumEnumerator.h

    r104887 r104888  
    144144    UIMediumEnumerator();
    145145
     146    /** Subroutine for mediumIDs() call, executed under proper lock. */
     147    QList<QUuid> mediumIDsSub() const;
     148    /** Subroutine for medium() call, executed under proper lock. */
     149    UIMedium mediumSub(const QUuid &uMediumID) const;
     150
     151    /** Subroutine for createMedium() call, executed under proper lock. */
     152    void createMediumSub(const UIMedium &guiMedium);
     153
     154    /** Subroutine for enumerateMedia() call, executed under proper lock. */
     155    void enumerateMediaSub(const CMediumVector &comMedia = CMediumVector());
     156    /** Subroutine for enumerateMedia() call, executed under proper lock. */
     157    void refreshMediaSub();
     158
    146159    /** Creates medium-enumeration task for certain @a guiMedium. */
    147160    void createMediumEnumerationTask(const UIMedium &guiMedium);
Note: See TracChangeset for help on using the changeset viewer.

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