Changeset 104888 in vbox
- Timestamp:
- Jun 12, 2024 11:20:56 AM (10 months ago)
- svn:sync-xref-src-repo-rev:
- 163490
- 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 185 185 QList<QUuid> UIMediumEnumerator::mediumIDs() const 186 186 { 187 /* Return keys of current media map: */ 188 return m_media.keys(); 187 return mediumIDsSub(); 189 188 } 190 189 191 190 UIMedium UIMediumEnumerator::medium(const QUuid &uMediumID) const 192 191 { 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); 199 193 } 200 194 201 195 void UIMediumEnumerator::createMedium(const UIMedium &guiMedium) 202 196 { 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); 218 198 } 219 199 220 200 void UIMediumEnumerator::enumerateMedia(const CMediumVector &comMedia /* = CMediumVector() */) 221 201 { 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); 282 203 } 283 204 284 205 void UIMediumEnumerator::refreshMedia() 285 206 { 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(); 292 208 } 293 209 … … 364 280 { 365 281 /* Make sure this medium isn't already cached: */ 366 if (!medium (uMediumId).isNull())282 if (!mediumSub(uMediumId).isNull()) 367 283 { 368 284 /* This medium can be known because of async event nature. Currently medium registration event comes … … 415 331 { 416 332 /* Make sure this medium is still cached: */ 417 if (medium (uMediumId).isNull())333 if (mediumSub(uMediumId).isNull()) 418 334 { 419 335 /* This medium can be wiped out already because of async event nature. Currently … … 518 434 emit sigMediumEnumerationFinished(); 519 435 } 436 } 437 438 QList<QUuid> UIMediumEnumerator::mediumIDsSub() const 439 { 440 /* Return keys of current media map: */ 441 return m_media.keys(); 442 } 443 444 UIMedium 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 454 void 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 473 void 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 537 void 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(); 520 545 } 521 546 … … 632 657 633 658 /* Make sure this medium is already cached: */ 634 if (medium (uMediumId).isNull())659 if (mediumSub(uMediumId).isNull()) 635 660 { 636 661 /* This medium isn't cached by some reason, which can be different. … … 655 680 { 656 681 /* For each the cached UIMedium we have: */ 657 foreach (const QUuid &uMediumId, mediumIDs ())682 foreach (const QUuid &uMediumId, mediumIDsSub()) 658 683 { 659 684 /* Check if medium isn't NULL, used by our 660 685 * machine and wasn't already enumerated. */ 661 const UIMedium guiMedium = medium (uMediumId);686 const UIMedium guiMedium = mediumSub(uMediumId); 662 687 if ( !guiMedium.isNull() 663 688 && guiMedium.machineIds().contains(uMachineId) … … 679 704 { 680 705 /* For each the cached UIMedium we have: */ 681 foreach (const QUuid &uMediumId, mediumIDs ())706 foreach (const QUuid &uMediumId, mediumIDsSub()) 682 707 { 683 708 /* Check if medium isn't NULL, and is 684 709 * a child of specified parent medium. */ 685 const UIMedium guiMedium = medium (uMediumId);710 const UIMedium guiMedium = mediumSub(uMediumId); 686 711 if ( !guiMedium.isNull() 687 712 && guiMedium.parentID() == uParentMediumId) -
trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumEnumerator.h
r104887 r104888 144 144 UIMediumEnumerator(); 145 145 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 146 159 /** Creates medium-enumeration task for certain @a guiMedium. */ 147 160 void createMediumEnumerationTask(const UIMedium &guiMedium);
Note:
See TracChangeset
for help on using the changeset viewer.