Merge remote-tracking branch 'uncool/cst-next'

This need buildfixes and some functional updates...


Origin commit data
------------------
Branch: ni/coolstream
Commit: eeee5bacab
Author: Stefan Seyfried <seife@tuxbox-git.slipkontur.de>
Date: 2015-12-13 (Sun, 13 Dec 2015)



------------------
This commit was generated by Migit
This commit is contained in:
Stefan Seyfried
2015-12-13 17:41:55 +01:00
320 changed files with 21291 additions and 13199 deletions

View File

@@ -16,6 +16,7 @@ AM_CPPFLAGS = \
-I$(top_srcdir)/lib/libconfigfile \
-I$(top_srcdir)/lib/libmd5sum \
-I$(top_srcdir)/lib/xmltree \
-I$(top_srcdir)/lib/jsoncpp/include \
@SIGC_CFLAGS@ \
@FREETYPE_CFLAGS@ \
@HWLIB_CFLAGS@

View File

@@ -290,10 +290,14 @@ void CNetworkConfig::saveWpaConfig()
out << "ctrl_interface=/var/run/wpa_supplicant\n";
out << "network={\n";
out << " ssid=\"" + ssid + "\"\n";
out << " psk=\"" + key + "\"\n";;
out << " proto=WPA WPA2\n";
out << " key_mgmt=WPA-PSK\n";
out << " pairwise=CCMP TKIP\n";
out << " group=CCMP TKIP\n";
if (!key.empty()) {
out << " psk=\"" + key + "\"\n";;
out << " proto=WPA WPA2\n";
out << " key_mgmt=WPA-PSK\n";
out << " pairwise=CCMP TKIP\n";
out << " group=CCMP TKIP\n";
} else {
out << " key_mgmt=NONE\n";
}
out << "}\n";
}

View File

@@ -40,19 +40,21 @@
#include <fcntl.h>
#include <dirent.h>
#include <stdarg.h>
#include <algorithm>
#include <mntent.h>
#include <linux/hdreg.h>
#include <linux/fs.h>
#include "debug.h"
#include <system/helpers.h>
#include <gui/update_ext.h>
using namespace std;
void mySleep(int sec) {
int mySleep(int sec) {
struct timeval timeout;
timeout.tv_sec = sec;
timeout.tv_usec = 0;
select(0,0,0,0, &timeout);
return select(0,0,0,0, &timeout);
}
off_t file_size(const char *filename)
@@ -217,7 +219,7 @@ FILE* my_popen( pid_t& pid, const char *cmdstring, const char *type)
}
return(fp);
}
#if 0
int mkdirhier(const char *pathname, mode_t mode)
{
int res = -1;
@@ -238,7 +240,7 @@ int mkdirhier(const char *pathname, mode_t mode)
res = 0;
return res;
}
# endif
int safe_mkdir(const char * path)
{
@@ -281,6 +283,8 @@ int check_dir(const char * dir, bool allow_tmp)
default:
ret = 0; // ok
}
if(ret == -1)
printf("Wrong Filessystem Type: 0x%x\n",s.f_type);
}
return ret;
}
@@ -340,7 +344,7 @@ std::string find_executable(const char *name)
if (tmpPath)
path = strdupa(tmpPath);
else
path = strdupa("/bin:/usr/bin:/sbin:/usr/sbin");
path = strdupa("/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin");
if (name[0] == '/') { /* full path given */
if (!access(name, X_OK) && !stat(name, &s) && S_ISREG(s.st_mode))
return std::string(name);
@@ -423,8 +427,9 @@ std::string getNowTimeStr(const char* format)
{
char tmpStr[256];
struct timeval tv;
struct tm t;
gettimeofday(&tv, NULL);
strftime(tmpStr, sizeof(tmpStr), format, localtime(&tv.tv_sec));
strftime(tmpStr, sizeof(tmpStr), format, localtime_r(&tv.tv_sec, &t));
return (std::string)tmpStr;
}
@@ -587,11 +592,9 @@ bool CFileHelpers::copyDir(const char *Src, const char *Dst, bool backupMode)
}
else {
// directory
if (createDir(Dst, FileInfo.st_mode & 0x0FFF) == false) {
if (errno != EEXIST) {
closedir(Directory);
return false;
}
if (!createDir(Dst, FileInfo.st_mode & 0x0FFF)) {
closedir(Directory);
return false;
}
}
@@ -637,32 +640,34 @@ bool CFileHelpers::copyDir(const char *Src, const char *Dst, bool backupMode)
return true;
}
bool CFileHelpers::createDir(const char *Dir, mode_t mode)
// returns: true - success.
// false - errno is set
bool CFileHelpers::createDir(string& Dir, mode_t mode)
{
char dirPath[PATH_MAX];
DIR *dir;
if ((dir = opendir(Dir)) != NULL) {
closedir(dir);
errno = EEXIST;
return false;
}
int ret = -1;
while (ret == -1) {
strcpy(dirPath, Dir);
ret = mkdir(dirPath, mode);
if ((errno == ENOENT) && (ret == -1)) {
char * pos = strrchr(dirPath,'/');
if (pos != NULL) {
pos[0] = '\0';
createDir(dirPath, mode);
int res = 0;
for(string::iterator iter = Dir.begin() ; iter != Dir.end();) {
string::iterator newIter = find(iter, Dir.end(), '/' );
string newPath = string( Dir.begin(), newIter );
if(!newPath.empty() && !file_exists(newPath.c_str())) {
res = mkdir( newPath.c_str(), mode);
if (res == -1) {
if (errno == EEXIST) {
res = 0;
} else {
// We can assume that if an error
// occured, following will fail too,
// so break here.
dprintf(DEBUG_NORMAL, "[CFileHelpers %s] creating directory %s: %s\n", __func__, newPath.c_str(), strerror(errno));
break;
}
}
}
else
return !ret || (errno == EEXIST);
iter = newIter;
if(newIter != Dir.end())
++ iter;
}
errno = 0;
return true;
return (res == 0 ? true : false);
}
bool CFileHelpers::removeDir(const char *Dir)
@@ -692,6 +697,41 @@ bool CFileHelpers::removeDir(const char *Dir)
return true;
}
u_int64_t CFileHelpers::getDirSize(const char *dirname)
{
DIR *dir;
char fullDirName[500];
struct dirent *dirPnt;
struct stat cur_file;
uint64_t total_size = 0;
//open current dir
sprintf(fullDirName, "%s/", dirname);
if((dir = opendir(fullDirName)) == NULL) {
fprintf(stderr, "Couldn't open %s\n", fullDirName);
return 0;
}
//go through the directory
while( (dirPnt = readdir(dir)) != NULL ) {
if(strcmp((*dirPnt).d_name, "..") == 0 || strcmp((*dirPnt).d_name, ".") == 0)
continue;
//create current filepath
sprintf(fullDirName, "%s/%s", dirname, (*dirPnt).d_name);
if(stat(fullDirName, &cur_file) == -1)
continue;
if(cur_file.st_mode & S_IFREG) //file...
total_size += cur_file.st_size;
else if(cur_file.st_mode & S_IFDIR) //dir...
total_size += getDirSize(fullDirName);
}
closedir(dir);
return total_size;
}
static int hdd_open_dev(const char * fname)
{
FILE * fp;
@@ -831,3 +871,21 @@ std::string to_string(unsigned long long i)
return s.str();
}
std::string getJFFS2MountPoint(int mtdPos)
{
FILE* fd = fopen("/proc/mounts", "r");
if (!fd) return "";
int iBlock;
char lineRead[1024], sMount[512], sFs[512];
memset(lineRead, '\0', sizeof(lineRead));
while (fgets(lineRead, sizeof(lineRead)-1, fd)) {
sscanf(lineRead, "/dev/mtdblock%d %511s %511s", &iBlock, sMount, sFs);
if ((iBlock == mtdPos) && (strstr(sMount, "/") != NULL) && (strstr(sFs, "jffs2") != NULL)) {
fclose(fd);
return sMount;
}
memset(lineRead, '\0', sizeof(lineRead));
}
fclose(fd);
return "";
}

View File

@@ -44,15 +44,15 @@ FILE* my_popen( pid_t& pid, const char *cmdstring, const char *type);
int safe_mkdir(const char * path);
inline int safe_mkdir(std::string path) { return safe_mkdir(path.c_str()); }
int mkdirhier(const char *pathname, mode_t mode = 0755);
inline int mkdirhier(std::string path, mode_t mode = 0755) { return mkdirhier(path.c_str(), mode); }
//int mkdirhier(const char *pathname, mode_t mode = 0755);
//inline int mkdirhier(std::string path, mode_t mode = 0755) { return mkdirhier(path.c_str(), mode); }
off_t file_size(const char *filename);
bool file_exists(const char *filename);
void wakeup_hdd(const char *hdd_dir);
int check_dir(const char * dir, bool allow_tmp = false);
bool get_fs_usage(const char * dir, uint64_t &btotal, uint64_t &bused, long *bsize=NULL);
bool get_mem_usage(unsigned long &total, unsigned long &free);
void mySleep(int sec);
int mySleep(int sec);
std::string find_executable(const char *name);
/* basically what "foo=`command`" does in the shell */
@@ -87,8 +87,11 @@ class CFileHelpers
bool copyFile(const char *Src, const char *Dst, mode_t mode);
bool copyDir(const char *Src, const char *Dst, bool backupMode=false);
bool createDir(const char *Dir, mode_t mode);
bool removeDir(const char *Dir);
static bool createDir(std::string& Dir, mode_t mode = 755);
static bool createDir(const char *Dir, mode_t mode = 755){std::string dir = std::string(Dir);return createDir(dir, mode);}
static bool removeDir(const char *Dir);
static uint64_t getDirSize(const char *dir);
static uint64_t getDirSize(const std::string& dir){return getDirSize(dir.c_str());};
};
std::string to_string(int);
@@ -109,4 +112,7 @@ inline void cstrncpy(char *dest, const std::string &src, size_t n) { n--; strncp
std::vector<std::string> split(const std::string &s, char delim);
bool split_config_string(const std::string &str, std::map<std::string,std::string> &smap);
std::string getJFFS2MountPoint(int mtdPos);
#endif

View File

@@ -91,6 +91,7 @@ printf("url is %s\n", URL.c_str());
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, (long)1);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 1800);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_FAILONERROR, true);
#ifdef DEBUG
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
#endif
@@ -124,5 +125,5 @@ printf("download code %d\n", res);
fclose(headerfile);
}
return res==0;
return res==CURLE_OK;
}

View File

@@ -34,6 +34,7 @@
#include <config.h>
#endif
#include <global.h>
#include <system/localize.h>
#include <system/locals_intern.h>
@@ -108,8 +109,7 @@ CLocaleManager::~CLocaleManager()
::free(defaultDataMem);
}
#define LOCALEDIR_VAR "/var/tuxbox/locale/"
const char * path[2] = { LOCALEDIR_VAR, DATADIR "/neutrino/locale/"};
const char * path[2] = { LOCALEDIR_VAR, LOCALEDIR };
CLocaleManager::loadLocale_ret_t CLocaleManager::loadLocale(const char * const locale, bool asdefault)
{
@@ -131,6 +131,7 @@ CLocaleManager::loadLocale_ret_t CLocaleManager::loadLocale(const char * const l
for (unsigned int i = 0; i < 2; i++)
{
std::string filename = path[i];
filename += "/";
filename += locale;
filename += ".locale";
::stat(filename.c_str(), &st);

View File

@@ -47,6 +47,8 @@ typedef enum
LOCALE_EPGPLUS_STRETCH_MODE,
LOCALE_EPGPLUS_SWAP_MODE,
LOCALE_EPGPLUS_VIEW_MODE,
LOCALE_GENRE_ALL,
LOCALE_GENRE_ARTS,
LOCALE_GENRE_ARTS_0,
LOCALE_GENRE_ARTS_1,
LOCALE_GENRE_ARTS_10,
@@ -59,12 +61,14 @@ typedef enum
LOCALE_GENRE_ARTS_7,
LOCALE_GENRE_ARTS_8,
LOCALE_GENRE_ARTS_9,
LOCALE_GENRE_CHILDRENS_PROGRAMMES,
LOCALE_GENRE_CHILDRENS_PROGRAMMES_0,
LOCALE_GENRE_CHILDRENS_PROGRAMMES_1,
LOCALE_GENRE_CHILDRENS_PROGRAMMES_2,
LOCALE_GENRE_CHILDRENS_PROGRAMMES_3,
LOCALE_GENRE_CHILDRENS_PROGRAMMES_4,
LOCALE_GENRE_CHILDRENS_PROGRAMMES_5,
LOCALE_GENRE_DOCUS_MAGAZINES,
LOCALE_GENRE_DOCUS_MAGAZINES_0,
LOCALE_GENRE_DOCUS_MAGAZINES_1,
LOCALE_GENRE_DOCUS_MAGAZINES_2,
@@ -73,6 +77,7 @@ typedef enum
LOCALE_GENRE_DOCUS_MAGAZINES_5,
LOCALE_GENRE_DOCUS_MAGAZINES_6,
LOCALE_GENRE_DOCUS_MAGAZINES_7,
LOCALE_GENRE_MOVIE,
LOCALE_GENRE_MOVIE_0,
LOCALE_GENRE_MOVIE_1,
LOCALE_GENRE_MOVIE_2,
@@ -82,6 +87,7 @@ typedef enum
LOCALE_GENRE_MOVIE_6,
LOCALE_GENRE_MOVIE_7,
LOCALE_GENRE_MOVIE_8,
LOCALE_GENRE_MUSIC_DANCE,
LOCALE_GENRE_MUSIC_DANCE_0,
LOCALE_GENRE_MUSIC_DANCE_1,
LOCALE_GENRE_MUSIC_DANCE_2,
@@ -89,19 +95,23 @@ typedef enum
LOCALE_GENRE_MUSIC_DANCE_4,
LOCALE_GENRE_MUSIC_DANCE_5,
LOCALE_GENRE_MUSIC_DANCE_6,
LOCALE_GENRE_NEWS,
LOCALE_GENRE_NEWS_0,
LOCALE_GENRE_NEWS_1,
LOCALE_GENRE_NEWS_2,
LOCALE_GENRE_NEWS_3,
LOCALE_GENRE_NEWS_4,
LOCALE_GENRE_SHOW,
LOCALE_GENRE_SHOW_0,
LOCALE_GENRE_SHOW_1,
LOCALE_GENRE_SHOW_2,
LOCALE_GENRE_SHOW_3,
LOCALE_GENRE_SOCIAL_POLITICAL,
LOCALE_GENRE_SOCIAL_POLITICAL_0,
LOCALE_GENRE_SOCIAL_POLITICAL_1,
LOCALE_GENRE_SOCIAL_POLITICAL_2,
LOCALE_GENRE_SOCIAL_POLITICAL_3,
LOCALE_GENRE_SPORTS,
LOCALE_GENRE_SPORTS_0,
LOCALE_GENRE_SPORTS_1,
LOCALE_GENRE_SPORTS_10,
@@ -114,6 +124,7 @@ typedef enum
LOCALE_GENRE_SPORTS_7,
LOCALE_GENRE_SPORTS_8,
LOCALE_GENRE_SPORTS_9,
LOCALE_GENRE_TRAVEL_HOBBIES,
LOCALE_GENRE_TRAVEL_HOBBIES_0,
LOCALE_GENRE_TRAVEL_HOBBIES_1,
LOCALE_GENRE_TRAVEL_HOBBIES_2,
@@ -282,6 +293,7 @@ typedef enum
LOCALE_CHANNELLIST_SHOW_CHANNELLOGO,
LOCALE_CHANNELLIST_SHOW_CHANNELNUMBER,
LOCALE_CHANNELLIST_SHOW_EMPTY_FAVS,
LOCALE_CHANNELLIST_SHOW_INFOBOX,
LOCALE_CHANNELLIST_SINCE,
LOCALE_CHANNELLIST_START,
LOCALE_CI_CLOCK,
@@ -293,8 +305,11 @@ typedef enum
LOCALE_CI_REMOVED,
LOCALE_CI_RESET,
LOCALE_CI_RESET_STANDBY,
LOCALE_CI_SAVE_PINCODE,
LOCALE_CI_SETTINGS,
LOCALE_CI_TIMEOUT,
LOCALE_CI_TUNER,
LOCALE_CI_USE,
LOCALE_CI_WAITING,
LOCALE_CLOCK_BACKGROUND,
LOCALE_CLOCK_SECONDS,
@@ -302,6 +317,7 @@ typedef enum
LOCALE_CLOCK_SWITCH_OFF,
LOCALE_CLOCK_SWITCH_ON,
LOCALE_COLOR_GRADIENT,
LOCALE_COLOR_GRADIENT_C2C,
LOCALE_COLORCHOOSER_ALPHA,
LOCALE_COLORCHOOSER_BLUE,
LOCALE_COLORCHOOSER_GREEN,
@@ -326,6 +342,7 @@ typedef enum
LOCALE_COLORSTATUSBAR_TEXT,
LOCALE_COLORTHEMEMENU_HEAD,
LOCALE_COLORTHEMEMENU_HEAD2,
LOCALE_COLORTHEMEMENU_MENU_HINTS,
LOCALE_COLORTHEMEMENU_NAME,
LOCALE_COLORTHEMEMENU_NEUTRINO_THEME,
LOCALE_COLORTHEMEMENU_QUESTION,
@@ -376,6 +393,8 @@ typedef enum
LOCALE_EPGVIEWER_LENGTH,
LOCALE_EPGVIEWER_NODETAILED,
LOCALE_EPGVIEWER_NOTFOUND,
LOCALE_EVENTFINDER_FSK,
LOCALE_EVENTFINDER_GENRE,
LOCALE_EVENTFINDER_HEAD,
LOCALE_EVENTFINDER_HISTORY,
LOCALE_EVENTFINDER_KEYWORD,
@@ -595,9 +614,11 @@ typedef enum
LOCALE_FLASHUPDATE_CREATEIMAGE,
LOCALE_FLASHUPDATE_CREATEIMAGE_ADD_ENV,
LOCALE_FLASHUPDATE_CREATEIMAGE_ADD_KERNEL,
LOCALE_FLASHUPDATE_CREATEIMAGE_ADD_ROOT1,
LOCALE_FLASHUPDATE_CREATEIMAGE_ADD_SPARE,
LOCALE_FLASHUPDATE_CREATEIMAGE_ADD_U_BOOT,
LOCALE_FLASHUPDATE_CREATEIMAGE_ADD_ULDR,
LOCALE_FLASHUPDATE_CREATEIMAGE_ADD_VAR,
LOCALE_FLASHUPDATE_CREATEIMAGE_MENU,
LOCALE_FLASHUPDATE_CREATEIMAGE_OPTIONS,
LOCALE_FLASHUPDATE_CREATEIMAGE_OTHER,
@@ -713,6 +734,14 @@ typedef enum
LOCALE_FONTSIZE_MENU_INFO,
LOCALE_FONTSIZE_MENU_TITLE,
LOCALE_FONTSIZE_SUBTITLES,
LOCALE_FSK_ALL,
LOCALE_FSK_FROM_12,
LOCALE_FSK_FROM_16,
LOCALE_FSK_FROM_18,
LOCALE_FSK_FROM_7,
LOCALE_FSK_TO_12,
LOCALE_FSK_TO_16,
LOCALE_FSK_TO_7,
LOCALE_HDD_10MIN,
LOCALE_HDD_1MIN,
LOCALE_HDD_20MIN,
@@ -870,6 +899,9 @@ typedef enum
LOCALE_LUA_FUNCTION_DEPRECATED1,
LOCALE_LUA_FUNCTION_DEPRECATED2,
LOCALE_LUA_FUNCTION_DEPRECATED3,
LOCALE_LUA_PARAMETER_DEPRECATED2,
LOCALE_LUA_VERSIONSCHECK1,
LOCALE_LUA_VERSIONSCHECK2,
LOCALE_MAINMENU_AUDIOPLAYER,
LOCALE_MAINMENU_CHANNELS,
LOCALE_MAINMENU_CLEARSECTIONSD,
@@ -951,7 +983,6 @@ typedef enum
LOCALE_MENU_HINT_CEC_STANDBY,
LOCALE_MENU_HINT_CEC_VIEW_ON,
LOCALE_MENU_HINT_CHANNELLIST_ADDITIONAL,
LOCALE_MENU_HINT_CHANNELLIST_COLORED,
LOCALE_MENU_HINT_CHANNELLIST_EPG_ALIGN,
LOCALE_MENU_HINT_CHANNELLIST_EXTENDED,
LOCALE_MENU_HINT_CHANNELLIST_FONTS,
@@ -962,6 +993,7 @@ typedef enum
LOCALE_MENU_HINT_CHANNELLIST_SHOW_CHANNELLOGO,
LOCALE_MENU_HINT_CHANNELLIST_SHOW_CHANNELNUMBER,
LOCALE_MENU_HINT_CHANNELLIST_SHOW_EMPTY_FAVS,
LOCALE_MENU_HINT_CHANNELLIST_SHOW_INFOBOX,
LOCALE_MENU_HINT_CHANNELS,
LOCALE_MENU_HINT_CI,
LOCALE_MENU_HINT_CLOCK_BACKGROUND,
@@ -970,6 +1002,9 @@ typedef enum
LOCALE_MENU_HINT_CLOCK_SIZE,
LOCALE_MENU_HINT_CLOCK_TEXTCOLOR,
LOCALE_MENU_HINT_COLOR_GRADIENT,
LOCALE_MENU_HINT_COLOR_GRADIENT_C2C,
LOCALE_MENU_HINT_COLORED_EVENTS,
LOCALE_MENU_HINT_COLORED_EVENTS_TEXTCOLOR,
LOCALE_MENU_HINT_COLORS,
LOCALE_MENU_HINT_CONTENT_BACK,
LOCALE_MENU_HINT_CONTENT_TEXTCOLOR,
@@ -990,7 +1025,6 @@ typedef enum
LOCALE_MENU_HINT_EPG_SAVE_STANDBY,
LOCALE_MENU_HINT_EPG_SCAN,
LOCALE_MENU_HINT_EPG_SCAN_MODE,
LOCALE_MENU_HINT_EVENT_TEXTCOLOR,
LOCALE_MENU_HINT_EVENTLIST_ADDITIONAL,
LOCALE_MENU_HINT_EVENTLIST_FONTS,
LOCALE_MENU_HINT_EVENTLIST_SETUP,
@@ -1026,7 +1060,9 @@ typedef enum
LOCALE_MENU_HINT_INFO,
LOCALE_MENU_HINT_INFOBAR_BACK,
LOCALE_MENU_HINT_INFOBAR_CASYS,
LOCALE_MENU_HINT_INFOBAR_COLORED_EVENT,
LOCALE_MENU_HINT_INFOBAR_CASYS_COLOR,
LOCALE_MENU_HINT_INFOBAR_CASYS_DOTMATRIX,
LOCALE_MENU_HINT_INFOBAR_CASYS_FRAME,
LOCALE_MENU_HINT_INFOBAR_DD,
LOCALE_MENU_HINT_INFOBAR_FILESYS,
LOCALE_MENU_HINT_INFOBAR_FONTS,
@@ -1168,6 +1204,8 @@ typedef enum
LOCALE_MENU_HINT_NET_XUPNPD,
LOCALE_MENU_HINT_NETWORK,
LOCALE_MENU_HINT_NEW_ZAP_MODE,
LOCALE_MENU_HINT_NEXT,
LOCALE_MENU_HINT_NEXT_BRIEF,
LOCALE_MENU_HINT_NUMERIC_ADJUST,
LOCALE_MENU_HINT_OPKG,
LOCALE_MENU_HINT_OPKG_UPGRADE,
@@ -1408,11 +1446,13 @@ typedef enum
LOCALE_MESSAGEBOX_OK,
LOCALE_MESSAGEBOX_YES,
LOCALE_MISCSETTINGS_CHANNELLIST,
LOCALE_MISCSETTINGS_CHANNELLIST_COLORED_EVENTS,
LOCALE_MISCSETTINGS_CHANNELLIST_EPGTEXT_ALIGN,
LOCALE_MISCSETTINGS_COLORED_EVENTS,
LOCALE_MISCSETTINGS_COLORED_EVENTS_0,
LOCALE_MISCSETTINGS_COLORED_EVENTS_1,
LOCALE_MISCSETTINGS_COLORED_EVENTS_2,
LOCALE_MISCSETTINGS_COLORED_EVENTS_CHANNELLIST,
LOCALE_MISCSETTINGS_COLORED_EVENTS_INFOBAR,
LOCALE_MISCSETTINGS_ENERGY,
LOCALE_MISCSETTINGS_EPG_CACHE,
LOCALE_MISCSETTINGS_EPG_CACHE_HINT1,
@@ -1445,9 +1485,11 @@ typedef enum
LOCALE_MISCSETTINGS_HEAD,
LOCALE_MISCSETTINGS_INFOBAR,
LOCALE_MISCSETTINGS_INFOBAR_CASYSTEM_DISPLAY,
LOCALE_MISCSETTINGS_INFOBAR_CASYSTEM_DOTMATRIX,
LOCALE_MISCSETTINGS_INFOBAR_CASYSTEM_FRAME,
LOCALE_MISCSETTINGS_INFOBAR_CASYSTEM_MINI,
LOCALE_MISCSETTINGS_INFOBAR_CASYSTEM_MODE,
LOCALE_MISCSETTINGS_INFOBAR_COLORED_EVENTS,
LOCALE_MISCSETTINGS_INFOBAR_DISP,
LOCALE_MISCSETTINGS_INFOBAR_DISP_0,
LOCALE_MISCSETTINGS_INFOBAR_DISP_1,
LOCALE_MISCSETTINGS_INFOBAR_DISP_2,
@@ -1455,7 +1497,8 @@ typedef enum
LOCALE_MISCSETTINGS_INFOBAR_DISP_4,
LOCALE_MISCSETTINGS_INFOBAR_DISP_5,
LOCALE_MISCSETTINGS_INFOBAR_DISP_6,
LOCALE_MISCSETTINGS_INFOBAR_DISP_LOG,
LOCALE_MISCSETTINGS_INFOBAR_GRADIENT_BOTTOM,
LOCALE_MISCSETTINGS_INFOBAR_GRADIENT_TOP,
LOCALE_MISCSETTINGS_INFOBAR_LOGO_HDD_DIR,
LOCALE_MISCSETTINGS_INFOBAR_SAT_DISPLAY,
LOCALE_MISCSETTINGS_INFOBAR_SHOW,
@@ -1561,6 +1604,7 @@ typedef enum
LOCALE_MOVIEBROWSER_CUT,
LOCALE_MOVIEBROWSER_CUT_FAILED,
LOCALE_MOVIEBROWSER_CUTTING,
LOCALE_MOVIEBROWSER_DELETE_ALL,
LOCALE_MOVIEBROWSER_DELETE_INFO,
LOCALE_MOVIEBROWSER_DELETE_SCREENSHOT,
LOCALE_MOVIEBROWSER_DIR,
@@ -1585,11 +1629,15 @@ typedef enum
LOCALE_MOVIEBROWSER_HEAD_PLAYLIST,
LOCALE_MOVIEBROWSER_HEAD_RECORDLIST,
LOCALE_MOVIEBROWSER_HIDE_SERIES,
LOCALE_MOVIEBROWSER_HINT_COPY_ONEFILE,
LOCALE_MOVIEBROWSER_HINT_COPY_SEVERAL,
LOCALE_MOVIEBROWSER_HINT_CUT,
LOCALE_MOVIEBROWSER_HINT_JUMPBACKWARD,
LOCALE_MOVIEBROWSER_HINT_JUMPFORWARD,
LOCALE_MOVIEBROWSER_HINT_MOVIEEND,
LOCALE_MOVIEBROWSER_HINT_NEWBOOK_BACKWARD,
LOCALE_MOVIEBROWSER_HINT_NEWBOOK_FORWARD,
LOCALE_MOVIEBROWSER_HINT_TRUNCATE,
LOCALE_MOVIEBROWSER_INFO_AUDIO,
LOCALE_MOVIEBROWSER_INFO_CHANNEL,
LOCALE_MOVIEBROWSER_INFO_FILE,
@@ -1621,6 +1669,10 @@ typedef enum
LOCALE_MOVIEBROWSER_LAST_PLAY_MAX_ITEMS,
LOCALE_MOVIEBROWSER_LAST_RECORD_MAX_ITEMS,
LOCALE_MOVIEBROWSER_LOAD_DEFAULT,
LOCALE_MOVIEBROWSER_MENU_COPY_ONEFILE,
LOCALE_MOVIEBROWSER_MENU_COPY_SEVERAL,
LOCALE_MOVIEBROWSER_MENU_CUT,
LOCALE_MOVIEBROWSER_MENU_CUT_HEAD,
LOCALE_MOVIEBROWSER_MENU_DIRECTORIES_HEAD,
LOCALE_MOVIEBROWSER_MENU_HELP_HEAD,
LOCALE_MOVIEBROWSER_MENU_MAIN_BOOKMARKS,
@@ -1634,6 +1686,7 @@ typedef enum
LOCALE_MOVIEBROWSER_MENU_PARENTAL_LOCK_RATE_HEAD,
LOCALE_MOVIEBROWSER_MENU_SAVE,
LOCALE_MOVIEBROWSER_MENU_SAVE_ALL,
LOCALE_MOVIEBROWSER_MENU_TRUNCATE,
LOCALE_MOVIEBROWSER_OPTION_BROWSER,
LOCALE_MOVIEBROWSER_RELOAD_AT_START,
LOCALE_MOVIEBROWSER_REMOUNT_AT_START,
@@ -1699,6 +1752,7 @@ typedef enum
LOCALE_MOVIEBROWSER_YT_REGION,
LOCALE_MOVIEBROWSER_YT_RELATED,
LOCALE_MOVIEBROWSER_YT_SEARCH,
LOCALE_MOVIECUT_CANCEL,
LOCALE_MOVIEPLAYER_BOOKMARK,
LOCALE_MOVIEPLAYER_BOOKMARKNAME,
LOCALE_MOVIEPLAYER_BOOKMARKNAME_HINT1,

View File

@@ -47,6 +47,8 @@ const char * locale_real_names[] =
"EPGPlus.stretch_mode",
"EPGPlus.swap_mode",
"EPGPlus.view_mode",
"GENRE.ALL",
"GENRE.ARTS",
"GENRE.ARTS.0",
"GENRE.ARTS.1",
"GENRE.ARTS.10",
@@ -59,12 +61,14 @@ const char * locale_real_names[] =
"GENRE.ARTS.7",
"GENRE.ARTS.8",
"GENRE.ARTS.9",
"GENRE.CHILDRENs_PROGRAMMES",
"GENRE.CHILDRENs_PROGRAMMES.0",
"GENRE.CHILDRENs_PROGRAMMES.1",
"GENRE.CHILDRENs_PROGRAMMES.2",
"GENRE.CHILDRENs_PROGRAMMES.3",
"GENRE.CHILDRENs_PROGRAMMES.4",
"GENRE.CHILDRENs_PROGRAMMES.5",
"GENRE.DOCUS_MAGAZINES",
"GENRE.DOCUS_MAGAZINES.0",
"GENRE.DOCUS_MAGAZINES.1",
"GENRE.DOCUS_MAGAZINES.2",
@@ -73,6 +77,7 @@ const char * locale_real_names[] =
"GENRE.DOCUS_MAGAZINES.5",
"GENRE.DOCUS_MAGAZINES.6",
"GENRE.DOCUS_MAGAZINES.7",
"GENRE.MOVIE",
"GENRE.MOVIE.0",
"GENRE.MOVIE.1",
"GENRE.MOVIE.2",
@@ -82,6 +87,7 @@ const char * locale_real_names[] =
"GENRE.MOVIE.6",
"GENRE.MOVIE.7",
"GENRE.MOVIE.8",
"GENRE.MUSIC_DANCE",
"GENRE.MUSIC_DANCE.0",
"GENRE.MUSIC_DANCE.1",
"GENRE.MUSIC_DANCE.2",
@@ -89,19 +95,23 @@ const char * locale_real_names[] =
"GENRE.MUSIC_DANCE.4",
"GENRE.MUSIC_DANCE.5",
"GENRE.MUSIC_DANCE.6",
"GENRE.NEWS",
"GENRE.NEWS.0",
"GENRE.NEWS.1",
"GENRE.NEWS.2",
"GENRE.NEWS.3",
"GENRE.NEWS.4",
"GENRE.SHOW",
"GENRE.SHOW.0",
"GENRE.SHOW.1",
"GENRE.SHOW.2",
"GENRE.SHOW.3",
"GENRE.SOCIAL_POLITICAL",
"GENRE.SOCIAL_POLITICAL.0",
"GENRE.SOCIAL_POLITICAL.1",
"GENRE.SOCIAL_POLITICAL.2",
"GENRE.SOCIAL_POLITICAL.3",
"GENRE.SPORTS",
"GENRE.SPORTS.0",
"GENRE.SPORTS.1",
"GENRE.SPORTS.10",
@@ -114,6 +124,7 @@ const char * locale_real_names[] =
"GENRE.SPORTS.7",
"GENRE.SPORTS.8",
"GENRE.SPORTS.9",
"GENRE.TRAVEL_HOBBIES",
"GENRE.TRAVEL_HOBBIES.0",
"GENRE.TRAVEL_HOBBIES.1",
"GENRE.TRAVEL_HOBBIES.2",
@@ -282,6 +293,7 @@ const char * locale_real_names[] =
"channellist.show_channellogo",
"channellist.show_channelnumber",
"channellist.show_empty_favs",
"channellist.show_infobox",
"channellist.since",
"channellist.start",
"ci.clock",
@@ -293,8 +305,11 @@ const char * locale_real_names[] =
"ci.removed",
"ci.reset",
"ci.reset_standby",
"ci.save_pincode",
"ci.settings",
"ci.timeout",
"ci.tuner",
"ci.use",
"ci.waiting",
"clock_background",
"clock_seconds",
@@ -302,6 +317,7 @@ const char * locale_real_names[] =
"clock_switch_off",
"clock_switch_on",
"color.gradient",
"color.gradient_c2c",
"colorchooser.alpha",
"colorchooser.blue",
"colorchooser.green",
@@ -326,6 +342,7 @@ const char * locale_real_names[] =
"colorstatusbar.text",
"colorthememenu.head",
"colorthememenu.head2",
"colorthememenu.menu_hints",
"colorthememenu.name",
"colorthememenu.neutrino_theme",
"colorthememenu.question",
@@ -376,6 +393,8 @@ const char * locale_real_names[] =
"epgviewer.length",
"epgviewer.nodetailed",
"epgviewer.notfound",
"eventfinder.fsk",
"eventfinder.genre",
"eventfinder.head",
"eventfinder.history",
"eventfinder.keyword",
@@ -595,9 +614,11 @@ const char * locale_real_names[] =
"flashupdate.createimage",
"flashupdate.createimage_add_env",
"flashupdate.createimage_add_kernel",
"flashupdate.createimage_add_root1",
"flashupdate.createimage_add_spare",
"flashupdate.createimage_add_u_boot",
"flashupdate.createimage_add_uldr",
"flashupdate.createimage_add_var",
"flashupdate.createimage_menu",
"flashupdate.createimage_options",
"flashupdate.createimage_other",
@@ -713,6 +734,14 @@ const char * locale_real_names[] =
"fontsize.menu_info",
"fontsize.menu_title",
"fontsize.subtitles",
"fsk.all",
"fsk.from_12",
"fsk.from_16",
"fsk.from_18",
"fsk.from_7",
"fsk.to_12",
"fsk.to_16",
"fsk.to_7",
"hdd_10min",
"hdd_1min",
"hdd_20min",
@@ -870,6 +899,9 @@ const char * locale_real_names[] =
"lua.function_deprecated1",
"lua.function_deprecated2",
"lua.function_deprecated3",
"lua.parameter_deprecated2",
"lua.versionscheck1",
"lua.versionscheck2",
"mainmenu.audioplayer",
"mainmenu.channels",
"mainmenu.clearsectionsd",
@@ -951,7 +983,6 @@ const char * locale_real_names[] =
"menu.hint_cec_standby",
"menu.hint_cec_view_on",
"menu.hint_channellist_additional",
"menu.hint_channellist_colored",
"menu.hint_channellist_epg_align",
"menu.hint_channellist_extended",
"menu.hint_channellist_fonts",
@@ -962,6 +993,7 @@ const char * locale_real_names[] =
"menu.hint_channellist_show_channellogo",
"menu.hint_channellist_show_channelnumber",
"menu.hint_channellist_show_empty_favs",
"menu.hint_channellist_show_infobox",
"menu.hint_channels",
"menu.hint_ci",
"menu.hint_clock_background",
@@ -970,6 +1002,9 @@ const char * locale_real_names[] =
"menu.hint_clock_size",
"menu.hint_clock_textcolor",
"menu.hint_color_gradient",
"menu.hint_color_gradient_c2c",
"menu.hint_colored_events",
"menu.hint_colored_events_textcolor",
"menu.hint_colors",
"menu.hint_content_back",
"menu.hint_content_textcolor",
@@ -990,7 +1025,6 @@ const char * locale_real_names[] =
"menu.hint_epg_save_standby",
"menu.hint_epg_scan",
"menu.hint_epg_scan_mode",
"menu.hint_event_textcolor",
"menu.hint_eventlist_additional",
"menu.hint_eventlist_fonts",
"menu.hint_eventlist_setup",
@@ -1026,7 +1060,9 @@ const char * locale_real_names[] =
"menu.hint_info",
"menu.hint_infobar_back",
"menu.hint_infobar_casys",
"menu.hint_infobar_colored_event",
"menu.hint_infobar_casys_color",
"menu.hint_infobar_casys_dotmatrix",
"menu.hint_infobar_casys_frame",
"menu.hint_infobar_dd",
"menu.hint_infobar_filesys",
"menu.hint_infobar_fonts",
@@ -1168,6 +1204,8 @@ const char * locale_real_names[] =
"menu.hint_net_xupnpd",
"menu.hint_network",
"menu.hint_new_zap_mode",
"menu.hint_next",
"menu.hint_next_brief",
"menu.hint_numeric_adjust",
"menu.hint_opkg",
"menu.hint_opkg_upgrade",
@@ -1408,11 +1446,13 @@ const char * locale_real_names[] =
"messagebox.ok",
"messagebox.yes",
"miscsettings.channellist",
"miscsettings.channellist_colored_events",
"miscsettings.channellist_epgtext_align",
"miscsettings.colored_events",
"miscsettings.colored_events_0",
"miscsettings.colored_events_1",
"miscsettings.colored_events_2",
"miscsettings.colored_events_channellist",
"miscsettings.colored_events_infobar",
"miscsettings.energy",
"miscsettings.epg_cache",
"miscsettings.epg_cache_hint1",
@@ -1445,9 +1485,11 @@ const char * locale_real_names[] =
"miscsettings.head",
"miscsettings.infobar",
"miscsettings.infobar_casystem_display",
"miscsettings.infobar_casystem_dotmatrix",
"miscsettings.infobar_casystem_frame",
"miscsettings.infobar_casystem_mini",
"miscsettings.infobar_casystem_mode",
"miscsettings.infobar_colored_events",
"miscsettings.infobar_disp",
"miscsettings.infobar_disp_0",
"miscsettings.infobar_disp_1",
"miscsettings.infobar_disp_2",
@@ -1455,7 +1497,8 @@ const char * locale_real_names[] =
"miscsettings.infobar_disp_4",
"miscsettings.infobar_disp_5",
"miscsettings.infobar_disp_6",
"miscsettings.infobar_disp_log",
"miscsettings.infobar_gradient_bottom",
"miscsettings.infobar_gradient_top",
"miscsettings.infobar_logo_hdd_dir",
"miscsettings.infobar_sat_display",
"miscsettings.infobar_show",
@@ -1561,6 +1604,7 @@ const char * locale_real_names[] =
"moviebrowser.cut",
"moviebrowser.cut_failed",
"moviebrowser.cutting",
"moviebrowser.delete_all",
"moviebrowser.delete_info",
"moviebrowser.delete_screenshot",
"moviebrowser.dir",
@@ -1585,11 +1629,15 @@ const char * locale_real_names[] =
"moviebrowser.head_playlist",
"moviebrowser.head_recordlist",
"moviebrowser.hide_series",
"moviebrowser.hint_copy_onefile",
"moviebrowser.hint_copy_several",
"moviebrowser.hint_cut",
"moviebrowser.hint_jumpbackward",
"moviebrowser.hint_jumpforward",
"moviebrowser.hint_movieend",
"moviebrowser.hint_newbook_backward",
"moviebrowser.hint_newbook_forward",
"moviebrowser.hint_truncate",
"moviebrowser.info_audio",
"moviebrowser.info_channel",
"moviebrowser.info_file",
@@ -1621,6 +1669,10 @@ const char * locale_real_names[] =
"moviebrowser.last_play_max_items",
"moviebrowser.last_record_max_items",
"moviebrowser.load_default",
"moviebrowser.menu_copy_onefile",
"moviebrowser.menu_copy_several",
"moviebrowser.menu_cut",
"moviebrowser.menu_cut_head",
"moviebrowser.menu_directories_head",
"moviebrowser.menu_help_head",
"moviebrowser.menu_main_bookmarks",
@@ -1634,6 +1686,7 @@ const char * locale_real_names[] =
"moviebrowser.menu_parental_lock_rate_head",
"moviebrowser.menu_save",
"moviebrowser.menu_save_all",
"moviebrowser.menu_truncate",
"moviebrowser.option_browser",
"moviebrowser.reload_at_start",
"moviebrowser.remount_at_start",
@@ -1699,6 +1752,7 @@ const char * locale_real_names[] =
"moviebrowser.yt_region",
"moviebrowser.yt_related",
"moviebrowser.yt_search",
"moviecut.cancel",
"movieplayer.bookmark",
"movieplayer.bookmarkname",
"movieplayer.bookmarkname_hint1",

View File

@@ -50,7 +50,7 @@ chmod +x /lib/tuxbox/luaplugins/test.lua
#include <system/helpers.h>
#include <system/set_threadname.h>
#include <luaclient/luaclient.h>
#include <gui/luainstance.h>
#include <gui/lua/luainstance.h>
#include "luaserver.h"

View File

@@ -54,8 +54,8 @@
#include <gui/widget/stringinput.h>
#include <gui/infoclock.h>
#include <gui/infoviewer.h>
#include <driver/volume.h>
#include <driver/display.h>
#include <driver/volume.h>
#include <system/helpers.h>
// obsolete #include <gui/streaminfo.h>
@@ -178,6 +178,10 @@ void CColorSetupNotifier::setPalette()
convertSetupColor2RGB(t.infobar_Text_red, t.infobar_Text_green, t.infobar_Text_blue),
8, convertSetupAlpha2Alpha(t.infobar_alpha) );
frameBuffer->paletteGenFade(COL_INFOBAR_CASYSTEM,
convertSetupColor2RGB(t.infobar_casystem_red, t.infobar_casystem_green, t.infobar_casystem_blue),
convertSetupColor2RGB(t.infobar_Text_red, t.infobar_Text_green, t.infobar_Text_blue),
8, convertSetupAlpha2Alpha(t.infobar_casystem_alpha) );
frameBuffer->paletteGenFade(COL_COLORED_EVENTS_INFOBAR,
convertSetupColor2RGB(t.infobar_red, t.infobar_green, t.infobar_blue),
@@ -452,18 +456,24 @@ bool CTZChangeNotifier::changeNotify(const neutrino_locale_t, void * Data)
xmlDocPtr parser = parseXmlFile("/etc/timezone.xml");
if (parser != NULL) {
xmlNodePtr search = xmlDocGetRootElement(parser)->xmlChildrenNode;
xmlNodePtr search = xmlDocGetRootElement(parser);
search = xmlChildrenNode(search);
while (search) {
if (!strcmp(xmlGetName(search), "zone")) {
name = xmlGetAttribute(search, "name");
const char *nptr = xmlGetAttribute(search, "name");
if(nptr)
name = nptr;
if(g_settings.timezone == name) {
zone = xmlGetAttribute(search, "zone");
const char *zptr = xmlGetAttribute(search, "zone");
if(zptr)
zone = zptr;
if (!access("/usr/share/zoneinfo/" + zone, R_OK))
found = true;
break;
}
}
search = search->xmlNextNode;
search = xmlNextNode(search);
}
xmlFreeDoc(parser);
}

View File

@@ -64,6 +64,8 @@ struct SNeutrinoTheme
unsigned char menu_Head_Text_green;
unsigned char menu_Head_Text_blue;
int menu_Head_gradient;
unsigned char menu_Content_alpha;
unsigned char menu_Content_red;
unsigned char menu_Content_green;
@@ -94,25 +96,39 @@ struct SNeutrinoTheme
unsigned char menu_Content_inactive_Text_green;
unsigned char menu_Content_inactive_Text_blue;
int menu_Hint_gradient;
unsigned char infobar_alpha;
unsigned char infobar_red;
unsigned char infobar_green;
unsigned char infobar_blue;
unsigned char infobar_casystem_alpha;
unsigned char infobar_casystem_red;
unsigned char infobar_casystem_green;
unsigned char infobar_casystem_blue;
unsigned char infobar_Text_alpha;
unsigned char infobar_Text_red;
unsigned char infobar_Text_green;
unsigned char infobar_Text_blue;
int infobar_gradient_top;
int infobar_gradient_bottom;
unsigned char colored_events_alpha;
unsigned char colored_events_red;
unsigned char colored_events_green;
unsigned char colored_events_blue;
int colored_events_channellist;
int colored_events_infobar;
unsigned char clock_Digit_alpha;
unsigned char clock_Digit_red;
unsigned char clock_Digit_green;
unsigned char clock_Digit_blue;
int gradient_c2c;
};
struct SNeutrinoSettings
@@ -160,6 +176,8 @@ struct SNeutrinoSettings
int progressbar_timescale_yellow;
int progressbar_timescale_invert;
int casystem_display;
int casystem_dotmatrix;
int casystem_frame;
int scrambled_message;
int volume_pos;
int volume_digits;
@@ -208,6 +226,9 @@ struct SNeutrinoSettings
int ci_standby_reset;
int ci_clock;
int ci_ignore_messages;
int ci_save_pincode;
int ci_tuner;
std::string ci_pincode;
int radiotext_enable;
int easymenu;
@@ -367,10 +388,7 @@ struct SNeutrinoSettings
SNeutrinoTheme theme;
int colored_events_channellist;
int colored_events_infobar;
int contrast_fonts;
int gradiant;
//network
#define NETWORK_NFS_NR_OF_ENTRIES 8
@@ -392,6 +410,7 @@ struct SNeutrinoSettings
std::string network_nfs_recordingdir;
std::string timeshiftdir;
std::string downloadcache_dir;
std::string last_webtv_dir;
//recording
int recording_type;
@@ -533,6 +552,7 @@ struct SNeutrinoSettings
int channellist_sort_mode;
int channellist_numeric_adjust;
int channellist_show_channellogo;
int channellist_show_infobox;
int channellist_show_numbers;
int repeat_blocker;
int repeat_genericblocker;
@@ -572,6 +592,8 @@ struct SNeutrinoSettings
int apply_settings;
int apply_kernel;
int flashupdate_createimage_add_var;
int flashupdate_createimage_add_root1;
int flashupdate_createimage_add_uldr;
int flashupdate_createimage_add_u_boot;
int flashupdate_createimage_add_env;
@@ -676,6 +698,7 @@ struct SNeutrinoSettings
//movieplayer
int movieplayer_repeat_on;
std::string youtube_dev_id;
//zapit setup
std::string StartChannelTV;
@@ -758,6 +781,12 @@ struct SNeutrinoSettings
INFOBAR_PROGRESSBAR_ARRANGEMENT_BETWEEN_EVENTS = 3
}INFOBAR_PROGRESSBAR_ARRANGEMENT_TYPES;
enum WIZARD_MODES
{
WIZARD_OFF = 0,
WIZARD_START = 1,
WIZARD_ON = 2
};
};
/* some default Values */

View File

@@ -27,6 +27,7 @@
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <fstream>
#include <set>
#include <map>
@@ -39,6 +40,7 @@
#include "helpers.h"
#include "set_threadname.h"
#include <global.h>
#include <json/json.h>
#include "ytparser.h"
#include "ytcache.h"
@@ -50,6 +52,7 @@
#define URL_TIMEOUT 60
static int itags[] = { 37 /* 1080p MP4 */, 22 /* 720p MP4 */, 18 /* 270p/360p MP4 */, 0 };
std::string cYTVideoUrl::GetUrl()
{
std::string fullurl = url;
@@ -106,6 +109,11 @@ cYTFeedParser::cYTFeedParser()
max_results = 25;
concurrent_downloads = 2;
curl_handle = curl_easy_init();
#ifdef YOUTUBE_DEV_ID
key = YOUTUBE_DEV_ID;
#else
key = g_settings.youtube_dev_id;
#endif
}
cYTFeedParser::~cYTFeedParser()
@@ -133,6 +141,7 @@ bool cYTFeedParser::getUrl(std::string &url, std::string &answer, CURL *_curl_ha
curl_easy_setopt(_curl_handle, CURLOPT_FAILONERROR, 1);
curl_easy_setopt(_curl_handle, CURLOPT_TIMEOUT, URL_TIMEOUT);
curl_easy_setopt(_curl_handle, CURLOPT_NOSIGNAL, (long)1);
curl_easy_setopt(_curl_handle, CURLOPT_SSL_VERIFYPEER, false);
if(!g_settings.softupdate_proxyserver.empty()) {
curl_easy_setopt(_curl_handle, CURLOPT_PROXY, g_settings.softupdate_proxyserver.c_str());
@@ -173,6 +182,7 @@ bool cYTFeedParser::DownloadUrl(std::string &url, std::string &file, CURL *_curl
curl_easy_setopt(_curl_handle, CURLOPT_FAILONERROR, 1);
curl_easy_setopt(_curl_handle, CURLOPT_TIMEOUT, URL_TIMEOUT);
curl_easy_setopt(_curl_handle, CURLOPT_NOSIGNAL, (long)1);
curl_easy_setopt(_curl_handle, CURLOPT_SSL_VERIFYPEER, false);
if(!g_settings.softupdate_proxyserver.empty()) {
curl_easy_setopt(_curl_handle, CURLOPT_PROXY, g_settings.softupdate_proxyserver.c_str());
@@ -252,7 +262,7 @@ bool cYTFeedParser::saveToFile(const char * name, std::string str)
std::string cYTFeedParser::getXmlName(xmlNodePtr node)
{
std::string result;
char * name = xmlGetName(node);
const char * name = xmlGetName(node);
if (name)
result = name;
return result;
@@ -261,7 +271,7 @@ std::string cYTFeedParser::getXmlName(xmlNodePtr node)
std::string cYTFeedParser::getXmlAttr(xmlNodePtr node, const char * attr)
{
std::string result;
char * value = xmlGetAttribute(node, attr);
const char * value = xmlGetAttribute(node, attr);
if (value)
result = value;
return result;
@@ -270,139 +280,85 @@ std::string cYTFeedParser::getXmlAttr(xmlNodePtr node, const char * attr)
std::string cYTFeedParser::getXmlData(xmlNodePtr node)
{
std::string result;
char * value = xmlGetData(node);
const char * value = xmlGetData(node);
if (value)
result = value;
return result;
}
bool cYTFeedParser::parseFeedXml(std::string &answer)
bool cYTFeedParser::parseFeedJSON(std::string &answer)
{
xmlDocPtr answer_parser = parseXmlFile(curfeedfile.c_str());
if (answer_parser == NULL)
answer_parser = parseXml(answer.c_str());
Json::Value root;
Json::Reader reader;
if (answer_parser == NULL) {
printf("failed to parse xml\n");
std::ostringstream ss;
std::ifstream fh(curfeedfile.c_str(),std::ifstream::in);
ss << fh.rdbuf();
std::string filedata = ss.str();
bool parsedSuccess = reader.parse(filedata,root,false);
if(!parsedSuccess)
{
parsedSuccess = reader.parse(answer,root,false);
}
if(!parsedSuccess)
{
printf("Failed to parse JSON\n");
printf("%s\n", reader.getFormattedErrorMessages().c_str());
return false;
}
next.clear();
prev.clear();
//TODO
total.clear();
start.clear();
xmlNodePtr entry = xmlDocGetRootElement(answer_parser)->xmlChildrenNode;
while (entry) {
std::string name = getXmlName(entry);
#ifdef DEBUG_PARSER
printf("entry: %s\n", name.c_str());
#endif
if (name == "openSearch:startIndex") {
start = getXmlData(entry);
printf("start %s\n", start.c_str());
} else if (name == "openSearch:totalResults") {
total = getXmlData(entry);
printf("total %s\n", total.c_str());
}
else if (name == "link") {
std::string link = getXmlAttr(entry, "rel");
if (link == "next") {
next = getXmlAttr(entry, "href");
printf(" next [%s]\n", next.c_str());
} else if (link == "previous") {
prev = getXmlAttr(entry, "href");
printf(" prev [%s]\n", prev.c_str());
}
}
else if (name != "entry") {
entry = entry->xmlNextNode;
continue;
}
xmlNodePtr node = entry->xmlChildrenNode;
cYTVideoInfo vinfo;
std::string thumbnail;
while (node) {
name = getXmlName(node);
#ifdef DEBUG_PARSER
printf(" node: %s\n", name.c_str());
#endif
if (name == "title") {
#ifdef DEBUG_PARSER
printf(" title [%s]\n", getXmlData(node).c_str());
#endif
vinfo.title = getXmlData(node);
}
else if (name == "published") {
vinfo.published = getXmlData(node).substr(0, 10);
}
else if (name == "author") {
xmlNodePtr author = node->xmlChildrenNode;
while(author) {
name = getXmlName(author);
if (name == "name") {
#ifdef DEBUG_PARSER
printf(" author [%s]\n", getXmlData(author).c_str());
#endif
vinfo.author = getXmlData(author);
}
author = author->xmlNextNode;
}
}
else if (name == "media:group") {
xmlNodePtr media = node->xmlChildrenNode;
while (media) {
name = getXmlName(media);
if (name == "media:description") {
vinfo.description = getXmlData(media).c_str();
}
else if (name == "media:category") {
if (vinfo.category.size() < 3)
vinfo.category = getXmlData(media).c_str();
}
else if (name == "yt:videoid") {
#ifdef DEBUG_PARSER
printf(" id [%s]\n", getXmlData(media).c_str());
#endif
vinfo.id = getXmlData(media).c_str();
}
else if (name == "media:thumbnail") {
/* save first found */
if (thumbnail.empty())
thumbnail = getXmlAttr(media, "url");
/* check wanted quality */
if (tquality == getXmlAttr(media, "yt:name")) {
vinfo.thumbnail = getXmlAttr(media, "url");
next = root.get("nextPageToken", "").asString();
prev = root.get("prevPageToken", "").asString();
cYTVideoInfo vinfo;
Json::Value elements = root["items"];
for(unsigned int i=0; i<elements.size();++i)
{
#ifdef DEBUG_PARSER
printf("vinfo.thumbnail [%s]\n", vinfo.thumbnail.c_str());
printf("=========================================================\n");
printf("Element %d in elements\n", i);
printf("%s\n", elements[i]);
#endif
}
}
else if (name == "yt:duration") {
vinfo.duration = atoi(getXmlAttr(media, "seconds").c_str());
}
#if 0
else if (name == "media:player") {
std::string url = getXmlAttr(media, "url");
printf(" media:player [%s]\n", url.c_str());
}
else if (name == "media:title") {
}
#endif
media = media->xmlNextNode;
}
}
node = node->xmlNextNode;
if(elements[i]["id"].type() == Json::objectValue) {
vinfo.id = elements[i]["id"].get("videoId", "").asString();
}
else if(elements[i]["id"].type() == Json::stringValue) {
vinfo.id = elements[i].get("id", "").asString();
}
vinfo.title = elements[i]["snippet"].get("title", "").asString();
vinfo.description = elements[i]["snippet"].get("description", "").asString();
vinfo.published = elements[i]["snippet"].get("publishedAt", "").asString().substr(0, 10);
std::string thumbnail = elements[i]["snippet"]["thumbnails"]["default"].get("url", "").asString();
// save thumbnail "default", if "high" not found
vinfo.thumbnail = elements[i]["snippet"]["thumbnails"]["high"].get("url", thumbnail).asString();
vinfo.author = elements[i]["snippet"].get("channelTitle", "unkown").asString();
vinfo.category = "";
parseFeedDetailsJSON(&vinfo);
#ifdef DEBUG_PARSER
printf("prevPageToken: %s\n", prevPageToken.c_str());
printf("nextPageToken: %s\n", nextPageToken.c_str());
printf("vinfo.id: %s\n", vinfo.id.c_str());
printf("vinfo.description: %s\n", vinfo.description.c_str());
printf("vinfo.published: %s\n", vinfo.published.c_str());
printf("vinfo.title: %s\n", vinfo.title.c_str());
printf("vinfo.thumbnail: %s\n", vinfo.thumbnail.c_str());
#endif
if (!vinfo.id.empty()) {
/* save first one, if wanted not found */
if (vinfo.thumbnail.empty())
vinfo.thumbnail = thumbnail;
vinfo.ret = false;
videos.push_back(vinfo);
}
entry = entry->xmlNextNode;
}
xmlFreeDoc(answer_parser);
GetVideoUrls();
@@ -417,6 +373,43 @@ bool cYTFeedParser::parseFeedXml(std::string &answer)
return parsed;
}
bool cYTFeedParser::parseFeedDetailsJSON(cYTVideoInfo* vinfo)
{
vinfo->duration = 0;
// See at https://developers.google.com/youtube/v3/docs/videos
std::string url = "https://www.googleapis.com/youtube/v3/videos?id=" + vinfo->id + "&part=contentDetails&key=" + key;
std::string answer;
if (!getUrl(url, answer))
return false;
Json::Value root;
Json::Reader reader;
bool parsedSuccess = reader.parse(answer, root, false);
if (!parsedSuccess) {
printf("Failed to parse JSON\n");
printf("%s\n", reader.getFormattedErrorMessages().c_str());
return false;
}
Json::Value elements = root["items"];
std::string duration = elements[0]["contentDetails"].get("duration", "").asString();
if (duration.find("PT") != std::string::npos) {
int h=0, m=0, s=0;
if (duration.find("H") != std::string::npos) {
sscanf(duration.c_str(), "PT%dH%dM%dS", &h, &m, &s);
}
else if (duration.find("M") != std::string::npos) {
sscanf(duration.c_str(), "PT%dM%dS", &m, &s);
}
else if (duration.find("S") != std::string::npos) {
sscanf(duration.c_str(), "PT%dS", &s);
}
// printf(">>>>> duration: %s, h: %d, m: %d, s: %d\n", duration.c_str(), h, m, s);
vinfo->duration = h*3600 + m*60 + s;
}
return true;
}
bool cYTFeedParser::supportedFormat(int fmt)
{
for (int *fmtp = itags; *fmtp; fmtp++)
@@ -506,46 +499,53 @@ bool cYTFeedParser::ParseFeed(std::string &url)
if (!getUrl(url, answer))
return false;
#endif
return parseFeedXml(answer);
return parseFeedJSON(answer);
}
bool cYTFeedParser::ParseFeed(yt_feed_mode_t mode, std::string search, std::string vid, yt_feed_orderby_t orderby)
{
std::string url = "http://gdata.youtube.com/feeds/api/standardfeeds/";
std::string answer;
std::string url = "https://www.googleapis.com/youtube/v3/search?";
bool append_res = true;
std::string trailer;
if (mode < FEED_LAST) {
switch(mode) {
//FIXME APIv3: we dont have the parameter "time".
case MOST_POPULAR:
default:
trailer = "&time=today";
//trailer = "&time=today";
curfeed = "&chart=mostPopular";
case MOST_POPULAR_ALL_TIME:
curfeed = "most_popular";
curfeed = "&chart=mostPopular";
break;
}
url = "https://www.googleapis.com/youtube/v3/videos?part=snippet";
if (!region.empty()) {
url += "&regionCode=";
url += region;
url += "/";
}
url += curfeed;
url += "?";
}
else if (mode == NEXT) {
if (next.empty())
return false;
url = next;
url = nextprevurl;
url += "&pageToken=";
url += next;
append_res = false;
}
else if (mode == PREV) {
if (prev.empty())
return false;
url = prev;
url = nextprevurl;
url += "&pageToken=";
url += prev;
append_res = false;
}
else if (mode == RELATED) {
if (vid.empty())
return false;
url = "http://gdata.youtube.com/feeds/api/videos/";
url = "https://www.googleapis.com/youtube/v3/videos/";
url += vid;
url += "/related?";
}
@@ -553,23 +553,24 @@ bool cYTFeedParser::ParseFeed(yt_feed_mode_t mode, std::string search, std::stri
if (search.empty())
return false;
encodeUrl(search);
url = "http://gdata.youtube.com/feeds/api/videos?q=";
url = "https://www.googleapis.com/youtube/v3/search?q=";
url += search;
url += "&";
const char *orderby_values[] = { "published", "relevance", "viewCount", "rating" };
url += "orderby=" + std::string(orderby_values[orderby & 3]) + "&";
url += "&part=snippet";
//FIXME locale for "title" and "videoCount"
const char *orderby_values[] = { "date","relevance","viewCount","rating","title","videoCount"};
url += "&order=" + std::string(orderby_values[orderby & 3]);
}
feedmode = mode;
if (append_res) {
url += "v=2&max-results=";
url += "&maxResults=";
char res[10];
sprintf(res, "%d", max_results);
url+= res;
url += "&key=" + key;
nextprevurl = url;
}
url += trailer;
return ParseFeed(url);
}

View File

@@ -81,6 +81,8 @@ class cYTFeedParser
std::string prev; // prev results
std::string start; // start index
std::string total; // total results
std::string nextprevurl; // url for next/prev
std::string key; // youtube dev id
int feedmode;
int max_results;
@@ -106,7 +108,8 @@ class cYTFeedParser
static bool saveToFile(const char * name, std::string str);
bool getUrl(std::string &url, std::string &answer, CURL *_curl_handle = NULL);
bool DownloadUrl(std::string &url, std::string &file, CURL *_curl_handle = NULL);
bool parseFeedXml(std::string &answer);
bool parseFeedJSON(std::string &answer);
bool parseFeedDetailsJSON(cYTVideoInfo* vinfo);
bool decodeVideoInfo(std::string &answer, cYTVideoInfo &vinfo);
bool supportedFormat(int fmt);
bool ParseFeed(std::string &url);