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; query_str = "SELECT * FROM recordedmarkup WHERE chanid = ? AND starttime = ? AND TYPE IN ( 4 )"; cmyth_mysql_query_t * query; 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 = mysql_num_rows(res); mysql_free_result(res); return (count); }
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); }
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=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; }
/* used to set bookmark in mythtv */ 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); }
/* mythtv_mysql.c */ int cmyth_tuner_type_check_deprecated(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_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; cmyth_mysql_query_t * query; cmyth_commbreak_t commbreak = NULL; int i = 0; 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;"; } query = cmyth_mysql_query_create(db,query_str); cmyth_dbg(CMYTH_DBG_ERROR,"%s, query=%s\n", __FUNCTION__,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 = mysql_num_rows(res) / 2; } breaklist->commbreak_list = malloc(breaklist->commbreak_count * sizeof(cmyth_commbreak_t)); //cmyth_dbg(CMYTH_DBG_ERROR, "%s: %ld\n",__FUNCTION__,breaklist->commbreak_count); 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)); 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; }
/* used for getting mythtv bookmarks BLUE button on the remote */ 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 = ?;"; 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]); rectype = safe_atoi(row[4]); rows++; } } mysql_free_result(res); return offset; }