mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-28 16:01:20 +02:00
COPKGManager: add possibility to manage source feeds for packages
Feeds are saved in opkg config file. NOTE:Existing config file will be overwrite, so must be reconfigured via gui. Source names are strictly numbered src 0...10 (maximmal 10 at the moment) FIXME: input mask in keyboardinput class is too small for some adresses, large address names are cutted and makes entries useless
This commit is contained in:
@@ -43,6 +43,7 @@
|
||||
#include <gui/widget/messagebox.h>
|
||||
#include <gui/widget/shellwindow.h>
|
||||
#include <gui/widget/progresswindow.h>
|
||||
#include <gui/widget/keyboard_input.h>
|
||||
#include <driver/screen_max.h>
|
||||
#include <gui/filebrowser.h>
|
||||
#include <system/debug.h>
|
||||
@@ -55,8 +56,11 @@
|
||||
#include <errno.h>
|
||||
/* later this can be changed to just "opkg" */
|
||||
#define OPKG_CL "opkg-cl"
|
||||
#define OPKG_CL_CONFIG_OPTIONS " -V2 --tmp-dir=/tmp --cache=/tmp/.opkg "
|
||||
#define OPKG_TMP_DIR "/tmp/.opkg"
|
||||
#define OPKG_CL_CONFIG_OPTIONS " -V2 --tmp-dir=/tmp --cache=" OPKG_TMP_DIR
|
||||
|
||||
|
||||
#define OPKG_CONFIG_FILE "/etc/opkg/opkg.conf"
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -87,15 +91,23 @@ static const string pkg_types[OM_MAX] =
|
||||
OPKG_CL " status ",
|
||||
};
|
||||
|
||||
COPKGManager::COPKGManager()
|
||||
COPKGManager::COPKGManager(): opkg_conf('\t')
|
||||
{
|
||||
width = 80;
|
||||
|
||||
//define default dest keys
|
||||
string dest_defaults[] = {"/", OPKG_TMP_DIR, "/mnt"};
|
||||
for(size_t i=0; i<sizeof(dest_defaults)/sizeof(dest_defaults[0]) ;i++)
|
||||
config_dest.push_back(dest_defaults[i]);
|
||||
|
||||
loadConfig();
|
||||
pkg_map.clear();
|
||||
list_installed_done = false;
|
||||
list_upgradeable_done = false;
|
||||
expert_mode = false;
|
||||
local_dir = &g_settings.update_dir_opkg;
|
||||
CFileHelpers::createDir(OPKG_TMP_DIR);
|
||||
|
||||
}
|
||||
|
||||
COPKGManager::~COPKGManager()
|
||||
@@ -111,6 +123,7 @@ int COPKGManager::exec(CMenuTarget* parent, const string &actionKey)
|
||||
if (parent)
|
||||
parent->hide();
|
||||
int ret = showMenu();
|
||||
saveConfig();
|
||||
CFileHelpers::removeDir(OPKG_TMP_DIR);
|
||||
return ret;
|
||||
}
|
||||
@@ -403,10 +416,17 @@ int COPKGManager::showMenu()
|
||||
menu->addItem(upgrade_forwarder);
|
||||
|
||||
//select and install local package
|
||||
CMenuForwarder *local;
|
||||
local = new CMenuForwarder(LOCALE_OPKG_INSTALL_LOCAL_PACKAGE, true, NULL, this, "local_package", CRCInput::RC_green);
|
||||
local->setHint(NEUTRINO_ICON_HINT_SW_UPDATE, LOCALE_MENU_HINT_OPKG_INSTALL_LOCAL_PACKAGE);
|
||||
menu->addItem(local);
|
||||
CMenuForwarder *fw;
|
||||
fw = new CMenuForwarder(LOCALE_OPKG_INSTALL_LOCAL_PACKAGE, true, NULL, this, "local_package", CRCInput::RC_green);
|
||||
fw->setHint(NEUTRINO_ICON_HINT_SW_UPDATE, LOCALE_MENU_HINT_OPKG_INSTALL_LOCAL_PACKAGE);
|
||||
menu->addItem(fw);
|
||||
|
||||
//feed setup
|
||||
CMenuWidget feeds_menu(LOCALE_OPKG_TITLE, NEUTRINO_ICON_UPDATE, w_max (100, 10));
|
||||
showMenuConfigFeed(&feeds_menu);
|
||||
fw = new CMenuForwarder(LOCALE_OPKG_FEED_ADRESSES, true, NULL, &feeds_menu, NULL, CRCInput::RC_www);
|
||||
fw->setHint(NEUTRINO_ICON_HINT_SW_UPDATE, LOCALE_MENU_HINT_OPKG_FEED_ADRESSES_EDIT);
|
||||
menu->addItem(fw);
|
||||
|
||||
menu->addItem(GenericMenuSeparatorLine);
|
||||
|
||||
@@ -467,7 +487,7 @@ int COPKGManager::showMenu()
|
||||
|
||||
bool COPKGManager::hasOpkgSupport()
|
||||
{
|
||||
string deps[] = {"/etc/opkg/opkg.conf", "/var/lib/opkg"};
|
||||
string deps[] = {"/bin/opkg-check-config", "/bin/update-alternatives", "/var/lib/opkg", "/share/opkg/intercept"};
|
||||
|
||||
if (find_executable(OPKG_CL).empty()) {
|
||||
dprintf(DEBUG_NORMAL, "[COPKGManager] [%s - %d]" OPKG_CL " executable not found\n", __func__, __LINE__);
|
||||
@@ -722,3 +742,67 @@ bool COPKGManager::installPackage(const string& pkg_name, string options)
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void COPKGManager::showMenuConfigFeed(CMenuWidget *feed_menu)
|
||||
{
|
||||
feed_menu->addIntroItems(LOCALE_OPKG_FEED_ADRESSES);
|
||||
|
||||
for(size_t i=0; i<OPKG_MAX_FEEDS ;i++){
|
||||
CKeyboardInput *feedinput = new CKeyboardInput("Feed " +to_string(i+1), &config_src[i], 0, NULL, NULL, LOCALE_OPKG_ENTER_FEED_ADDRESS, LOCALE_OPKG_ENTER_FEED_ADDRESS_EXAMPLE);
|
||||
CMenuForwarder *fw = new CMenuDForwarder( string(), true , config_src[i], feedinput, NULL, CRCInput::convertDigitToKey(i));
|
||||
feed_menu->addItem( fw);
|
||||
}
|
||||
}
|
||||
|
||||
void COPKGManager::loadConfig()
|
||||
{
|
||||
opkg_conf.clear();
|
||||
bool load_defaults = false;
|
||||
|
||||
if (!opkg_conf.loadConfig(OPKG_CONFIG_FILE, '\t')){
|
||||
dprintf(DEBUG_NORMAL, "[COPKGManager] [%s - %d] Error: error while loading opkg config file! -> %s. Using default settings!\n", __func__, __LINE__, OPKG_CONFIG_FILE);
|
||||
load_defaults = true;
|
||||
}
|
||||
|
||||
//package feeds
|
||||
for(size_t i=0; i<OPKG_MAX_FEEDS ;i++){
|
||||
string src_key = "src " + to_string(i);
|
||||
config_src[i] = opkg_conf.getString(src_key, string());
|
||||
}
|
||||
|
||||
//dest dir default keys, predefined in constructor
|
||||
for(size_t j=0; j<config_dest.size() ;j++){
|
||||
string dest_key = "dest " + to_string(j);
|
||||
opkg_conf.getString(dest_key, config_dest[j]);
|
||||
}
|
||||
|
||||
//load default settings and write to config file
|
||||
if (load_defaults)
|
||||
saveConfig();
|
||||
}
|
||||
|
||||
void COPKGManager::saveConfig()
|
||||
{
|
||||
//set package feeds
|
||||
for(size_t i=0; i<OPKG_MAX_FEEDS ;i++){
|
||||
string src_key = "src " + to_string(i);
|
||||
|
||||
if (!config_src[i].empty())
|
||||
opkg_conf.setString(src_key, config_src[i]);
|
||||
else
|
||||
opkg_conf.deleteKey(src_key); //remove unused keys
|
||||
}
|
||||
|
||||
//set dest dir default key values
|
||||
for(size_t j=0; j<config_dest.size() ;j++){
|
||||
string dest_key = "dest " + to_string(j);
|
||||
opkg_conf.setString(dest_key, config_dest[j]);
|
||||
}
|
||||
|
||||
//finally save config file
|
||||
if (!opkg_conf.saveConfig(OPKG_CONFIG_FILE, '\t')){
|
||||
dprintf(DEBUG_NORMAL, "[COPKGManager] [%s - %d] Error: error while saving opkg config file! -> %s\n", __func__, __LINE__, OPKG_CONFIG_FILE);
|
||||
DisplayErrorMessage("Error while saving opkg config file!");
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user