Copy freesat to non-freesat database

This commit is contained in:
MofTot 2020-04-22 14:43:58 +01:00 committed by HummyPkg
parent 5e468f5857
commit b3ea751561
3 changed files with 81 additions and 21 deletions

View File

@ -112,6 +112,23 @@ int ExecSQLStatement(char *SQL, sqlite3 *db)
return 0; return 0;
} }
int ExecSQLStatementRowCount(char *SQL, sqlite3 *db)
{
int rc;
char *zErrMsg = 0;
rc = sqlite3_exec(db, SQL, 0, 0, &zErrMsg);
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error executing script : %s\n", zErrMsg);
fprintf(stderr, "RC : %i\n", rc);
fprintf(stderr, "SQL : %s\n", SQL);
sqlite3_free(zErrMsg);
return -1;
}
return sqlite3_changes(db);
}
/*int GetFileTimestamp(sqlite3 *db, char *res)*/ /*int GetFileTimestamp(sqlite3 *db, char *res)*/
void GetFileTimestamp(unsigned int * TS) void GetFileTimestamp(unsigned int * TS)
{ {

View File

@ -5,6 +5,7 @@ int OpenCreateDB(char * DBFile, sqlite3 **db);
int CloseDB(sqlite3 *db); int CloseDB(sqlite3 *db);
int InitDB(char * InitScript, sqlite3 *db); int InitDB(char * InitScript, sqlite3 *db);
int ExecSQLStatement(char *SQL, sqlite3 *db); int ExecSQLStatement(char *SQL, sqlite3 *db);
int ExecSQLStatementRowCount(char *SQL, sqlite3 *db);
void GetFileTimestamp(unsigned int *); void GetFileTimestamp(unsigned int *);

84
main.c
View File

@ -21,14 +21,14 @@
#include <stdlib.h> #include <stdlib.h>
int debug = 0; int debug = 0;
const char *version = "1.3"; const char *version = "1.8";
unsigned long sysopts = 0; unsigned long sysopts = 0;
unsigned long filterflags = 0; unsigned long filterflags = 0;
int int
syntax() syntax()
{ {
fprintf(stderr, "Humax Foxsat EPG Tool v%s, by adrianf36, 2011-2016.\n", version); fprintf(stderr, "Humax Foxsat EPG Tool v%s, by adrianf36, 2011-2016, MofTot 2018-20.\n", version);
fprintf(stderr, "based on the Humax (T2) EPG Tool from af123 v1.0.2, 2011.\n\n"); fprintf(stderr, "based on the Humax (T2) EPG Tool from af123 v1.0.2, 2011.\n\n");
fprintf(stderr, fprintf(stderr,
@ -111,10 +111,10 @@ unsigned int NeedToProcess (char * epgFile)
void SwapEPGFiles() void SwapEPGFiles()
{ {
/* /*
Having built the new EPG file as epgnew.db delete the old one Having built the new EPG file as epgnew.db delete the old one
and replace it with the new one. Handle the case where the old and replace it with the new one. Handle the case where the old
one can't be deleted because it's being accessed one can't be deleted because it's being accessed
First thing make sure that the size of the new file looks sensible. First thing make sure that the size of the new file looks sensible.
Expect this to be > 10MB ..... usually it's about 12MB Expect this to be > 10MB ..... usually it's about 12MB
@ -140,7 +140,7 @@ FILE * fp;
} }
} else { } else {
/* epgnew.db is smaller than we expected and is probably incomplete. /* epgnew.db is smaller than we expected and is probably incomplete.
Delete it and output a warning. Delete it and output a warning.
*/ */
fprintf(stderr, "Error. epgnew.db file size too small. Probably corrupt.\n"); fprintf(stderr, "Error. epgnew.db file size too small. Probably corrupt.\n");
remove("/opt/epg/epgnew.db"); remove("/opt/epg/epgnew.db");
@ -202,7 +202,7 @@ void EscapeChars(char ** InString, unsigned int *Len)
/* at least one ' character - process string */ /* at least one ' character - process string */
/* count them so we know how much space to allocate */ /* count them so we know how much space to allocate */
for (i=0; i<*Len; i++) { for (i=0; i<*Len; i++) {
if (originalstring[i]==0x27) { if (originalstring[i]==0x27) {
charcount++; charcount++;
} }
} }
@ -210,8 +210,8 @@ void EscapeChars(char ** InString, unsigned int *Len)
j=0; j=0;
for (i=0; i<*Len; i++) { for (i=0; i<*Len; i++) {
new[j++]=originalstring[i]; new[j++]=originalstring[i];
if (originalstring[i]==0x27) if (originalstring[i]==0x27)
new[j++]=0x27; new[j++]=0x27;
} }
new[j]='\0'; new[j]='\0';
@ -254,8 +254,8 @@ dumpsql(struct epg *epg __attribute__((unused)),
*/ */
sprintf(SQLStatement,"insert into epg (serviceid, eventid, starttime, duration, encrypted, name,"\ sprintf(SQLStatement,"insert into epg (serviceid, eventid, starttime, duration, encrypted, name,"\
"descr, warning, contentcode, contenttype, ECRID, SCRID, RCRID) values ("); "descr, warning, contentcode, contenttype, ECRID, SCRID, RCRID) values (");
sprintf(SQLStatement, "%s%d,%d,%ld,%d,%d,", SQLStatement, sprintf(SQLStatement, "%s%d,%d,%ld,%d,%d,", SQLStatement,
s->service_id, d->event_id, tm, s->service_id, d->event_id, tm,
d->dur_hour * 3600 + d->dur_min * 60 + d->dur_sec, d->dur_hour * 3600 + d->dur_min * 60 + d->dur_sec,
d->u1.u.free_CA_mode); d->u1.u.free_CA_mode);
if (ds[PARSER_SHORT_EVENT]) if (ds[PARSER_SHORT_EVENT])
@ -293,7 +293,7 @@ dumpsql(struct epg *epg __attribute__((unused)),
} }
else else
sprintf(SQLStatement,"%s'',",SQLStatement); sprintf(SQLStatement,"%s'',",SQLStatement);
if (ds[PARSER_CRID_SERIES]) if (ds[PARSER_CRID_SERIES])
{ {
struct descriptor *d = ds[PARSER_CRID_SERIES]; struct descriptor *d = ds[PARSER_CRID_SERIES];
@ -347,6 +347,8 @@ void dosqldump(char * epgpath,struct epgfilter *filter, int Continuous)
rc = ExecSQLStatement("COMMIT;", db); rc = ExecSQLStatement("COMMIT;", db);
copy_freesat_to_non_freesat(db);
sprintf(SQL, "replace into epgtimestamp (lastfileprocessed) values (%i);", FileTS); sprintf(SQL, "replace into epgtimestamp (lastfileprocessed) values (%i);", FileTS);
rc = ExecSQLStatement("Delete from epgtimestamp;", db); rc = ExecSQLStatement("Delete from epgtimestamp;", db);
rc = ExecSQLStatement(SQL, db); rc = ExecSQLStatement(SQL, db);
@ -359,7 +361,7 @@ void dosqldump(char * epgpath,struct epgfilter *filter, int Continuous)
} }
} else { } else {
FileTS = NeedToProcess(epgpath); FileTS = NeedToProcess(epgpath);
if (FileTS != 0) { if (FileTS != 0) {
@ -377,13 +379,15 @@ void dosqldump(char * epgpath,struct epgfilter *filter, int Continuous)
rc = ExecSQLStatement("COMMIT;", db); rc = ExecSQLStatement("COMMIT;", db);
copy_freesat_to_non_freesat(db);
sprintf(SQL, "replace into epgtimestamp (lastfileprocessed) values (%i);", FileTS); sprintf(SQL, "replace into epgtimestamp (lastfileprocessed) values (%i);", FileTS);
rc = ExecSQLStatement("Delete from epgtimestamp;", db); rc = ExecSQLStatement("Delete from epgtimestamp;", db);
rc = ExecSQLStatement(SQL, db); rc = ExecSQLStatement(SQL, db);
if (db != NULL) CloseDB(db); if (db != NULL) CloseDB(db);
SwapEPGFiles(); SwapEPGFiles();
} }
} }
} }
@ -415,7 +419,7 @@ dump(struct epg *epg __attribute__((unused)),
* event CRID, series CRID, rec CRID * event CRID, series CRID, rec CRID
*/ */
printf("%d\t%d\t%ld\t%d\t%d\t", printf("%d\t%d\t%ld\t%d\t%d\t",
s->service_id, d->event_id, tm, s->service_id, d->event_id, tm,
d->dur_hour * 3600 + d->dur_min * 60 + d->dur_sec, d->dur_hour * 3600 + d->dur_min * 60 + d->dur_sec,
d->u1.u.free_CA_mode); d->u1.u.free_CA_mode);
if (ds[PARSER_SHORT_EVENT]) if (ds[PARSER_SHORT_EVENT])
@ -484,7 +488,7 @@ dump(struct epg *epg __attribute__((unused)),
if (sysopts & SYSOPT_BRIEF) if (sysopts & SYSOPT_BRIEF)
{ {
safeprintf("%d/%d: %s+%d\n", safeprintf("%d/%d: %s+%d\n",
s->service_id, d->event_id, ctime_nl(&tm), s->service_id, d->event_id, ctime_nl(&tm),
d->dur_hour * 3600 + d->dur_min * 60 + d->dur_sec); d->dur_hour * 3600 + d->dur_min * 60 + d->dur_sec);
if (ds[PARSER_SHORT_EVENT]) if (ds[PARSER_SHORT_EVENT])
{ {
@ -568,6 +572,47 @@ dump(struct epg *epg __attribute__((unused)),
} }
} }
int
copy_freesat_to_non_freesat(sqlite3 * db)
{
int rc;
ExecSQLStatement(
"attach database '/opt/webif/plugin/epg/epgsettings.db' as epgsettings",
db
);
ExecSQLStatement("BEGIN;", db);
rc = ExecSQLStatementRowCount(
"insert into epg "
"select epgmappings.nonfreesatserviceid, "
"eventid, "
"starttime, "
"duration, "
"encrypted, "
"name, "
"descr, "
"warning, "
"contentcode, "
"contenttype, "
"ECRID, "
"SCRID, "
"RCRID "
"from epgsettings.epgmappings join epg on epg.serviceid = epgsettings.epgmappings.freesatserviceid "
"except "
"select epg.* "
"from epgsettings.epgmappings join epg on epg.serviceid = epgsettings.epgmappings.freesatserviceid",
db
);
ExecSQLStatement("COMMIT;", db);
printf("%d EPG event(s) copied from Freesat to non-Freesat\n", rc);
return rc;
}
void void
search(struct epg *epg __attribute__((unused)), search(struct epg *epg __attribute__((unused)),
struct section *s, struct data *d, struct descriptor **ds, struct section *s, struct data *d, struct descriptor **ds,
@ -759,12 +804,9 @@ nextopt:
{ {
dosqldump(epgpath, filter, 1); dosqldump(epgpath, filter, 1);
} }
else else
syntax(); syntax();
return 0; return 0;
} }