#include "common/step/filesystem/step_remove_per_user_storage_directories.h"
+#include <memory>
#include <string>
#include <vector>
+#include "common/step/step.h"
+#include "common/step/filesystem/step_create_storage_directories.h"
+#include "common/step/filesystem/step_create_globalapp_symlinks.h"
#include "common/installer_context.h"
#include "common/shared_dirs.h"
+#include "common/utils/pkgmgr_query.h"
namespace common_installer {
namespace filesystem {
Step::Status StepRemovePerUserStorageDirectories::process() {
- if (GLOBAL_USER != context_->uid.get()) return Step::Status::OK;
+ if (context_->request_mode.get() != RequestMode::GLOBAL)
+ return Step::Status::OK;
- std::string package_id = context_->pkgid.get();
-
- if (!common_installer::DeleteSkelDirectories(package_id)) {
- LOG(ERROR) << "Failed to delete skel dirs";
+ if (!common_installer::DeletePerUserStorageDirectories(context_->pkgid.get(),
+ context_->keep_rwdata.get()))
return Status::APP_DIR_ERROR;
- }
- if (!common_installer::RequestDeleteUserDirectories(package_id)) {
- LOG(ERROR) << "Failed to delete shared dirs for users";
- return Status::APP_DIR_ERROR;
- }
+ return Step::Status::OK;
+}
+Step::Status StepRemovePerUserStorageDirectories::undo() {
+ std::string author_id =
+ QueryCertificateAuthorCertificate(
+ context_->pkgid.get(), context_->uid.get());
+ context_->certificate_info.get().author_id.set(author_id);
+ std::vector<std::unique_ptr<Step>> steps;
+ steps.emplace_back(new StepCreateStorageDirectories(
+ context_, additional_shared_dirs_));
+ steps.emplace_back(new StepCreateGlobalAppSymlinks(context_));
+
+ for (auto& it : steps) {
+ Step::Status result;
+ result = it->precheck();
+ if (result != Step::Status::OK) {
+ LOG(ERROR) << "Fail to execute precheck of " << it->name();
+ return result;
+ }
+
+ result = it->process();
+ if (result != Step::Status::OK) {
+ LOG(ERROR) << "Fail to execute process of " << it->name();
+ return result;
+ }
+ }
return Step::Status::OK;
}