Added checkbox to the epggrab dialog to enable 8Hr flush
to disk EPG data on user request via thread
This commit is contained in:
parent
9b877c9003
commit
3752158b92
6 changed files with 66 additions and 2 deletions
|
@ -61,6 +61,11 @@
|
||||||
<dt>Update channel name
|
<dt>Update channel name
|
||||||
<dd>Automatically update channel icons using information provided
|
<dd>Automatically update channel icons using information provided
|
||||||
by the enabled EPG providers.
|
by the enabled EPG providers.
|
||||||
|
<dt>Periodic save EPG to disk
|
||||||
|
<dd>Writes the current in-memory EPG database to disk every 8 Hours
|
||||||
|
when checked, so should a crash/unexpected shutdown occur EPG
|
||||||
|
data is saved periodically to the database (Re-read on
|
||||||
|
next startup)
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
<h3>Internal Grabber</h3>
|
<h3>Internal Grabber</h3>
|
||||||
|
|
33
src/epgdb.c
33
src/epgdb.c
|
@ -20,6 +20,7 @@
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
#include "tvheadend.h"
|
#include "tvheadend.h"
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
|
@ -35,6 +36,9 @@ extern epg_object_tree_t epg_brands;
|
||||||
extern epg_object_tree_t epg_seasons;
|
extern epg_object_tree_t epg_seasons;
|
||||||
extern epg_object_tree_t epg_episodes;
|
extern epg_object_tree_t epg_episodes;
|
||||||
extern epg_object_tree_t epg_serieslinks;
|
extern epg_object_tree_t epg_serieslinks;
|
||||||
|
static pthread_cond_t _epgdbsave_cond;
|
||||||
|
static void* _epgdbsave_thread ( void *p );
|
||||||
|
pthread_mutex_t epgdbsave_mutex;
|
||||||
|
|
||||||
/* **************************************************************************
|
/* **************************************************************************
|
||||||
* Load
|
* Load
|
||||||
|
@ -135,6 +139,29 @@ static void _epgdb_v2_process ( htsmsg_t *m, epggrab_stats_t *stats )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Thread functions
|
||||||
|
*/
|
||||||
|
static void *_epgdbsave_thread ( void *p )
|
||||||
|
{
|
||||||
|
struct timespec ts;
|
||||||
|
ts.tv_nsec = 0;
|
||||||
|
tvhlog(LOG_DEBUG, "epgdb", "epgdbsave setting: %i", epggrab_epgdb_periodicsave);
|
||||||
|
while (1) {
|
||||||
|
if (epggrab_epgdb_periodicsave) {
|
||||||
|
tvhlog(LOG_DEBUG, "epgdb", "epgdbsave setting: %i",
|
||||||
|
epggrab_epgdb_periodicsave);
|
||||||
|
epg_save();
|
||||||
|
};
|
||||||
|
pthread_mutex_lock(&epgdbsave_mutex);
|
||||||
|
time(&ts.tv_sec);
|
||||||
|
ts.tv_sec += 28800; /* Every 8 hours */
|
||||||
|
pthread_cond_timedwait(&_epgdbsave_cond, &epgdbsave_mutex, &ts);
|
||||||
|
pthread_mutex_unlock(&epgdbsave_mutex);
|
||||||
|
};
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Load data
|
* Load data
|
||||||
*/
|
*/
|
||||||
|
@ -227,6 +254,12 @@ void epg_init ( void )
|
||||||
munmap(mem, st.st_size);
|
munmap(mem, st.st_size);
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
|
/* Create thread */
|
||||||
|
pthread_mutex_init(&epgdbsave_mutex, NULL);
|
||||||
|
pthread_cond_init(&_epgdbsave_cond, NULL);
|
||||||
|
/* Start thread */
|
||||||
|
pthread_t tid;
|
||||||
|
pthread_create(&tid, NULL, _epgdbsave_thread, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* **************************************************************************
|
/* **************************************************************************
|
||||||
|
|
|
@ -49,6 +49,7 @@ epggrab_module_list_t epggrab_modules;
|
||||||
uint32_t epggrab_channel_rename;
|
uint32_t epggrab_channel_rename;
|
||||||
uint32_t epggrab_channel_renumber;
|
uint32_t epggrab_channel_renumber;
|
||||||
uint32_t epggrab_channel_reicon;
|
uint32_t epggrab_channel_reicon;
|
||||||
|
uint32_t epggrab_epgdb_periodicsave;
|
||||||
|
|
||||||
/* **************************************************************************
|
/* **************************************************************************
|
||||||
* Internal Grab Thread
|
* Internal Grab Thread
|
||||||
|
@ -138,6 +139,7 @@ static void _epggrab_load ( void )
|
||||||
htsmsg_get_u32(m, "channel_rename", &epggrab_channel_rename);
|
htsmsg_get_u32(m, "channel_rename", &epggrab_channel_rename);
|
||||||
htsmsg_get_u32(m, "channel_renumber", &epggrab_channel_renumber);
|
htsmsg_get_u32(m, "channel_renumber", &epggrab_channel_renumber);
|
||||||
htsmsg_get_u32(m, "channel_reicon", &epggrab_channel_reicon);
|
htsmsg_get_u32(m, "channel_reicon", &epggrab_channel_reicon);
|
||||||
|
htsmsg_get_u32(m, "epgdb_periodicsave", &epggrab_epgdb_periodicsave);
|
||||||
if (!htsmsg_get_u32(m, old ? "grab-interval" : "interval",
|
if (!htsmsg_get_u32(m, old ? "grab-interval" : "interval",
|
||||||
&epggrab_interval)) {
|
&epggrab_interval)) {
|
||||||
if (old) epggrab_interval *= 3600;
|
if (old) epggrab_interval *= 3600;
|
||||||
|
@ -234,6 +236,7 @@ void epggrab_save ( void )
|
||||||
htsmsg_add_u32(m, "channel_rename", epggrab_channel_rename);
|
htsmsg_add_u32(m, "channel_rename", epggrab_channel_rename);
|
||||||
htsmsg_add_u32(m, "channel_renumber", epggrab_channel_renumber);
|
htsmsg_add_u32(m, "channel_renumber", epggrab_channel_renumber);
|
||||||
htsmsg_add_u32(m, "channel_reicon", epggrab_channel_reicon);
|
htsmsg_add_u32(m, "channel_reicon", epggrab_channel_reicon);
|
||||||
|
htsmsg_add_u32(m, "epgdb_periodicsave", epggrab_epgdb_periodicsave);
|
||||||
htsmsg_add_u32(m, "interval", epggrab_interval);
|
htsmsg_add_u32(m, "interval", epggrab_interval);
|
||||||
if ( epggrab_module )
|
if ( epggrab_module )
|
||||||
htsmsg_add_str(m, "module", epggrab_module->id);
|
htsmsg_add_str(m, "module", epggrab_module->id);
|
||||||
|
@ -299,6 +302,19 @@ int epggrab_set_channel_renumber ( uint32_t e )
|
||||||
return save;
|
return save;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Config from the webui for period save of db to disk
|
||||||
|
*/
|
||||||
|
int epggrab_set_periodicsave ( uint32_t e )
|
||||||
|
{
|
||||||
|
int save = 0;
|
||||||
|
if ( e != epggrab_epgdb_periodicsave ) {
|
||||||
|
epggrab_epgdb_periodicsave = e;
|
||||||
|
save = 1;
|
||||||
|
}
|
||||||
|
return save;
|
||||||
|
}
|
||||||
|
|
||||||
int epggrab_set_channel_reicon ( uint32_t e )
|
int epggrab_set_channel_reicon ( uint32_t e )
|
||||||
{
|
{
|
||||||
int save = 0;
|
int save = 0;
|
||||||
|
|
|
@ -226,6 +226,7 @@ extern epggrab_module_int_t* epggrab_module;
|
||||||
extern uint32_t epggrab_channel_rename;
|
extern uint32_t epggrab_channel_rename;
|
||||||
extern uint32_t epggrab_channel_renumber;
|
extern uint32_t epggrab_channel_renumber;
|
||||||
extern uint32_t epggrab_channel_reicon;
|
extern uint32_t epggrab_channel_reicon;
|
||||||
|
extern uint32_t epggrab_epgdb_periodicsave;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set configuration
|
* Set configuration
|
||||||
|
@ -236,6 +237,7 @@ int epggrab_set_module_by_id ( const char *id );
|
||||||
int epggrab_set_channel_rename ( uint32_t e );
|
int epggrab_set_channel_rename ( uint32_t e );
|
||||||
int epggrab_set_channel_renumber ( uint32_t e );
|
int epggrab_set_channel_renumber ( uint32_t e );
|
||||||
int epggrab_set_channel_reicon ( uint32_t e );
|
int epggrab_set_channel_reicon ( uint32_t e );
|
||||||
|
int epggrab_set_periodicsave ( uint32_t e );
|
||||||
int epggrab_enable_module ( epggrab_module_t *mod, uint8_t e );
|
int epggrab_enable_module ( epggrab_module_t *mod, uint8_t e );
|
||||||
int epggrab_enable_module_by_id ( const char *id, uint8_t e );
|
int epggrab_enable_module_by_id ( const char *id, uint8_t e );
|
||||||
|
|
||||||
|
|
|
@ -589,6 +589,7 @@ extjs_epggrab(http_connection_t *hc, const char *remain, void *opaque)
|
||||||
htsmsg_add_u32(r, "channel_rename", epggrab_channel_rename);
|
htsmsg_add_u32(r, "channel_rename", epggrab_channel_rename);
|
||||||
htsmsg_add_u32(r, "channel_renumber", epggrab_channel_renumber);
|
htsmsg_add_u32(r, "channel_renumber", epggrab_channel_renumber);
|
||||||
htsmsg_add_u32(r, "channel_reicon", epggrab_channel_reicon);
|
htsmsg_add_u32(r, "channel_reicon", epggrab_channel_reicon);
|
||||||
|
htsmsg_add_u32(r, "epgdb_periodicsave", epggrab_epgdb_periodicsave);
|
||||||
pthread_mutex_unlock(&epggrab_mutex);
|
pthread_mutex_unlock(&epggrab_mutex);
|
||||||
|
|
||||||
out = json_single_record(r, "epggrabSettings");
|
out = json_single_record(r, "epggrabSettings");
|
||||||
|
@ -619,6 +620,8 @@ extjs_epggrab(http_connection_t *hc, const char *remain, void *opaque)
|
||||||
save |= epggrab_set_channel_renumber(str ? 1 : 0);
|
save |= epggrab_set_channel_renumber(str ? 1 : 0);
|
||||||
str = http_arg_get(&hc->hc_req_args, "channel_reicon");
|
str = http_arg_get(&hc->hc_req_args, "channel_reicon");
|
||||||
save |= epggrab_set_channel_reicon(str ? 1 : 0);
|
save |= epggrab_set_channel_reicon(str ? 1 : 0);
|
||||||
|
str = http_arg_get(&hc->hc_req_args, "epgdb_periodicsave");
|
||||||
|
save |= epggrab_set_periodicsave(str ? 1 : 0);
|
||||||
if ( (str = http_arg_get(&hc->hc_req_args, "interval")) )
|
if ( (str = http_arg_get(&hc->hc_req_args, "interval")) )
|
||||||
save |= epggrab_set_interval(atoi(str));
|
save |= epggrab_set_interval(atoi(str));
|
||||||
if ( (str = http_arg_get(&hc->hc_req_args, "module")) )
|
if ( (str = http_arg_get(&hc->hc_req_args, "module")) )
|
||||||
|
|
|
@ -82,7 +82,7 @@ tvheadend.epggrab = function() {
|
||||||
var confreader = new Ext.data.JsonReader({
|
var confreader = new Ext.data.JsonReader({
|
||||||
root : 'epggrabSettings'
|
root : 'epggrabSettings'
|
||||||
}, [ 'module', 'interval', 'channel_rename', 'channel_renumber',
|
}, [ 'module', 'interval', 'channel_rename', 'channel_renumber',
|
||||||
'channel_reicon' ]);
|
'channel_reicon', 'epgdb_periodicsave' ]);
|
||||||
|
|
||||||
/* ****************************************************************
|
/* ****************************************************************
|
||||||
* Basic Fields
|
* Basic Fields
|
||||||
|
@ -184,6 +184,11 @@ tvheadend.epggrab = function() {
|
||||||
fieldLabel : 'Update channel icon'
|
fieldLabel : 'Update channel icon'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var epgPeriodicSave = new Ext.form.Checkbox({
|
||||||
|
name : 'epgdb_periodicsave',
|
||||||
|
fieldLabel : 'Periodic save EPG to disk'
|
||||||
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Simple fields
|
* Simple fields
|
||||||
*/
|
*/
|
||||||
|
@ -192,7 +197,7 @@ tvheadend.epggrab = function() {
|
||||||
width : 700,
|
width : 700,
|
||||||
autoHeight : true,
|
autoHeight : true,
|
||||||
collapsible : true,
|
collapsible : true,
|
||||||
items : [ channelRename, channelRenumber, channelReicon ]
|
items : [ channelRename, channelRenumber, channelReicon, epgPeriodicSave ]
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Reference in a new issue