aboutsummaryrefslogtreecommitdiff
path: root/lib/cmyth/libcmyth/mythtv_mysql.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/cmyth/libcmyth/mythtv_mysql.c')
-rw-r--r--lib/cmyth/libcmyth/mythtv_mysql.c1347
1 files changed, 0 insertions, 1347 deletions
diff --git a/lib/cmyth/libcmyth/mythtv_mysql.c b/lib/cmyth/libcmyth/mythtv_mysql.c
deleted file mode 100644
index de5695cc1d..0000000000
--- a/lib/cmyth/libcmyth/mythtv_mysql.c
+++ /dev/null
@@ -1,1347 +0,0 @@
-/*
- * Copyright (C) 2004-2012, Eric Lund
- * http://www.mvpmc.org/
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <mysql/mysql.h>
-#include <cmyth_local.h>
-#include <safe_string.h>
-
-void
-cmyth_database_close(cmyth_database_t db)
-{
- if(db->mysql != NULL)
- {
- mysql_close(db->mysql);
- db->mysql = NULL;
- }
-}
-
-cmyth_database_t
-cmyth_database_init(char *host, char *db_name, char *user, char *pass)
-{
- cmyth_database_t rtrn = ref_alloc(sizeof(*rtrn));
- cmyth_dbg(CMYTH_DBG_DEBUG, "%s\n", __FUNCTION__);
-
- if (rtrn != NULL) {
- rtrn->db_host = ref_strdup(host);
- rtrn->db_user = ref_strdup(user);
- rtrn->db_pass = ref_strdup(pass);
- rtrn->db_name = ref_strdup(db_name);
- }
-
- return rtrn;
-}
-
-int
-cmyth_database_set_host(cmyth_database_t db, char *host)
-{
- cmyth_database_close(db);
- ref_release(db->db_host);
- db->db_host = ref_strdup(host);
- if(! db->db_host)
- return 0;
- else
- return 1;
-}
-
-int
-cmyth_database_set_user(cmyth_database_t db, char *user)
-{
- cmyth_database_close(db);
- ref_release(db->db_user);
- db->db_user = ref_strdup(user);
- if(! db->db_user)
- return 0;
- else
- return 1;
-}
-
-int
-cmyth_database_set_pass(cmyth_database_t db, char *pass)
-{
- cmyth_database_close(db);
- ref_release(db->db_user);
- db->db_pass = ref_strdup(pass);
- if(! db->db_pass)
- return 0;
- else
- return 1;
-}
-
-int
-cmyth_database_set_name(cmyth_database_t db, char *name)
-{
- cmyth_database_close(db);
- ref_release(db->db_name);
- db->db_name = ref_strdup(name);
- if(! db->db_name)
- return 0;
- else
- return 1;
-}
-
-
-static int
-cmyth_db_check_connection(cmyth_database_t db)
-{
- if(db->mysql != NULL)
- {
- /* Fetch the mysql stats (uptime and stuff) to check the connection is
- * still good
- */
- if(mysql_stat(db->mysql) == NULL)
- {
- cmyth_database_close(db);
- }
- }
- if(db->mysql == NULL)
- {
- db->mysql = mysql_init(NULL);
- if(db->mysql == NULL)
- {
- fprintf(stderr,"%s: mysql_init() failed, insufficient memory?",
- __FUNCTION__);
- return -1;
- }
- if(NULL == mysql_real_connect(db->mysql,
- db->db_host,db->db_user,db->db_pass,db->db_name,0,NULL,0))
- {
- fprintf(stderr,"%s: mysql_connect() failed: %s", __FUNCTION__,
- mysql_error(db->mysql));
- cmyth_database_close(db);
- return -1;
- }
- }
- return 0;
-}
-
-MYSQL *
-cmyth_db_get_connection(cmyth_database_t db)
-{
- if(cmyth_db_check_connection(db) != 0)
- {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: cmyth_db_check_connection failed\n",
- __FUNCTION__);
- return NULL;
- }
-
- /*
- * mythbackend stores any multi-byte characters using utf8 encoding within latin1 database
- * columns. The MySQL connection needs to be told to use a utf8 character set when reading the
- * database columns or any multi-byte characters will be treated as 2 or 3 subsequent latin1
- * characters with nonsense values.
- *
- * http://www.mythtv.org/wiki/Fixing_Corrupt_Database_Encoding#Note_on_MythTV_0.21-fixes_and_below_character_encoding
- * http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
- */
- if(mysql_query(db->mysql,"SET NAMES utf8;")) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: mysql_query() failed: %s\n", __FUNCTION__, mysql_error(db->mysql));
- return NULL;
- }
-
- return db->mysql;
-}
-
-int
-cmyth_schedule_recording(cmyth_conn_t conn, char * msg)
-{
- int err=0;
- int count;
- char buf[256];
-
- fprintf (stderr, "In function : %s\n",__FUNCTION__);
- if (!conn) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: no connection\n", __FUNCTION__);
- return -1;
- }
-
- pthread_mutex_lock(&mutex);
-
- if ((err = cmyth_send_message(conn, msg)) < 0) {
- cmyth_dbg(CMYTH_DBG_ERROR,
- "%s: cmyth_send_message() failed (%d)\n",__FUNCTION__,err);
- return err;
- }
-
- count = cmyth_rcv_length(conn);
- cmyth_rcv_string(conn, &err, buf, sizeof(buf)-1,count);
- pthread_mutex_unlock(&mutex);
- return err;
-}
-
-char *
-cmyth_mysql_escape_chars(cmyth_database_t db, char * string)
-{
- char *N_string;
- size_t len;
-
- if(cmyth_db_check_connection(db) != 0)
- {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: cmyth_db_check_connection failed\n",
- __FUNCTION__);
- fprintf(stderr,"%s: cmyth_db_check_connection failed\n", __FUNCTION__);
- return NULL;
- }
-
- len = strlen(string);
- N_string=ref_alloc(len*2+1);
- mysql_real_escape_string(db->mysql,N_string,string,len);
-
- return (N_string);
-}
-
-int
-cmyth_get_offset_mysql(cmyth_database_t db, int type, char *recordid, int chanid, char *title, char *subtitle, char *description, char *seriesid, char *programid)
-{
- MYSQL_RES *res=NULL;
- MYSQL_ROW row;
- char query[1000];
- int count;
-
- if(cmyth_db_check_connection(db) != 0)
- {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: cmyth_db_check_connection failed\n", __FUNCTION__);
- fprintf(stderr,"%s: cmyth_db_check_connection failed\n", __FUNCTION__);
- return -1;
- }
- if (type == 1) { // startoffset
- sprintf (query,"SELECT startoffset FROM record WHERE (recordid='%s' AND chanid=%d AND title='%s' AND subtitle='%s' AND description='%s' AND seriesid='%s' AND programid='%s')",recordid,chanid,title,subtitle,description,seriesid,programid);
- }
- else if (type == 0) { //endoffset
- sprintf (query,"SELECT endoffset FROM record WHERE (recordid='%s' AND chanid=%d AND title='%s' AND subtitle='%s' AND description='%s' AND seriesid='%s' AND programid='%s')",recordid,chanid,title,subtitle,description,seriesid,programid);
- }
-
- cmyth_dbg(CMYTH_DBG_ERROR, "%s : query=%s\n",__FUNCTION__, query);
-
- if(mysql_query(db->mysql,query)) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: mysql_query() Failed: %s\n", __FUNCTION__, mysql_error(db->mysql));
- return -1;
- }
- res = mysql_store_result(db->mysql);
- if ( (count = (int)mysql_num_rows(res)) >0) {
- row = mysql_fetch_row(res);
- fprintf(stderr, "row grabbed done count=%d\n",count);
- mysql_free_result(res);
- return atoi(row[0]);
- }
- else {
- mysql_free_result(res);
- return 0;
- }
-}
-
-char *
-cmyth_get_recordid_mysql(cmyth_database_t db, int chanid, char *title, char *subtitle, char *description, char *seriesid, char *programid)
-{
- MYSQL_RES *res=NULL;
- MYSQL_ROW row;
- char query[1000];
- int count;
-
- if(cmyth_db_check_connection(db) != 0)
- {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: cmyth_db_check_connection failed\n", __FUNCTION__);
- fprintf(stderr,"%s: cmyth_db_check_connection failed\n", __FUNCTION__);
- return NULL;
- }
- sprintf (query,"SELECT recordid FROM record WHERE (chanid=%d AND title='%s' AND subtitle='%s' AND description='%s' AND seriesid='%s' AND programid='%s')",chanid,title,subtitle,description,seriesid,programid);
-
- cmyth_dbg(CMYTH_DBG_ERROR, "%s : query=%s\n",__FUNCTION__, query);
-
- if(mysql_query(db->mysql,query)) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: mysql_query() Failed: %s\n", __FUNCTION__, mysql_error(db->mysql));
- return NULL;
- }
- res = mysql_store_result(db->mysql);
- if ( (count = (int)mysql_num_rows(res)) >0) {
- row = mysql_fetch_row(res);
- fprintf(stderr, "row grabbed done count=%d\n",count);
- mysql_free_result(res);
- return row[0];
- }
- else {
- mysql_free_result(res);
- return "NULL";
- }
-}
-
-int
-cmyth_mysql_delete_scheduled_recording(cmyth_database_t db, char * query)
-{
- int rows=0;
- if(cmyth_db_check_connection(db) != 0)
- {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: cmyth_db_check_connection failed\n",
- __FUNCTION__);
- fprintf(stderr,"%s: cmyth_db_check_connection failed\n", __FUNCTION__);
- return -1;
- }
- cmyth_dbg(CMYTH_DBG_ERROR, "mysql query :%s\n",query);
-
- if(mysql_real_query(db->mysql,query,(unsigned int) strlen(query))) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: mysql_query() Failed: %s\n",
- __FUNCTION__, mysql_error(db->mysql));
- return -1;
- }
- rows=(int)mysql_affected_rows(db->mysql);
-
- if (rows <=0) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: mysql_query() Failed: %s\n",
- __FUNCTION__, mysql_error(db->mysql));
- }
-
- return rows;
-}
-
-int
-cmyth_mysql_insert_into_record(cmyth_database_t db, char * query, char * query1, char * query2, char *title, char * subtitle, char * description, char * callsign)
-{
- int rows=0;
- char *N_title;
- char *N_subtitle;
- char *N_description;
- char *N_callsign;
- char N_query[2570];
-
- if(cmyth_db_check_connection(db) != 0)
- {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: cmyth_db_check_connection failed\n",
- __FUNCTION__);
- fprintf(stderr,"%s: cmyth_db_check_connection failed\n", __FUNCTION__);
- return -1;
- }
-
- N_title = ref_alloc(strlen(title)*2+1);
- mysql_real_escape_string(db->mysql,N_title,title,strlen(title));
- N_subtitle = ref_alloc(strlen(subtitle)*2+1);
- mysql_real_escape_string(db->mysql,N_subtitle,subtitle,strlen(subtitle));
- N_description = ref_alloc(strlen(description)*2+1);
- mysql_real_escape_string(db->mysql,N_description,description,strlen(description));
- N_callsign = ref_alloc(strlen(callsign)*2+1);
- mysql_real_escape_string(db->mysql,N_callsign,callsign,strlen(callsign));
-
- snprintf(N_query,2500,"%s '%s','%s','%s' %s '%s' %s",query,N_title,N_subtitle,N_description,query1,N_callsign,query2);
- ref_release(N_title);
- ref_release(N_subtitle);
- ref_release(N_callsign);
- cmyth_dbg(CMYTH_DBG_ERROR, "mysql query :%s\n",N_query);
-
- if(mysql_real_query(db->mysql,N_query,(unsigned int) strlen(N_query))) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: mysql_query() Failed: %s\n",
- __FUNCTION__, mysql_error(db->mysql));
- return -1;
- }
- rows=(int)mysql_insert_id(db->mysql);
-
- if (rows <=0) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: mysql_query() Failed: %s\n",
- __FUNCTION__, mysql_error(db->mysql));
- }
-
-
- return rows;
-}
-
-int
-cmyth_mysql_get_prev_recorded(cmyth_database_t db, cmyth_program_t **prog)
-{
- MYSQL_RES *res= NULL;
- MYSQL_ROW row;
- int n=0;
- int rows=0;
- const char *query = "SELECT oldrecorded.chanid, UNIX_TIMESTAMP(starttime), UNIX_TIMESTAMP(endtime), title, subtitle, description, category, seriesid, programid, channel.channum, channel.callsign, channel.name, findid, rectype, recstatus, recordid, duplicate FROM oldrecorded LEFT JOIN channel ON oldrecorded.chanid = channel.chanid ORDER BY `starttime` ASC";
- if(cmyth_db_check_connection(db) != 0)
- {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: cmyth_db_check_connection failed\n", __FUNCTION__);
- fprintf(stderr,"%s: cmyth_db_check_connection failed\n", __FUNCTION__);
- return -1;
- }
- if(mysql_query(db->mysql,query)) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: mysql_query() Failed: %s\n",
- __FUNCTION__, mysql_error(db->mysql));
- return -1;
- }
- res = mysql_store_result(db->mysql);
- while((row = mysql_fetch_row(res))) {
- if (rows >= n) {
- n+=10;
- *prog=realloc(*prog,sizeof(**prog)*(n));
- }
- (*prog)[rows].chanid = safe_atoi(row[0]);
- (*prog)[rows].recording=0;
- (*prog)[rows].starttime=(time_t)safe_atol(row[1]);
- (*prog)[rows].endtime= (time_t)safe_atol(row[2]);
- sizeof_strncpy((*prog)[rows].title, row[3]);
- sizeof_strncpy((*prog)[rows].subtitle, row[4]);
- sizeof_strncpy((*prog)[rows].description, row[5]);
- sizeof_strncpy((*prog)[rows].category, row[6]);
- sizeof_strncpy((*prog)[rows].seriesid, row[7]);
- sizeof_strncpy((*prog)[rows].programid, row[8]);
- (*prog)[rows].channum = safe_atoi(row[9]);
- sizeof_strncpy((*prog)[rows].callsign, row[10]);
- sizeof_strncpy((*prog)[rows].name, row[11]);
- //sizeof_strncpy((*prog)[rows].rec_status, row[14]);
- (*prog)[rows].rec_status=safe_atoi(row[14]);
- //fprintf(stderr, "row=%s val=%d\n",row[14],(*prog)[rows].rec_status);
- rows++;
- }
- mysql_free_result(res);
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: rows= %d\n", __FUNCTION__, rows);
- return rows;
-}
-
-int
-cmyth_mysql_get_guide(cmyth_database_t db, cmyth_program_t **prog, time_t starttime, time_t endtime)
-{
- MYSQL_RES *res= NULL;
- MYSQL_ROW row;
- const char *query_str = "SELECT program.chanid,UNIX_TIMESTAMP(program.starttime),UNIX_TIMESTAMP(program.endtime),program.title,program.description,program.subtitle,program.programid,program.seriesid,program.category,channel.channum,channel.callsign,channel.name,channel.sourceid FROM program INNER JOIN channel ON program.chanid=channel.chanid WHERE ( ( starttime>=? and starttime<? ) OR ( starttime <? and endtime > ?) ) ORDER BY (channel.channum + 0), program.starttime ASC ";
- int rows=0;
- int n=0;
- cmyth_mysql_query_t * query;
- query = cmyth_mysql_query_create(db,query_str);
-
- if(cmyth_mysql_query_param_unixtime(query,starttime) < 0
- || cmyth_mysql_query_param_unixtime(query,endtime) < 0
- || cmyth_mysql_query_param_unixtime(query,starttime) < 0
- || cmyth_mysql_query_param_unixtime(query,starttime) < 0)
- {
- cmyth_dbg(CMYTH_DBG_ERROR,"%s, binding of query parameters failed! Maybe we're out of memory?\n", __FUNCTION__);
- ref_release(query);
- return -1;
- }
- res = cmyth_mysql_query_result(query);
- ref_release(query);
- if(res == NULL)
- {
- cmyth_dbg(CMYTH_DBG_ERROR,"%s, finalisation/execution of query failed!\n", __FUNCTION__);
- return -1;
- }
-
-
- while((row = mysql_fetch_row(res))) {
- if (rows >= n) {
- n+=10;
- *prog=ref_realloc(*prog,sizeof(**prog)*(n));
- }
- (*prog)[rows].chanid = safe_atoi(row[0]);
- (*prog)[rows].recording=0;
- (*prog)[rows].starttime= (time_t)safe_atol(row[1]);
- (*prog)[rows].endtime= (time_t)safe_atol(row[2]);
- sizeof_strncpy((*prog)[rows].title, row[3]);
- sizeof_strncpy((*prog)[rows].description, row[4]);
- sizeof_strncpy((*prog)[rows].subtitle, row[5]);
- sizeof_strncpy((*prog)[rows].programid, row[6]);
- sizeof_strncpy((*prog)[rows].seriesid, row[7]);
- sizeof_strncpy((*prog)[rows].category, row[8]);
- (*prog)[rows].channum = safe_atoi(row[9]);
- sizeof_strncpy((*prog)[rows].callsign, row[10]);
- sizeof_strncpy((*prog)[rows].name, row[11]);
- (*prog)[rows].sourceid = safe_atoi(row[12]);
- (*prog)[rows].startoffset=0;
- (*prog)[rows].endoffset=0;
- rows++;
- }
- mysql_free_result(res);
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: rows= %d\n", __FUNCTION__, rows);
- return rows;
-}
-
-int
-cmyth_mysql_get_recgroups(cmyth_database_t db, cmyth_recgroups_t **sqlrecgroups)
-{
- MYSQL_RES *res=NULL;
- MYSQL_ROW row;
- const char *query="SELECT DISTINCT recgroup FROM record";
- int rows=0;
- int n=0;
-
- if(cmyth_db_check_connection(db) != 0)
- {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: cmyth_db_check_connection failed\n",
- __FUNCTION__);
- fprintf(stderr,"%s: cmyth_db_check_connection failed\n", __FUNCTION__);
- return -1;
- }
-
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: query= %s\n", __FUNCTION__, query);
- if(mysql_query(db->mysql,query)) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: mysql_query() Failed: %s\n",
- __FUNCTION__, mysql_error(db->mysql));
- return -1;
- }
- res = mysql_store_result(db->mysql);
- while((row = mysql_fetch_row(res))) {
- if (rows == n ) {
- n++;
- *sqlrecgroups=realloc(*sqlrecgroups,sizeof(**sqlrecgroups)*(n));
- }
- sizeof_strncpy ( (*sqlrecgroups)[rows].recgroups, row[0]);
- cmyth_dbg(CMYTH_DBG_ERROR, "(*sqlrecgroups)[%d].recgroups = %s\n",rows, (*sqlrecgroups)[rows].recgroups);
- rows++;
- }
- mysql_free_result(res);
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: rows= %d\n", __FUNCTION__, rows);
- return rows;
-}
-
-
-int
-cmyth_mysql_get_prog_finder_char_title(cmyth_database_t db, cmyth_program_t **prog, time_t starttime, char *program_name)
-{
- MYSQL_RES *res=NULL;
- MYSQL_ROW row;
- char query[350];
- int rows=0;
- int n = 50;
-
- if(cmyth_db_check_connection(db) != 0)
- {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: cmyth_db_check_connection failed\n",
- __FUNCTION__);
- fprintf(stderr,"%s: cmyth_db_check_connection failed\n", __FUNCTION__);
- return -1;
- }
-
- if (strncmp(program_name, "@", 1)==0)
- snprintf(query, 350, "SELECT DISTINCT title FROM program " \
- "WHERE ( title NOT REGEXP '^[A-Z0-9]' AND " \
- "title NOT REGEXP '^The [A-Z0-9]' AND " \
- "title NOT REGEXP '^A [A-Z0-9]' AND " \
- "starttime >= FROM_UNIXTIME(%d)) ORDER BY title", \
- (int)starttime);
- else
- snprintf(query, 350, "SELECT DISTINCT title FROM program " \
- "where starttime >= FROM_UNIXTIME(%d) and " \
- "title like '%s%%' ORDER BY `title` ASC",
- (int)starttime, program_name);
-
- fprintf(stderr, "%s\n", query);
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: query= %s\n", __FUNCTION__, query);
- if(mysql_query(db->mysql,query)) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: mysql_query() Failed: %s\n",
- __FUNCTION__, mysql_error(db->mysql));
- return -1;
- }
- res = mysql_store_result(db->mysql);
- while((row = mysql_fetch_row(res))) {
- if (rows == n) {
- n++;
- *prog=realloc(*prog,sizeof(**prog)*(n));
- }
- sizeof_strncpy ( (*prog)[rows].title, row[0]);
- cmyth_dbg(CMYTH_DBG_ERROR, "prog[%d].title = %s\n",rows, (*prog)[rows].title);
- rows++;
- }
- mysql_free_result(res);
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: rows= %d\n", __FUNCTION__, rows);
- return rows;
-}
-
-int
-cmyth_mysql_get_prog_finder_time(cmyth_database_t db, cmyth_program_t **prog, time_t starttime, char *program_name)
-{
- MYSQL_RES *res=NULL;
- MYSQL_ROW row;
- char query[630];
- char *N_title;
- int rows=0;
- int n = 50;
- int ch;
-
-
- if(cmyth_db_check_connection(db) != 0)
- {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: cmyth_db_check_connection failed\n",
- __FUNCTION__);
- fprintf(stderr,"%s: cmyth_db_check_connection failed\n", __FUNCTION__);
- return -1;
- }
-
- N_title = ref_alloc(strlen(program_name)*2+1);
- mysql_real_escape_string(db->mysql,N_title,program_name,strlen(program_name));
-
- //sprintf(query, "SELECT chanid,starttime,endtime,title,description,subtitle,programid,seriesid,category FROM program WHERE starttime >= '%s' and title ='%s' ORDER BY `starttime` ASC ", starttime, N_title);
- snprintf(query, 630, "SELECT program.chanid,UNIX_TIMESTAMP(program.starttime),UNIX_TIMESTAMP(program.endtime),program.title,program.description,program.subtitle,program.programid,program.seriesid,program.category, channel.channum, channel.callsign, channel.name, channel.sourceid FROM program LEFT JOIN channel on program.chanid=channel.chanid WHERE starttime >= FROM_UNIXTIME(%d) and title ='%s' ORDER BY `starttime` ASC ", (int)starttime, N_title);
- ref_release(N_title);
- fprintf(stderr, "%s\n", query);
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: query= %s\n", __FUNCTION__, query);
- if(mysql_query(db->mysql,query)) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: mysql_query() Failed: %s\n",
- __FUNCTION__, mysql_error(db->mysql));
- return -1;
- }
- cmyth_dbg(CMYTH_DBG_ERROR, "n = %d\n",n);
- res = mysql_store_result(db->mysql);
- cmyth_dbg(CMYTH_DBG_ERROR, "n = %d\n",n);
- while((row = mysql_fetch_row(res))) {
- cmyth_dbg(CMYTH_DBG_ERROR, "n = %d\n",n);
- if (rows == n) {
- n++;
- cmyth_dbg(CMYTH_DBG_ERROR, "realloc n = %d\n",n);
- *prog=realloc(*prog,sizeof(**prog)*(n));
- }
- cmyth_dbg(CMYTH_DBG_ERROR, "rows = %d\nrow[0]=%d\n",rows, row[0]);
- cmyth_dbg(CMYTH_DBG_ERROR, "row[1]=%d\n",row[1]);
- ch = atoi(row[0]);
- (*prog)[rows].chanid=ch;
- cmyth_dbg(CMYTH_DBG_ERROR, "prog[%d].chanid = %d\n",rows, (*prog)[rows].chanid);
- (*prog)[rows].recording=0;
- (*prog)[rows].starttime = atoi(row[1]);
- (*prog)[rows].endtime = atoi(row[2]);
- sizeof_strncpy ((*prog)[rows].title, row[3]);
- sizeof_strncpy ((*prog)[rows].description, row[4]);
- sizeof_strncpy ((*prog)[rows].subtitle, row[5]);
- sizeof_strncpy ((*prog)[rows].programid, row[6]);
- sizeof_strncpy ((*prog)[rows].seriesid, row[7]);
- sizeof_strncpy ((*prog)[rows].category, row[8]);
- (*prog)[rows].channum = atoi (row[9]);
- sizeof_strncpy ((*prog)[rows].callsign,row[10]);
- sizeof_strncpy ((*prog)[rows].name,row[11]);
- (*prog)[rows].sourceid = atoi (row[12]);
- cmyth_dbg(CMYTH_DBG_ERROR, "prog[%d].chanid = %d\n",rows, (*prog)[rows].chanid);
- cmyth_dbg(CMYTH_DBG_ERROR, "prog[%d].title = %s\n",rows, (*prog)[rows].title);
- rows++;
- }
- mysql_free_result(res);
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: rows= %d\n", __FUNCTION__, rows);
- return rows;
-}
-
-int
-fill_program_recording_status(cmyth_conn_t conn, char * msg)
-{
- int err=0;
- fprintf (stderr, "In function : %s\n",__FUNCTION__);
- if (!conn) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: no connection\n", __FUNCTION__);
- return -1;
- }
- if ((err = cmyth_send_message(conn, msg)) < 0) {
- cmyth_dbg(CMYTH_DBG_ERROR,
- "%s: cmyth_send_message() failed (%d)\n",__FUNCTION__,err);
- return err;
- }
- return err;
-}
-int
-cmyth_update_bookmark_setting(cmyth_database_t db, cmyth_proginfo_t prog)
-{
- MYSQL_RES *res = NULL;
- const char *query_str = "UPDATE recorded SET bookmark = 1 WHERE chanid = ? AND starttime = ?";
- cmyth_mysql_query_t * query;
- char starttime[CMYTH_TIMESTAMP_LEN + 1];
-
- cmyth_timestamp_to_string(starttime, prog->proginfo_rec_start_ts);
- query = cmyth_mysql_query_create(db,query_str);
- if (cmyth_mysql_query_param_long(query, prog->proginfo_chanId) < 0
- || cmyth_mysql_query_param_str(query, starttime) < 0 ) {
- cmyth_dbg(CMYTH_DBG_ERROR,"%s, binding of query parameters failed! Maybe we're out of memory?\n", __FUNCTION__);
- ref_release(query);
- return -1;
- }
- res = cmyth_mysql_query_result(query);
- ref_release(query);
- if (res == NULL) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s, finalisation/execution of query failed!\n", __FUNCTION__);
- return -1;
- }
- mysql_free_result(res);
- return (1);
-}
-
-long long
-cmyth_get_bookmark_mark(cmyth_database_t db, cmyth_proginfo_t prog, long long bk, int mode)
-{
- MYSQL_RES *res = NULL;
- MYSQL_ROW row;
- const char *query_str = "SELECT mark, type FROM recordedseek WHERE chanid = ? AND offset < ? AND (type = 6 or type = 9 ) AND starttime = ? ORDER by MARK DESC LIMIT 0, 1;";
- int rows = 0;
- long long mark=0;
- int rectype = 0;
- char start_ts_dt[CMYTH_TIMESTAMP_LEN + 1];
- cmyth_mysql_query_t * query;
- cmyth_timestamp_to_string(start_ts_dt, prog->proginfo_rec_start_ts);
- query = cmyth_mysql_query_create(db,query_str);
-
- if (cmyth_mysql_query_param_long(query, prog->proginfo_chanId) < 0
- || cmyth_mysql_query_param_long(query, bk) < 0
- || cmyth_mysql_query_param_str(query, start_ts_dt) < 0
- ) {
- cmyth_dbg(CMYTH_DBG_ERROR,"%s, binding of query parameters failed! Maybe we're out of memory?\n", __FUNCTION__);
- ref_release(query);
- return -1;
- }
- res = cmyth_mysql_query_result(query);
- ref_release(query);
- if (res == NULL) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s, finalisation/execution of query failed!\n", __FUNCTION__);
- return -1;
- }
- while ((row = mysql_fetch_row(res))) {
- mark = safe_atoi(row[0]);
- rectype = safe_atoi(row[1]);
- rows++;
- }
- mysql_free_result(res);
-
- if (rectype == 6) {
- if (mode == 0) {
- mark=(mark-1)*15;
- }
- else if (mode == 1) {
- mark=(mark-1)*12;
- }
- }
-
- return mark;
-}
-
-int
-cmyth_get_bookmark_offset(cmyth_database_t db, long chanid, long long mark, char *starttime, int mode)
-{
- MYSQL_RES *res = NULL;
- MYSQL_ROW row;
- int offset=0;
- int rows = 0;
- int rectype = 0;
- cmyth_mysql_query_t * query;
-
- const char *query_str = "SELECT * FROM recordedseek WHERE chanid = ? AND mark<= ? AND starttime = ? ORDER BY MARK DESC LIMIT 1;";
-
- query = cmyth_mysql_query_create(db,query_str);
- if (cmyth_mysql_query_param_long(query, chanid) < 0
- || cmyth_mysql_query_param_long(query, mark) < 0
- || cmyth_mysql_query_param_str(query, starttime) < 0
- ) {
- cmyth_dbg(CMYTH_DBG_ERROR,"%s, binding of query parameters failed! Maybe we're out of memory?\n", __FUNCTION__);
- ref_release(query);
- return -1;
- }
- res = cmyth_mysql_query_result(query);
- ref_release(query);
- if (res == NULL) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s, finalisation/execution of query failed!\n", __FUNCTION__);
- return -1;
- }
- while ((row = mysql_fetch_row(res))) {
- offset = safe_atoi(row[3]);
- rectype = safe_atoi(row[4]);
- rows++;
- }
- if (rectype != 9) {
- if (mode == 0) {
- mark=(mark/15)+1;
- }
- else if (mode == 1) {
- mark=(mark/12)+1;
- }
- query = cmyth_mysql_query_create(db, query_str);
- if (cmyth_mysql_query_param_long(query, chanid) < 0
- || cmyth_mysql_query_param_long(query, mark) < 0
- || cmyth_mysql_query_param_str(query, starttime) < 0
- ) {
- cmyth_dbg(CMYTH_DBG_ERROR,"%s, binding of query parameters failed! Maybe we're out of memory?\n", __FUNCTION__);
- ref_release(query);
- return -1;
- }
- res = cmyth_mysql_query_result(query);
- ref_release(query);
- if (res == NULL) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s, finalisation/execution of query failed!\n", __FUNCTION__);
- return -1;
- }
- while ((row = mysql_fetch_row(res))) {
- offset = safe_atoi(row[3]);
- rows++;
- }
- }
- mysql_free_result(res);
- return offset;
-}
-
-int
-cmyth_mysql_query_commbreak_count(cmyth_database_t db, int chanid, char * start_ts_dt) {
- MYSQL_RES *res = NULL;
- int count = 0;
- char * query_str;
- cmyth_mysql_query_t * query;
- query_str = "SELECT * FROM recordedmarkup WHERE chanid = ? AND starttime = ? AND TYPE IN ( 4 )";
-
- query = cmyth_mysql_query_create(db,query_str);
- if ((cmyth_mysql_query_param_int(query, chanid) < 0
- || cmyth_mysql_query_param_str(query, start_ts_dt) < 0
- )) {
- cmyth_dbg(CMYTH_DBG_ERROR,"%s, binding of query parameters failed! Maybe we're out of memory?\n", __FUNCTION__);
- ref_release(query);
- return -1;
- }
- res = cmyth_mysql_query_result(query);
- ref_release(query);
- if (res == NULL) {
- cmyth_dbg(CMYTH_DBG_ERROR,"%s, finalisation/execution of query failed!\n", __FUNCTION__);
- return -1;
- }
- count = (int)mysql_num_rows(res);
- mysql_free_result(res);
- return (count);
-}
-
-int
-cmyth_mysql_get_commbreak_list(cmyth_database_t db, int chanid, char * start_ts_dt, cmyth_commbreaklist_t breaklist, int conn_version)
-{
- MYSQL_RES *res = NULL;
- MYSQL_ROW row;
- int resolution = 30;
- char * query_str;
- int rows = 0;
- int i;
- cmyth_mysql_query_t * query;
- cmyth_commbreak_t commbreak = NULL;
- long long start_previous = 0;
- long long end_previous = 0;
-
- if (conn_version >= 43) {
- query_str = "SELECT m.type,m.mark,s.mark,s.offset FROM recordedmarkup m INNER JOIN recordedseek AS s ON m.chanid = s.chanid AND m.starttime = s.starttime WHERE m.chanid = ? AND m.starttime = ? AND m.type in (?,?) and FLOOR(m.mark/?)=FLOOR(s.mark/?) ORDER BY `m`.`mark` LIMIT 300 ";
- }
- else {
- query_str = "SELECT m.type AS type, m.mark AS mark, s.offset AS offset FROM recordedmarkup m INNER JOIN recordedseek AS s ON (m.chanid = s.chanid AND m.starttime = s.starttime AND (FLOOR(m.mark / 15) + 1) = s.mark) WHERE m.chanid = ? AND m.starttime = ? AND m.type IN (?, ?) ORDER BY mark;";
- }
-
- cmyth_dbg(CMYTH_DBG_ERROR,"%s, query=%s\n", __FUNCTION__,query_str);
-
- query = cmyth_mysql_query_create(db,query_str);
-
- if ((conn_version >= 43) && (
- cmyth_mysql_query_param_int(query, chanid) < 0
- || cmyth_mysql_query_param_str(query, start_ts_dt) < 0
- || cmyth_mysql_query_param_int(query, CMYTH_COMMBREAK_START) < 0
- || cmyth_mysql_query_param_int(query, CMYTH_COMMBREAK_END) < 0
- || cmyth_mysql_query_param_int(query, resolution) < 0
- || cmyth_mysql_query_param_int(query, resolution) < 0
- )) {
- cmyth_dbg(CMYTH_DBG_ERROR,"%s, binding of query parameters failed! Maybe we're out of memory?\n", __FUNCTION__);
- ref_release(query);
- return -1;
- }
-
- if ((conn_version < 43) && (
- cmyth_mysql_query_param_int(query, chanid) < 0
- || cmyth_mysql_query_param_str(query, start_ts_dt) < 0
- || cmyth_mysql_query_param_int(query, CMYTH_COMMBREAK_START) < 0
- || cmyth_mysql_query_param_int(query, CMYTH_COMMBREAK_END) < 0
- )) {
- cmyth_dbg(CMYTH_DBG_ERROR,"%s, binding of query parameters failed! Maybe we're out of memory?\n", __FUNCTION__);
- ref_release(query);
- return -1;
- }
- res = cmyth_mysql_query_result(query);
- ref_release(query);
- if (res == NULL) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s, finalisation/execution of query failed!\n", __FUNCTION__);
- return -1;
- }
-
- if (conn_version >= 43) {
- breaklist->commbreak_count = cmyth_mysql_query_commbreak_count(db,chanid,start_ts_dt);
- }
- else {
- breaklist->commbreak_count = (long)mysql_num_rows(res) / 2;
- }
- breaklist->commbreak_list = malloc(breaklist->commbreak_count * sizeof(cmyth_commbreak_t));
-
- if (!breaklist->commbreak_list) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: malloc() failed for list\n",
- __FUNCTION__);
- return -1;
- }
- memset(breaklist->commbreak_list, 0, breaklist->commbreak_count * sizeof(cmyth_commbreak_t));
-
- i = 0;
- if (conn_version >= 43) {
- while ((row = mysql_fetch_row(res))) {
- if (safe_atoi(row[0]) == CMYTH_COMMBREAK_START) {
- if (safe_atoll(row[1]) != start_previous) {
- commbreak = cmyth_commbreak_create();
- commbreak->start_mark = safe_atoll(row[1]);
- commbreak->start_offset = safe_atoll(row[3]);
- start_previous = commbreak->start_mark;
- }
- else if (safe_atoll(row[1]) == safe_atoll(row[2])) {
- commbreak = cmyth_commbreak_create();
- commbreak->start_mark = safe_atoll(row[1]);
- commbreak->start_offset = safe_atoll(row[3]);
- }
- } else if (safe_atoi(row[0]) == CMYTH_COMMBREAK_END) {
- if (safe_atoll(row[1]) != end_previous) {
- commbreak->end_mark = safe_atoll(row[1]);
- commbreak->end_offset = safe_atoll(row[3]);
- breaklist->commbreak_list[rows] = commbreak;
- end_previous = commbreak->end_mark;
- rows++;
- }
- else if (safe_atoll(row[1]) == safe_atoll(row[2])) {
- commbreak->end_mark = safe_atoll(row[1]);
- commbreak->end_offset = safe_atoll(row[3]);
- breaklist->commbreak_list[rows] = commbreak;
- if (end_previous != safe_atoll(row[1])) {
- rows++;
- }
- }
- }
- else {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: Unknown COMMBREAK returned\n",
- __FUNCTION__);
- return -1;
- }
- i++;
- }
- }
-
- // mythtv protolcol version < 43
- else {
- while ((row = mysql_fetch_row(res))) {
- if ((i % 2) == 0) {
- if (safe_atoi(row[0]) != CMYTH_COMMBREAK_START) {
- return -1;
- }
- commbreak = cmyth_commbreak_create();
- commbreak->start_mark = safe_atoll(row[1]);
- commbreak->start_offset = safe_atoll(row[2]);
- i++;
- } else {
- if (safe_atoi(row[0]) != CMYTH_COMMBREAK_END) {
- return -1;
- }
- commbreak->end_mark = safe_atoll(row[1]);
- commbreak->end_offset = safe_atoll(row[2]);
- breaklist->commbreak_list[rows] = commbreak;
- i = 0;
- rows++;
- }
- }
- }
- mysql_free_result(res);
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: COMMBREAK rows= %d\n", __FUNCTION__, rows);
- return rows;
-}
-
-int
-cmyth_tuner_type_check(cmyth_database_t db, cmyth_recorder_t rec, int check_tuner_type) {
- MYSQL_RES *res=NULL;
- MYSQL_ROW row;
- const char * query_str = "SELECT cardtype from capturecard WHERE cardid=?";
- cmyth_mysql_query_t * query;
-
- if ( check_tuner_type == 0 ) {
- cmyth_dbg(CMYTH_DBG_ERROR,"MythTV Tuner check not enabled in Mythtv Options\n");
- return (1);
- }
-
-
- query = cmyth_mysql_query_create(db,query_str);
- if (cmyth_mysql_query_param_uint(query,rec->rec_id) < 0) {
- cmyth_dbg(CMYTH_DBG_ERROR,"%s, binding of query failed\n",__FUNCTION__);
- ref_release(query);
- return -1;
- }
- res = cmyth_mysql_query_result(query);
-
- if(res == NULL) {
- cmyth_dbg(CMYTH_DBG_ERROR,"%s, finalisation/execution\n",__FUNCTION__);
- return -1;
- }
- row = mysql_fetch_row(res);
- ref_release(query);
- mysql_free_result(res);
- if (strcmp(row[0],"MPEG") == 0) {
- return (1); //return the first available MPEG tuner
- }
- else if (strcmp(row[0],"HDHOMERUN") == 0) {
- return (1); //return the first available MPEG2TS tuner
- }
- else if (strcmp(row[0],"DVB") == 0) {
- return (1); //return the first available DVB tuner
- }
- else {
- return (0);
- }
-}
-
-int
-cmyth_mythtv_remove_previous_recorded(cmyth_database_t db,char *query)
-{
- MYSQL_RES *res=NULL;
- char N_query[128];
- int rows;
-
- if(cmyth_db_check_connection(db) != 0)
- {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: cmyth_db_check_connection failed\n",
- __FUNCTION__);
- fprintf(stderr,"%s: cmyth_db_check_connection failed\n", __FUNCTION__);
- return -1;
- }
-
- mysql_real_escape_string(db->mysql,N_query,query,strlen(query));
-
- if(mysql_query(db->mysql,query)) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: mysql_query() Failed: %s\n",
- __FUNCTION__, mysql_error(db->mysql));
- return -1;
- }
- res = mysql_store_result(db->mysql);
- rows=(int)mysql_insert_id(db->mysql);
- if (rows <=0) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: mysql_query() Failed: %s\n",
- __FUNCTION__, mysql_error(db->mysql));
- }
- mysql_free_result(res);
-
- return rows;
-}
-
-int
-cmyth_mysql_testdb_connection(cmyth_database_t db,char **message) {
- char *buf=malloc(sizeof(char)*1001);
- int new_conn = 0;
- if (db->mysql != NULL) {
- if (mysql_stat(db->mysql) == NULL) {
- cmyth_database_close(db);
- return -1;
- }
- }
- if (db->mysql == NULL) {
- db->mysql = mysql_init(NULL);
- new_conn = 1;
- if(db->mysql == NULL) {
- fprintf(stderr,"%s: mysql_init() failed, insufficient memory?", __FUNCTION__);
- snprintf(buf, 1000, "mysql_init() failed, insufficient memory?");
- *message=buf;
- return -1;
- }
- if (NULL == mysql_real_connect(db->mysql, db->db_host,db->db_user,db->db_pass,db->db_name,0,NULL,0)) {
- fprintf(stderr,"%s: mysql_connect() failed: %s\n", __FUNCTION__,
- mysql_error(db->mysql));
- snprintf(buf, 1000, "%s",mysql_error(db->mysql));
- fprintf (stderr,"buf = %s\n",buf);
- *message=buf;
- cmyth_database_close(db);
- return -1;
- }
- }
- snprintf(buf, 1000, "All Test Successful\n");
- *message=buf;
- return 1;
-}
-
-static void
-cmyth_chanlist_destroy(cmyth_chanlist_t pl)
-{
- int i;
-
- cmyth_dbg(CMYTH_DBG_DEBUG, "%s\n", __FUNCTION__);
- if (!pl) {
- return;
- }
- for (i = 0; i < pl->chanlist_count; ++i) {
- if (pl->chanlist_list[i]) {
- ref_release(pl->chanlist_list[i]);
- }
- pl->chanlist_list[i] = NULL;
- }
- if (pl->chanlist_list) {
- free(pl->chanlist_list);
- }
-}
-
-cmyth_chanlist_t
-cmyth_chanlist_create(void)
-{
- cmyth_chanlist_t ret;
-
- cmyth_dbg(CMYTH_DBG_DEBUG, "%s\n", __FUNCTION__);
- ret = ref_alloc(sizeof(*ret));
- if (!ret) {
- return(NULL);
- }
- ref_set_destroy(ret, (ref_destroy_t)cmyth_chanlist_destroy);
-
- ret->chanlist_list = NULL;
- ret->chanlist_count = 0;
- return ret;
-}
-
-cmyth_channel_t
-cmyth_chanlist_get_item(cmyth_chanlist_t pl, int index)
-{
- if (!pl) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: NULL program list\n",
- __FUNCTION__);
- return NULL;
- }
- if (!pl->chanlist_list) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: NULL list\n",
- __FUNCTION__);
- return NULL;
- }
- if ((index < 0) || (index >= pl->chanlist_count)) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: index %d out of range\n",
- __FUNCTION__, index);
- return NULL;
- }
- ref_hold(pl->chanlist_list[index]);
- return pl->chanlist_list[index];
-}
-
-int
-cmyth_chanlist_get_count(cmyth_chanlist_t pl)
-{
- if (!pl) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: NULL program list\n",
- __FUNCTION__);
- return -EINVAL;
- }
- return pl->chanlist_count;
-}
-
-static void
-cmyth_channel_destroy(cmyth_channel_t pl)
-{
-
- cmyth_dbg(CMYTH_DBG_DEBUG, "%s\n", __FUNCTION__);
- if (!pl) {
- return;
- }
-
- if(pl->name)
- ref_release(pl->name);
- if(pl->callsign)
- ref_release(pl->callsign);
- if(pl->icon)
- ref_release(pl->callsign);
-}
-
-long
-cmyth_channel_chanid(cmyth_channel_t channel)
-{
- if (!channel) {
- return -EINVAL;
- }
- return channel->chanid;
-}
-
-long
-cmyth_channel_channum(cmyth_channel_t channel)
-{
- if (!channel) {
- return -EINVAL;
- }
- return channel->channum;
-}
-
-char *
-cmyth_channel_name(cmyth_channel_t channel)
-{
- if (!channel) {
- return NULL;
- }
- return ref_hold(channel->name);
-}
-
-char *
-cmyth_channel_icon(cmyth_channel_t channel)
-{
- if (!channel) {
- return NULL;
- }
- return ref_hold(channel->icon);
-}
-
-int
-cmyth_channel_visible(cmyth_channel_t channel)
-{
- if (!channel) {
- return -EINVAL;
- }
- return channel->visible;
-}
-
-cmyth_channel_t
-cmyth_channel_create(void)
-{
- cmyth_channel_t ret = ref_alloc(sizeof(*ret));
- memset(ret, 0, sizeof(*ret));
-
- cmyth_dbg(CMYTH_DBG_DEBUG, "%s {\n", __FUNCTION__);
- if (!ret) {
- cmyth_dbg(CMYTH_DBG_DEBUG, "%s }!\n", __FUNCTION__);
- return NULL;
- }
- ref_set_destroy(ret, (ref_destroy_t)cmyth_channel_destroy);
-
- return ret;
-}
-
-
-cmyth_chanlist_t cmyth_mysql_get_chanlist(cmyth_database_t db)
-{
- MYSQL_RES *res = NULL;
- MYSQL_ROW row;
- const char *query_str = "SELECT chanid, channum, name, icon, visible FROM channel;";
- int rows = 0;
- int i;
- cmyth_mysql_query_t * query;
- cmyth_channel_t channel;
- cmyth_chanlist_t chanlist;
- query = cmyth_mysql_query_create(db,query_str);
-
- res = cmyth_mysql_query_result(query);
- ref_release(query);
- if (res == NULL) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s, finalisation/execution of query failed!\n", __FUNCTION__);
- return NULL;
- }
-
- chanlist = cmyth_chanlist_create();
-
- chanlist->chanlist_count = (int)mysql_num_rows(res);
- chanlist->chanlist_list = malloc(chanlist->chanlist_count * sizeof(cmyth_chanlist_t));
- if (!chanlist->chanlist_list) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: malloc() failed for list\n",
- __FUNCTION__);
- ref_release(chanlist);
- return NULL;
- }
- memset(chanlist->chanlist_list, 0, chanlist->chanlist_count * sizeof(cmyth_chanlist_t));
-
- i = 0;
- while ((row = mysql_fetch_row(res))) {
- channel = cmyth_channel_create();
- channel->chanid = safe_atol(row[0]);
- channel->channum = safe_atoi(row[1]);
- channel->name = ref_strdup(row[2]);
- channel->icon = ref_strdup(row[3]);
- channel->visible = safe_atoi(row[4]);
- chanlist->chanlist_list[rows] = channel;
- i = 0;
- rows++;
- }
-
- mysql_free_result(res);
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: rows= %d\n", __FUNCTION__, rows);
- return chanlist;
-}
-
-
-int cmyth_livetv_keep_recording(cmyth_recorder_t rec, cmyth_database_t db, int keep)
-{
- cmyth_proginfo_t prog;
- int autoexpire;
- const char* recgroup;
- cmyth_mysql_query_t * query;
- char timestamp[CMYTH_TIMESTAMP_LEN+1];
-
- if(cmyth_db_check_connection(db) != 0)
- {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: cmyth_db_check_connection failed\n", __FUNCTION__);
- return -1;
- }
-
- prog = cmyth_recorder_get_cur_proginfo(rec);
- if(!prog) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: cmyth_recorder_get_cur_proginfo failed\n", __FUNCTION__);
- return -1;
- }
-
- if(keep) {
- char* str;
- str = cmyth_conn_get_setting(rec->rec_conn, prog->proginfo_hostname, "AutoExpireDefault");
- if(!str) {
- cmyth_dbg(CMYTH_DBG_ERROR, "%s: failed to get AutoExpireDefault\n", __FUNCTION__);
- ref_release(prog);
- return -1;
- }
- autoexpire = atol(str);
- recgroup = "Default";
- ref_release(str);
- } else {
- autoexpire = 10000;
- recgroup = "LiveTV";
- }
-
-
- sprintf(timestamp,
- "%4.4ld-%2.2ld-%2.2ld %2.2ld:%2.2ld:%2.2ld",
- prog->proginfo_rec_start_ts->timestamp_year,
- prog->proginfo_rec_start_ts->timestamp_month,
- prog->proginfo_rec_start_ts->timestamp_day,
- prog->proginfo_rec_start_ts->timestamp_hour,
- prog->proginfo_rec_start_ts->timestamp_minute,
- prog->proginfo_rec_start_ts->timestamp_second);
-
- query = cmyth_mysql_query_create(db,"UPDATE recorded SET autoexpire = ?, recgroup = ? WHERE chanid = ? AND starttime = ?");
-
- if(cmyth_mysql_query_param_long(query,autoexpire) < 0
- || cmyth_mysql_query_param_str(query,recgroup) < 0
- || cmyth_mysql_query_param_long(query,prog->proginfo_chanId) < 0
- || cmyth_mysql_query_param_str(query,timestamp) < 0)
- {
- cmyth_dbg(CMYTH_DBG_ERROR,"%s, binding of query parameters failed! Maybe we're out of memory?\n", __FUNCTION__);
- ref_release(query);
- ref_release(prog);
- return -1;
- }
-
- if(cmyth_mysql_query(query) < 0)
- {
- cmyth_dbg(CMYTH_DBG_ERROR,"%s, finalisation/execution of query failed!\n", __FUNCTION__);
- ref_release(query);
- ref_release(prog);
- return -1;
- }
- ref_release(query);
-
- if(rec->rec_conn->conn_version >= 26)
- {
- char msg[256];
- int err;
- snprintf(msg, sizeof(msg), "QUERY_RECORDER %d[]:[]SET_LIVE_RECORDING[]:[]%d",
- rec->rec_id, keep);
-
- if ((err=cmyth_send_message(rec->rec_conn, msg)) < 0) {
- cmyth_dbg(CMYTH_DBG_ERROR,
- "%s: cmyth_send_message() failed (%d)\n",
- __FUNCTION__, err);
- return -1;
- }
-
- if ((err=cmyth_rcv_okay(rec->rec_conn, "ok")) < 0) {
- cmyth_dbg(CMYTH_DBG_ERROR,
- "%s: cmyth_rcv_okay() failed (%d)\n",
- __FUNCTION__, err);
- return -1;
- }
- }
- return 1;
-}
-