diff --git a/configure.ac b/configure.ac index 7917e3cad..5d8f43eed 100644 --- a/configure.ac +++ b/configure.ac @@ -251,6 +251,11 @@ AC_ARG_ENABLE(extupdate, AC_DEFINE(ENABLE_EXTUPDATE, 1, [enable extended update routine])) AM_CONDITIONAL(ENABLE_EXTUPDATE, test "$enable_extupdate" = "yes") +AC_ARG_ENABLE(pkg-management, + AS_HELP_STRING([--enable-pkg-management], [enable package management @<:@default=no@:>@]), + AC_DEFINE(ENABLE_PKG_MANAGEMENT, 1, [enable package management])) +AM_CONDITIONAL(ENABLE_PKG_MANAGEMENT, test "$enable_pkg_management" = "yes") + AC_ARG_ENABLE(lua, AS_HELP_STRING([--enable-lua], [enable Lua support @<:@default=yes@:>@]), [enable_lua="$enableval"], diff --git a/src/gui/Makefile.am b/src/gui/Makefile.am index 4022fd34f..aee83d156 100644 --- a/src/gui/Makefile.am +++ b/src/gui/Makefile.am @@ -74,7 +74,6 @@ libneutrino_gui_a_SOURCES = \ network_service.cpp \ network_setup.cpp \ nfs.cpp \ - opkg_manager.cpp \ osd_helpers.cpp \ osd_progressbar_setup.cpp \ osd_setup.cpp \ @@ -102,7 +101,7 @@ libneutrino_gui_a_SOURCES = \ themes.cpp \ timeosd.cpp \ update.cpp \ - update_check_packages.cpp \ + update_check.cpp \ update_menue.cpp \ update_settings.cpp \ user_menue.cpp \ @@ -115,6 +114,12 @@ libneutrino_gui_a_SOURCES = \ xmltv_setup.cpp \ zapit_setup.cpp +if ENABLE_PKG_MANAGEMENT +libneutrino_gui_a_SOURCES += \ + opkg_manager.cpp \ + update_check_packages.cpp +endif + if ENABLE_LCD4LINUX libneutrino_gui_a_SOURCES += \ lcd4l_setup.cpp diff --git a/src/gui/start_wizard.cpp b/src/gui/start_wizard.cpp index b25234672..7fa29a1cc 100644 --- a/src/gui/start_wizard.cpp +++ b/src/gui/start_wizard.cpp @@ -48,7 +48,9 @@ #include "scan_setup.h" #include "settings_manager.h" #include "videosettings.h" +#if ENABLE_PKG_MANAGEMENT #include "opkg_manager.h" +#endif #include #include @@ -135,6 +137,7 @@ int CStartUpWizard::exec(CMenuTarget* parent, const string & /*actionKey*/) CNetworkSetup::getInstance()->setWizardMode(SNeutrinoSettings::WIZARD_OFF); } +#if ENABLE_PKG_MANAGEMENT //package update check if(advanced && res != menu_return::RETURN_EXIT_ALL) { @@ -149,6 +152,7 @@ int CStartUpWizard::exec(CMenuTarget* parent, const string & /*actionKey*/) g_settings.softupdate_autocheck_packages = true; } } +#endif bool init_settings = false; if (CFEManager::getInstance()->haveSat()) diff --git a/src/gui/update.cpp b/src/gui/update.cpp index 31dc2ecd6..a8d0522cb 100644 --- a/src/gui/update.cpp +++ b/src/gui/update.cpp @@ -49,7 +49,9 @@ #include #include +#if ENABLE_PKG_MANAGEMENT #include +#endif #include #include @@ -495,6 +497,7 @@ bool CFlashUpdate::checkVersion4Update() } hide(); +#if ENABLE_PKG_MANAGEMENT //package install: if (file_selected->getType() == CFile::FILE_PKG_PACKAGE){ COPKGManager opkg; @@ -510,6 +513,7 @@ bool CFlashUpdate::checkVersion4Update() //!always leave here! return false; } +#endif //set internal filetype char const * ptr = rindex(filename.c_str(), '.'); diff --git a/src/gui/update_check.cpp b/src/gui/update_check.cpp new file mode 100644 index 000000000..b3d15e17f --- /dev/null +++ b/src/gui/update_check.cpp @@ -0,0 +1,115 @@ +/* + update-check + + Copyright (C) 2017 'vanhofen' + Homepage: http://www.neutrino-images.de/ + + License: GPL + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#include +#include + +#include +#include + +#include "update_check.h" + +#define C4U_SLEEP (6 * 60 * 60) // 6 hours +#define C4U_FLAGFILE FLAGDIR "/.update" + +/* ----------------------------------------------------------------- */ + +CFlashUpdateCheck::CFlashUpdateCheck() +{ + c4u_thread = 0; +} + +CFlashUpdateCheck::~CFlashUpdateCheck() +{ + stopThread(); +} + +CFlashUpdateCheck* CFlashUpdateCheck::getInstance() +{ + static CFlashUpdateCheck * c4u = NULL; + if (!c4u) + c4u = new CFlashUpdateCheck(); + + return c4u; +} + +void CFlashUpdateCheck::startThread() +{ + if (!c4u_thread) + { + printf("[CFlashUpdateCheck]: starting thread\n"); + pthread_create(&c4u_thread, NULL, c4u_proc, (void*) NULL); + pthread_detach(c4u_thread); + } +} + +void CFlashUpdateCheck::stopThread() +{ + if (c4u_thread) + { + printf("[CFlashUpdateCheck]: stopping thread\n"); + pthread_cancel(c4u_thread); + } + c4u_thread = 0; + + if (access(C4U_FLAGFILE, F_OK) == 0) + unlink(C4U_FLAGFILE); +} + +void* CFlashUpdateCheck::c4u_proc(void*) +{ + set_threadname("n:flashupdatecheck"); + + pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, 0); + pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, 0); + + CFlashUpdate flashupdate; + + //printf("[CFlashUpdateCheck] %s: starting loop\n", __FUNCTION__); + while(1) + { + //printf("[CFlashUpdateCheck]: check for updates\n"); + if (flashupdate.checkOnlineVersion()) + { + //printf("[CFlashUpdateCheck]: update available\n"); + if (FILE *f = fopen(C4U_FLAGFILE, "w")) + fclose(f); + } + else + { + if (access(C4U_FLAGFILE, F_OK) == 0) + unlink(C4U_FLAGFILE); + } + + sleep(C4U_SLEEP); + } + return 0; +} diff --git a/src/gui/update_check.h b/src/gui/update_check.h new file mode 100644 index 000000000..808757787 --- /dev/null +++ b/src/gui/update_check.h @@ -0,0 +1,44 @@ +/* + update-check + + Copyright (C) 2017 'vanhofen' + Homepage: http://www.neutrino-images.de/ + + License: GPL + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef __update_check__ +#define __update_check__ + +class CFlashUpdateCheck +{ + public: + CFlashUpdateCheck(); + ~CFlashUpdateCheck(); + static CFlashUpdateCheck* getInstance(); + + void startThread(); + void stopThread(); + + private: + + pthread_t c4u_thread; + static void* c4u_proc(void *arg); +}; + +#endif // __update_check__ diff --git a/src/gui/update_menue.cpp b/src/gui/update_menue.cpp index fca4bbddd..5c00e4ab2 100644 --- a/src/gui/update_menue.cpp +++ b/src/gui/update_menue.cpp @@ -41,7 +41,9 @@ #include "update_menue.h" #include "update_settings.h" +#if ENABLE_PKG_MANAGEMENT #include "gui/opkg_manager.h" +#endif #include #include #include @@ -80,6 +82,7 @@ int CSoftwareUpdate::showSoftwareUpdate() softUpdate.addIntroItems(LOCALE_SERVICEMENU_UPDATE); unsigned int inetkey = CRCInput::RC_red; +#if ENABLE_PKG_MANAGEMENT if (COPKGManager::hasOpkgSupport()) { //firmware update via opkg mf = new CMenuDForwarder(LOCALE_OPKG_TITLE, true, NULL, new COPKGManager(), NULL, CRCInput::RC_red); @@ -87,6 +90,7 @@ int CSoftwareUpdate::showSoftwareUpdate() softUpdate.addItem(mf); inetkey = CRCInput::convertDigitToKey(1); } +#endif bool allow_update = true;//!CRecordManager::getInstance()->RecordingStatus() || CRecordManager::getInstance()->TimeshiftOnly(); diff --git a/src/gui/update_settings.cpp b/src/gui/update_settings.cpp index 17631d312..f650920a2 100644 --- a/src/gui/update_settings.cpp +++ b/src/gui/update_settings.cpp @@ -38,8 +38,11 @@ #include #include #include +#include +#if ENABLE_PKG_MANAGEMENT #include #include +#endif #include #include #include @@ -160,20 +163,18 @@ int CUpdateSettings::initMenu() #endif CMenuOptionChooser *autocheck = NULL; -#if 0 autocheck = new CMenuOptionChooser(LOCALE_FLASHUPDATE_AUTOCHECK, &g_settings.softupdate_autocheck, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, this); autocheck->setHint("", LOCALE_MENU_HINT_AUTO_UPDATE_CHECK); -#endif +#if ENABLE_PKG_MANAGEMENT CMenuOptionChooser *package_autocheck = NULL; if (COPKGManager::hasOpkgSupport()){ package_autocheck = new CMenuOptionChooser(LOCALE_FLASHUPDATE_AUTOCHECK_PACKAGES, &g_settings.softupdate_autocheck_packages, AUTOUPDATE_CHECK_OPTIONS, auto_update_options_count, true, this); package_autocheck->setHint("", LOCALE_MENU_HINT_AUTO_UPDATE_CHECK); } - +#endif w_upsettings.addItem(fw_update_dir); - if (fw_url) - w_upsettings.addItem(fw_url); + w_upsettings.addItem(fw_url); #if ENABLE_EXTUPDATE w_upsettings.addItem(name_backup); #ifndef BOXMODEL_CST_HD2 @@ -184,8 +185,10 @@ int CUpdateSettings::initMenu() #endif if (autocheck) w_upsettings.addItem(autocheck); +#if ENABLE_PKG_MANAGEMENT if (package_autocheck) w_upsettings.addItem(package_autocheck); +#endif #if 0 w_upsettings.addItem(apply_kernel); #endif @@ -200,14 +203,14 @@ bool CUpdateSettings::changeNotify(const neutrino_locale_t OptionName, void * /* { if (ARE_LOCALES_EQUAL(OptionName, LOCALE_FLASHUPDATE_AUTOCHECK) || ARE_LOCALES_EQUAL(OptionName, LOCALE_FLASHUPDATE_AUTOCHECK_PACKAGES)) { -#if 0 - CUpdateCheck::getInstance()->stopTimer(); + CFlashUpdateCheck::getInstance()->stopThread(); if (g_settings.softupdate_autocheck) - CUpdateCheck::getInstance()->startThread(); -#endif - CUpdateCheckPackages::getInstance()->stopTimer(); + CFlashUpdateCheck::getInstance()->startThread(); +#if ENABLE_PKG_MANAGEMENT + CUpdateCheckPackages::getInstance()->stopThread(); if (g_settings.softupdate_autocheck_packages) CUpdateCheckPackages::getInstance()->startThread(); +#endif } return false; diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 8a1bb8357..30702065d 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -97,8 +97,10 @@ #include "gui/start_wizard.h" #include "gui/update_ext.h" #include "gui/update.h" -//#include "gui/update_check.h" +#include "gui/update_check.h" +#if ENABLE_PKG_MANAGEMENT #include "gui/update_check_packages.h" +#endif #include "gui/videosettings.h" #include "gui/audio_select.h" #include "gui/weather.h" @@ -398,7 +400,9 @@ int CNeutrinoApp::loadSetup(const char * fname) g_settings.softupdate_autocheck = configfile.getBool("softupdate_autocheck" , false); +#if ENABLE_PKG_MANAGEMENT g_settings.softupdate_autocheck_packages = configfile.getInt32("softupdate_autocheck_packages" , false); +#endif // video int vid_Mode_default = VIDEO_STD_720P50; @@ -1879,7 +1883,9 @@ void CNeutrinoApp::saveSetup(const char * fname) configfile.setInt32 ("softupdate_name_mode_apply", g_settings.softupdate_name_mode_apply); configfile.setInt32 ("softupdate_name_mode_backup", g_settings.softupdate_name_mode_backup); configfile.setBool("softupdate_autocheck", g_settings.softupdate_autocheck); +#if ENABLE_PKG_MANAGEMENT configfile.setInt32("softupdate_autocheck_packages", g_settings.softupdate_autocheck_packages); +#endif configfile.setInt32("flashupdate_createimage_add_var", g_settings.flashupdate_createimage_add_var); configfile.setInt32("flashupdate_createimage_add_root1", g_settings.flashupdate_createimage_add_root1); @@ -3062,9 +3068,8 @@ TIMER_START(); #endif TIMER_STOP("################################## after all ##################################"); -#if 0 if (g_settings.softupdate_autocheck) { - +#if 0 hintBox = new CHintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_FLASHUPDATE_CHECKUPDATE_INTERNET)); hintBox->paint(); CFlashUpdate flash; @@ -3075,12 +3080,13 @@ TIMER_STOP("################################## after all ####################### } hintBox->hide(); delete hintBox; - - CUpdateCheck::getInstance()->startThread(); - } #endif + CFlashUpdateCheck::getInstance()->startThread(); + } +#if ENABLE_PKG_MANAGEMENT if (g_settings.softupdate_autocheck_packages) CUpdateCheckPackages::getInstance()->startThread(); +#endif for (std::list::iterator it = g_settings.xmltv_xml.begin(); it != g_settings.xmltv_xml.end(); it++) g_Sectionsd->readSIfromXMLTV((*it).c_str()); diff --git a/src/system/settings.h b/src/system/settings.h index a5c41aee2..ef4d2dde3 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -829,7 +829,9 @@ struct SNeutrinoSettings std::string softupdate_proxyusername; std::string softupdate_proxypassword; int softupdate_autocheck; +#if ENABLE_PKG_MANAGEMENT int softupdate_autocheck_packages; +#endif int softupdate_name_mode_apply; int softupdate_name_mode_backup; int apply_settings;