namespace filesystem {
bool StepUpdateStorageDirectories::UpdatePerUserStorageDirectories() {
- if (mode_ == UpdateMode::CREATE)
+ if (should_create_shared_data_)
return ci::CreatePerUserSharedDataDir(context_->pkgid.get());
- else
+ else if (old_shared_data_exists_ && !should_create_shared_data_)
return ci::BackupPerUserSharedDataDir(context_->pkgid.get());
+ return true;
}
bool StepUpdateStorageDirectories::UpdateStorageDirectories() {
- if (mode_ == UpdateMode::CREATE)
+ if (should_create_shared_data_)
return ci::CreateSharedDataDir(context_->pkgid.get(), context_->uid.get());
- else
+ else if (old_shared_data_exists_ && !should_create_shared_data_)
return ci::BackupSharedDataDir(context_->pkgid.get(), context_->uid.get());
+ return true;
}
bool StepUpdateStorageDirectories::CleanUpdatePerUserStorageDirectories() {
- if (mode_ == UpdateMode::CREATE)
- return true;
- else
+ if (old_shared_data_exists_ && !should_create_shared_data_)
return ci::RemoveBackupPerUserSharedDataDir(context_->pkgid.get());
+ return true;
}
bool StepUpdateStorageDirectories::CleanUpdateStorageDirectories() {
- if (mode_ == UpdateMode::CREATE)
- return true;
- else
+ if (old_shared_data_exists_ && !should_create_shared_data_)
return ci::RemoveBackupSharedDataDir(context_->pkgid.get(),
context_->uid.get());
+ return true;
}
bool StepUpdateStorageDirectories::UndoUpdatePerUserStorageDirectories() {
- if (mode_ == UpdateMode::CREATE)
+ if (!old_shared_data_exists_)
return ci::DeletePerUserSharedDataDir(context_->pkgid.get());
- else
+ else if (old_shared_data_exists_ && !should_create_shared_data_)
return ci::RestorePerUserSharedDataDir(context_->pkgid.get());
+ return true;
}
bool StepUpdateStorageDirectories::UndoUpdateStorageDirectories() {
- if (mode_ == UpdateMode::CREATE)
+ if (!old_shared_data_exists_)
return ci::DeleteSharedDataDir(context_->pkgid.get(), context_->uid.get());
- else
+ else if (old_shared_data_exists_ && !should_create_shared_data_)
return ci::RestoreSharedDataDir(context_->pkgid.get(), context_->uid.get());
+ return true;
}
Step::Status StepUpdateStorageDirectories::precheck() {
path = bf::path(ci::GetRootAppPath(false, context_->uid.get())) /
context_->pkgid.get() / kSharedDataDir;
- bool old_shared_data_exists = bf::exists(path);
- bool should_create_shared_data = ShouldCreateSharedDataDir(
+ old_shared_data_exists_ = bf::exists(path);
+ should_create_shared_data_ = ShouldCreateSharedDataDir(
context_->manifest_data.get());
- if ((old_shared_data_exists && should_create_shared_data) ||
- (!old_shared_data_exists && !should_create_shared_data))
- mode_ = UpdateMode::NONE;
- else if (!old_shared_data_exists && should_create_shared_data)
- mode_ = UpdateMode::CREATE;
- else
- mode_ = UpdateMode::DELETE;
-
return Status::OK;
}
Step::Status StepUpdateStorageDirectories::process() {
- if (mode_ == UpdateMode::NONE)
- return Status::OK;
-
if (context_->request_mode.get() == RequestMode::GLOBAL) {
if (!UpdatePerUserStorageDirectories())
return Status::APP_DIR_ERROR;
}
Step::Status StepUpdateStorageDirectories::clean() {
- if (mode_ == UpdateMode::NONE)
- return Status::OK;
-
if (context_->request_mode.get() == RequestMode::GLOBAL)
CleanUpdatePerUserStorageDirectories();
else
}
Step::Status StepUpdateStorageDirectories::undo() {
- if (mode_ == UpdateMode::NONE)
- return Status::OK;
-
if (context_->request_mode.get() == RequestMode::GLOBAL) {
if (!UndoUpdatePerUserStorageDirectories())
return Status::APP_DIR_ERROR;
using Step::Step;
explicit StepUpdateStorageDirectories(InstallerContext* context) :
- Step(context), mode_(UpdateMode::NONE) {}
+ Step(context), old_shared_data_exists_(false),
+ should_create_shared_data_(false) {}
Status process() override;
Status clean() override;
STEP_NAME(UpdateStorageDirectories)
private:
- enum class UpdateMode : int {
- NONE,
- CREATE,
- DELETE,
- };
-
bool UpdatePerUserStorageDirectories();
bool UpdateStorageDirectories();
bool CleanUpdatePerUserStorageDirectories();
bool UndoUpdatePerUserStorageDirectories();
bool UndoUpdateStorageDirectories();
- UpdateMode mode_;
+ bool old_shared_data_exists_;
+ bool should_create_shared_data_;
};
} // namespace filesystem