#include <pkgmgr-info.h>
-#include <boost/filesystem.hpp>
-#include <boost/system/error_code.hpp>
-
+#include <filesystem>
#include <string>
-#include "common/paths.h"
+#include "common/utils/paths.h"
#include "common/utils/file_util.h"
#include "common/utils/glist_range.h"
-namespace bf = boost::filesystem;
-namespace bs = boost::system;
+namespace fs = std::filesystem;
namespace common_installer {
namespace backup {
+StepBackupIcons::StepBackupIcons(InstallerContext* context) : Step(context),
+ extra_icon_path_(nullptr) {}
+
Step::Status StepBackupIcons::process() {
- // gather icon info
- const char* extra_icon_path = getIconPath(context_->uid.get(),
+ extra_icon_path_ = getIconPath(context_->uid.get(),
context_->is_readonly_package.get());
- if (!extra_icon_path)
+ if (!extra_icon_path_)
return Status::OK;
- for (auto iter = bf::directory_iterator(extra_icon_path);
- iter != bf::directory_iterator(); ++iter) {
- if (!bf::is_regular_file(iter->path()))
- continue;
- for (application_x* app : GListRange<application_x*>(
- context_->old_manifest_data.get()->application)) {
- if (app->icon) {
- bf::path filename = iter->path().filename();
- filename.replace_extension();
- std::string id = filename.string();
- if (id == app->appid) {
- bf::path icon_backup = GetBackupPathForIconFile(iter->path());
- icons_.emplace_back(iter->path(), icon_backup);
- }
- }
- }
- }
+ GetIconInfo();
- // backup
- for (auto& pair : icons_) {
- if (!MoveFile(pair.first, pair.second, true)) {
- LOG(ERROR) << "Cannot create backup for icon: " << pair.first;
- return Status::ICON_ERROR;
- }
- }
+ if (!BackupIcons())
+ return Status::ICON_ERROR;
LOG(DEBUG) << "Icons backup created";
return Status::OK;
Step::Status StepBackupIcons::clean() {
RemoveBackupIcons();
LOG(DEBUG) << "Icons backup removed";
+
return Status::OK;
}
}
}
LOG(DEBUG) << "Icons reverted from backup";
+
return Status::OK;
}
-void StepBackupIcons::RemoveBackupIcons() {
+bool StepBackupIcons::BackupIcons() {
for (auto& pair : icons_) {
+ if (!MoveFile(pair.first, pair.second, true)) {
+ LOG(ERROR) << "Cannot create backup for icon: " << pair.first;
+ return false;
+ }
+ }
+
+ return true;
+}
+
+void StepBackupIcons::RemoveBackupIcons() {
+ for (auto& pair : icons_)
Remove(pair.second);
+}
+
+void StepBackupIcons::GetIconInfo() {
+ for (auto iter = fs::directory_iterator(extra_icon_path_);
+ iter != fs::directory_iterator(); ++iter) {
+ if (!fs::is_regular_file(iter->path()))
+ continue;
+
+ AddAppIconToList(iter->path());
+ }
+}
+
+void StepBackupIcons::AddAppIconToList(std::filesystem::path path) {
+ for (application_x* app : GListRange<application_x*>(
+ context_->old_manifest_data.get()->application)) {
+ if (!app->icon)
+ continue;
+
+ fs::path filename = path.filename();
+ filename.replace_extension();
+ std::string id = filename.string();
+ if (id == app->appid) {
+ fs::path icon_backup = GetBackupPathForIconFile(path);
+ icons_.emplace_back(path, icon_backup);
+ }
}
}