diff --git a/src/gui/opkg_manager.cpp b/src/gui/opkg_manager.cpp index 47cb74d97..36afb9e5f 100644 --- a/src/gui/opkg_manager.cpp +++ b/src/gui/opkg_manager.cpp @@ -209,11 +209,14 @@ int COPKGManager::exec(CMenuTarget* parent, const string &actionKey) bool COPKGManager::checkSize(const string& pkg_name) { //get package size - string s_pkgsize = getPkgInfo(pkg_name, "Size"); + string s_pkgsize = getPkgInfo(pkg_name, "Size", false); std::istringstream s(s_pkgsize); u_int64_t pkg_size; s >> pkg_size; + string status = getPkgInfo(pkg_name, "Status"); + dprintf(DEBUG_NORMAL, "[COPKGManager] [%s - %d] Status of %s: %s\n", __func__, __LINE__, pkg_name.c_str(), status.c_str()); + //get available size //TODO: Check writability! struct statfs root_fs; @@ -230,7 +233,9 @@ bool COPKGManager::checkSize(const string& pkg_name) dprintf(DEBUG_INFO, "[COPKGManager] [%s - %d] Package: %s [required size=%lld (free size: %lld)]\n", __func__, __LINE__, pkg_name.c_str(), req_size, free_size); if (free_size < req_size){ dprintf(DEBUG_NORMAL, "[COPKGManager] [%s - %d] WARNING: size check freesize=%lld package size=%lld (recommended: %lld)\n", __func__, __LINE__, free_size, pkg_size, req_size); - return false; + //exit with false if package not installed, allready installed packages will be be removed before install, therefore it should be enough disk space available +// if (status.empty()) + return false; } return true; } @@ -573,10 +578,10 @@ string COPKGManager::getBlankPkgName(const string& line) return ""; } -string COPKGManager::getPkgInfo(const string& pkg_name, const string& pkg_key) +string COPKGManager::getPkgInfo(const string& pkg_name, const string& pkg_key, bool current_status) { tmp_str.clear(); - execCmd(pkg_types[OM_INFO] + pkg_name, false, true); + execCmd(pkg_types[current_status ? OM_STATUS : OM_INFO] + pkg_name, false, true); dprintf(DEBUG_INFO, "[COPKGManager] [%s - %d] [data: %s]\n", __func__, __LINE__, tmp_str.c_str()); return getKeyInfo(tmp_str, pkg_key, ":"); diff --git a/src/gui/opkg_manager.h b/src/gui/opkg_manager.h index 45a5fee32..91d053bc7 100644 --- a/src/gui/opkg_manager.h +++ b/src/gui/opkg_manager.h @@ -68,7 +68,20 @@ class COPKGManager : public CMenuTarget }; void getPkgData(const int pkg_content_id); std::string getBlankPkgName(const std::string& line); - std::string getPkgInfo(const std::string& pkg_name, const std::string& pkg_key); + + /* + * Gets an info from opkg command info or status from a package via keywords as std::string + * 1st parameter is name of package as string eg. "gdb", without file extension or version data + * 2nd parameter needs a keyword like: + * Package, Version, Depends, Status, Section, Architecture, Maintainer, MD5Sum, Size, Filename, Source, Description + * These kewords are to find in the control package inside of the opkg package file and the package list. + * 3rd parameter sets the sub command status or info. For more details, take a look to the opkg commands via command line. + */ + std::string getPkgInfo(const std::string& pkg_name, const std::string& pkg_key, bool current_status = false); + + //Does the same like getPkgInfo(), but only for status + std::string getPkgStatus(const std::string& pkg_name, const std::string& pkg_key){return getPkgInfo(pkg_name, pkg_key, true);} + std::string getKeyInfo(const std::string& input, const std::string& pkg_info_key, const std::string& delimiters); int showMenu(); void updateMenu();