mirror of
https://github.com/tuxbox-fork-migrations/recycled-ni-neutrino.git
synced 2025-09-16 18:03:37 +02:00
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:
@@ -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@
|
||||
|
@@ -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";
|
||||
}
|
||||
|
@@ -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 "";
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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,
|
||||
|
@@ -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",
|
||||
|
@@ -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"
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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 */
|
||||
|
@@ -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 += "®ionCode=";
|
||||
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);
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user