From 81b74b4fc059307ed83b8397c73385f2bcafb99b Mon Sep 17 00:00:00 2001 From: danij Date: Wed, 12 Mar 2014 11:01:26 +0000 Subject: [PATCH] Cleanup|libdeng2|SavedSession: Reordered doomsday/libdeng2/src/game/savedsession.cpp --- doomsday/libdeng2/src/game/savedsession.cpp | 72 +++++++++++---------- 1 file changed, 39 insertions(+), 33 deletions(-) diff --git a/doomsday/libdeng2/src/game/savedsession.cpp b/doomsday/libdeng2/src/game/savedsession.cpp index 39388804e8..94765d0abc 100644 --- a/doomsday/libdeng2/src/game/savedsession.cpp +++ b/doomsday/libdeng2/src/game/savedsession.cpp @@ -201,6 +201,12 @@ DENG2_PIMPL(SavedSession) return 0; } + PackageFolder *tryLocatePackage() + { + if(!self.hasFile()) return 0; + return repo->folder().tryLocate(fileName); + } + void notifyMetadataChanged() { DENG2_FOR_PUBLIC_AUDIENCE2(MetadataChange, i) @@ -263,33 +269,6 @@ SavedSession &SavedSession::operator = (SavedSession const &other) return *this; } -bool SavedSession::recognizeFile() -{ - if(!d->repo) return false; - if(d->repo->folder().has(fileName())) - { - // Attempt to read the session metadata. - PackageFolder &pack = d->repo->folder().locate(fileName()); - if(SessionMetadata *metadata = Instance::readMetadata(pack)) - { - replaceMetadata(metadata); - return true; - } - } - return 0; // Unrecognized -} - -std::auto_ptr SavedSession::mapStateReader() -{ - if(recognizeFile()) - { - std::auto_ptr p(repository().makeReader(*this)); - return p; - } - /// @throw UnrecognizedMapStateError The game state format was not recognized. - throw UnrecognizedMapStateError("SavedSession::mapStateReader", "Unrecognized map state format"); -} - SavedSessionRepository &SavedSession::repository() const { if(d->repo) @@ -371,14 +350,18 @@ bool SavedSession::hasFile() const return d->repo->folder().has(fileName()); } -bool SavedSession::hasMapState(String mapUriStr) const +bool SavedSession::recognizeFile() { - if(!mapUriStr.isEmpty() && hasFile()) + if(PackageFolder *pack = d->tryLocatePackage()) { - PackageFolder const &pack = d->repo->folder().locate(d->fileName); - return pack.has(Path("maps") / mapUriStr); + // Attempt to read the session metadata. + if(SessionMetadata *metadata = Instance::readMetadata(*pack)) + { + replaceMetadata(metadata); + return true; + } } - return false; + return 0; // Unrecognized } void SavedSession::updateFromFile() @@ -408,7 +391,7 @@ void SavedSession::updateFromFile() void SavedSession::removeFile() { - if(d->repo && d->repo->folder().has(fileName())) + if(hasFile()) { d->repo->folder().removeFile(fileName()); d->needUpdateStatus = true; @@ -418,6 +401,29 @@ void SavedSession::removeFile() updateFromFile(); } +bool SavedSession::hasMapState(String mapUriStr) const +{ + if(!mapUriStr.isEmpty()) + { + if(PackageFolder const *pack = d->tryLocatePackage()) + { + return pack->has(Path("maps") / mapUriStr); + } + } + return false; +} + +std::auto_ptr SavedSession::mapStateReader() +{ + if(recognizeFile()) + { + std::auto_ptr p(repository().makeReader(*this)); + return p; + } + /// @throw UnrecognizedMapStateError The game state format was not recognized. + throw UnrecognizedMapStateError("SavedSession::mapStateReader", "Unrecognized map state format"); +} + SavedSession::Metadata const &SavedSession::metadata() const { DENG2_ASSERT(!d->metadata.isNull());