mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-04-09 14:33:28 +02:00
2018-07-19 Fred Gleason <fredg@paravelsystems.com>
* Added a 'CAST_DOWNLOADS' table to the database. * Incremented the database version to 294.
This commit is contained in:
parent
94ff45a4dc
commit
c2f11d76be
@ -17194,3 +17194,6 @@
|
||||
to be corrupt.
|
||||
* Fixed a regression in the RDFeed service that caused detection
|
||||
of feed names to fail.
|
||||
2018-07-19 Fred Gleason <fredg@paravelsystems.com>
|
||||
* Added a 'CAST_DOWNLOADS' table to the database.
|
||||
* Incremented the database version to 294.
|
||||
|
@ -26,6 +26,7 @@ EXTRA_DIST = audio_cards.txt\
|
||||
audio_perms.txt\
|
||||
cart.txt\
|
||||
cartslots.txt\
|
||||
cast_downloads.txt\
|
||||
clipboard.txt\
|
||||
clock_lines.txt\
|
||||
clock_perms.txt\
|
||||
|
12
docs/tables/cast_downloads.txt
Normal file
12
docs/tables/cast_downloads.txt
Normal file
@ -0,0 +1,12 @@
|
||||
CAST_DOWNLOADS Table Layout for Rivendell
|
||||
|
||||
The CAST_DOWNLOADS table holds data concerning downloads of podcast episodes.
|
||||
|
||||
|
||||
FIELD NAME TYPE REMARKS
|
||||
------------------------------------------------------------------------------
|
||||
ID int(10) unsigned Primary key, Auto Increment
|
||||
FEED_KEY_NAME char(8) From FEEDS.KEY_NAME
|
||||
CAST_ID int(10) unsigned From PODCASTS.ID
|
||||
ACCESS_DATE date
|
||||
ACCESS_COUNT int(10) unsigned
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* Current Database Version
|
||||
*/
|
||||
#define RD_VERSION_DATABASE 293
|
||||
#define RD_VERSION_DATABASE 294
|
||||
|
||||
|
||||
#endif // DBVERSION_H
|
||||
|
@ -22,45 +22,27 @@
|
||||
|
||||
#include <rdapplication.h>
|
||||
#include <rddb.h>
|
||||
#include <rdescape_string.h>
|
||||
#include <rdweb.h>
|
||||
|
||||
#include "rdfeedlog.h"
|
||||
|
||||
void RDCreateFeedLog(QString keyname)
|
||||
{
|
||||
QString sql;
|
||||
RDSqlQuery *q;
|
||||
|
||||
keyname.replace(" ","_");
|
||||
sql=QString().sprintf("create table if not exists %s_FLG (\
|
||||
ID int unsigned primary key auto_increment,\
|
||||
CAST_ID int unsigned,\
|
||||
ACCESS_DATE date,\
|
||||
ACCESS_COUNT int unsigned default 0,\
|
||||
index CAST_ID_IDX(CAST_ID,ACCESS_DATE))",
|
||||
(const char *)keyname);
|
||||
q=new RDSqlQuery(sql);
|
||||
delete q;
|
||||
}
|
||||
|
||||
|
||||
void RDDeleteFeedLog(QString keyname)
|
||||
{
|
||||
keyname.replace(" ","_");
|
||||
rda->dropTable(keyname+"_FLG");
|
||||
QString sql=QString("delete from CAST_DOWNLOADS where ")+
|
||||
"FEED_KEY_NAME=\""+RDEscapeString(keyname)+"\"";
|
||||
RDSqlQuery::apply(sql);
|
||||
}
|
||||
|
||||
|
||||
void RDDeleteCastCount(QString keyname,unsigned cast_id)
|
||||
{
|
||||
QString sql;
|
||||
RDSqlQuery *q;
|
||||
|
||||
keyname.replace(" ","_");
|
||||
sql=QString().sprintf("delete from %s_FLG where CAST_ID=%u",
|
||||
(const char *)keyname,cast_id);
|
||||
q=new RDSqlQuery(sql);
|
||||
delete q;
|
||||
sql=QString("delete from CAST_DOWNLOADS where ")+
|
||||
"FEED_KEY_NAME=\""+RDEscapeString(keyname)+"\" && "+
|
||||
QString().sprintf("CAST_ID=%u",cast_id);
|
||||
RDSqlQuery::apply(sql);
|
||||
}
|
||||
|
||||
|
||||
@ -88,45 +70,25 @@ void RDIncrementCastCount(QString keyname,unsigned cast_id)
|
||||
{
|
||||
QString sql;
|
||||
RDSqlQuery *q;
|
||||
QDate current_date=QDate::currentDate();
|
||||
QDate now=QDate::currentDate();
|
||||
|
||||
keyname.replace(" ","_");
|
||||
/*
|
||||
FIXME: Table locking kills updates. Why?
|
||||
|
||||
sql=QString().sprintf("lock tables %s_FLG read",(const char *)keyname);
|
||||
q=new RDSqlQuery(sql);
|
||||
delete q;
|
||||
*/
|
||||
sql=QString().sprintf("select ACCESS_COUNT from %s_FLG where \
|
||||
(CAST_ID=%u)&&(ACCESS_DATE=\"%s\")",
|
||||
(const char *)keyname,
|
||||
cast_id,
|
||||
(const char *)current_date.toString("yyyy-MM-dd"));
|
||||
sql=QString("select ACCESS_COUNT from CAST_DOWNLOADS where ")+
|
||||
"FEED_KEY_NAME=\""+RDEscapeString(keyname)+"\" && "+
|
||||
QString().sprintf("(CAST_ID=%u)&&",cast_id)+
|
||||
"(ACCESS_DATE=\""+RDEscapeString(now.toString("yyyy-MM-dd"))+"\")";
|
||||
q=new RDSqlQuery(sql);
|
||||
if(q->first()) {
|
||||
sql=QString().sprintf("update %s_FLG set ACCESS_COUNT=%u where \
|
||||
(CAST_ID=%u)&&(ACCESS_DATE=\"%s\")",
|
||||
(const char *)keyname,
|
||||
q->value(0).toUInt()+1,cast_id,
|
||||
(const char *)current_date.toString("yyyy-MM-dd"));
|
||||
sql=QString("update CAST_DOWNLOADS set ")+
|
||||
QString().sprintf("ACCESS_COUNT=%u where ",q->value(0).toUInt()+1)+
|
||||
QString().sprintf("(CAST_ID=%u)&&",cast_id)+
|
||||
"(ACCESS_DATE=\""+RDEscapeString(now.toString("yyyy-MM-dd"))+"\")";
|
||||
}
|
||||
else {
|
||||
sql=QString().sprintf("insert into %s_FLG set \
|
||||
CAST_ID=%u,\
|
||||
ACCESS_DATE=\"%s\",\
|
||||
ACCESS_COUNT=1",
|
||||
(const char *)keyname,
|
||||
cast_id,
|
||||
(const char *)current_date.toString("yyyy-MM-dd"));
|
||||
sql=QString("insert into CAST_DOWNLOADS set ")+
|
||||
QString().sprintf("CAST_ID=%u,",cast_id)+
|
||||
"ACCESS_DATE=\""+RDEscapeString(now.toString("yyyy-MM-dd"))+"\","+
|
||||
"ACCESS_COUNT=1";
|
||||
}
|
||||
RDSqlQuery::apply(sql);
|
||||
delete q;
|
||||
q=new RDSqlQuery(sql);
|
||||
delete q;
|
||||
|
||||
/*
|
||||
sql="unlock tables";
|
||||
q=new RDSqlQuery(sql);
|
||||
delete q;
|
||||
*/
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// Functions for manipulating RSS feed log tables.
|
||||
//
|
||||
// (C) Copyright 2007,2016 Fred Gleason <fredg@paravelsystems.com>
|
||||
// (C) Copyright 2007,2016-2018 Fred Gleason <fredg@paravelsystems.com>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License version 2 as
|
||||
@ -23,7 +23,6 @@
|
||||
|
||||
#include <qstring.h>
|
||||
|
||||
void RDCreateFeedLog(QString keyname);
|
||||
void RDDeleteFeedLog(QString keyname);
|
||||
void RDDeleteCastCount(QString keyname,unsigned cast_id);
|
||||
void RDDeleteCastCount(unsigned feed_id,unsigned cast_id);
|
||||
|
@ -173,7 +173,6 @@ void AddFeed::okData()
|
||||
"ITEM_XML=\""+RDEscapeString(DEFAULT_ITEM_XML)+"\"";
|
||||
q=new RDSqlQuery(sql);
|
||||
delete q;
|
||||
RDCreateFeedLog(feed_keyname_edit->text());
|
||||
RDCreateAuxFieldsTable(feed_keyname_edit->text(),rda->config());
|
||||
sql=QString("select ID from FEEDS where ")+
|
||||
"KEY_NAME=\""+RDEscapeString(feed_keyname_edit->text())+"\"";
|
||||
|
@ -215,13 +215,12 @@ void PickReportDates::GenerateSubscriptionReport(const QString &keyname,
|
||||
//
|
||||
// Data Rows
|
||||
//
|
||||
QString keyname_esc=keyname;
|
||||
keyname_esc.replace(" ","_");
|
||||
sql=QString("select ")+
|
||||
"ACCESS_DATE,"+ // 00
|
||||
"ACCESS_COUNT,"+ // 01
|
||||
"CAST_ID "+ // 02
|
||||
"from "+keyname_esc+"_FLG where "+
|
||||
"from CAST_DOWNLOADS where "+
|
||||
"FEED_KEY_NAME=\""+RDEscapeString(keyname)+"\" && "+
|
||||
"(ACCESS_DATE>=\""+RDEscapeString(edit_startdate_edit->date().
|
||||
toString("yyyy-MM-dd"))+"\")&&"+
|
||||
"(ACCESS_DATE<=\""+RDEscapeString(edit_enddate_edit->date().
|
||||
@ -288,12 +287,11 @@ void PickReportDates::GenerateEpisodeReport(const QString &keyname,
|
||||
// Data Rows
|
||||
//
|
||||
unsigned total=0;
|
||||
QString keyname_esc=keyname;
|
||||
keyname_esc.replace(" ","_");
|
||||
sql=QString("select ")+
|
||||
"ACCESS_DATE,"+
|
||||
"ACCESS_COUNT "+
|
||||
"from "+keyname_esc+"_FLG where "+
|
||||
"ACCESS_DATE,"+ // 00
|
||||
"ACCESS_COUNT "+ // 01
|
||||
"from CAST_DOWNLOADS where "+
|
||||
"FEED_KEY_NAME=\""+RDEscapeString(keyname)+"\" && "+
|
||||
"(ACCESS_DATE>=\""+RDEscapeString(edit_startdate_edit->date().
|
||||
toString("yyyy-MM-dd"))+"\")&&"+
|
||||
"(ACCESS_DATE<=\""+RDEscapeString(edit_enddate_edit->date().
|
||||
|
@ -38,6 +38,53 @@ bool MainObject::RevertSchema(int cur_schema,int set_schema,QString *err_msg) co
|
||||
//
|
||||
|
||||
|
||||
//
|
||||
// Revert 294
|
||||
//
|
||||
if((cur_schema==294)&&(set_schema<cur_schema)) {
|
||||
sql=QString("select KEY_NAME from FEEDS");
|
||||
q=new RDSqlQuery(sql);
|
||||
while(q->next()) {
|
||||
QString tablename=q->value(0).toString()+"_FLG";
|
||||
tablename.replace(" ","_");
|
||||
sql=QString("create table if not exists `")+tablename+"` ("+
|
||||
"ID int unsigned primary key auto_increment,"+
|
||||
"CAST_ID int unsigned,"+
|
||||
"ACCESS_DATE date,"+
|
||||
"ACCESS_COUNT int unsigned default 0,"+
|
||||
"index CAST_ID_IDX(CAST_ID,ACCESS_DATE))";
|
||||
if(!RDSqlQuery::apply(sql,err_msg)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
sql=QString("select ")+
|
||||
"CAST_ID,"+ // 00
|
||||
"ACCESS_DATE,"+ // 01
|
||||
"ACCESS_COUNT "+ // 02
|
||||
"from CAST_DOWNLOADS where "+
|
||||
"FEED_KEY_NAME=\""+RDEscapeString(q->value(0).toString())+"\" "+
|
||||
"order by CAST_ID,ACCESS_DATE";
|
||||
q1=new RDSqlQuery(sql,false);
|
||||
while(q1->next()) {
|
||||
sql=QString("insert into `")+tablename+"` set "+
|
||||
QString().sprintf("CAST_ID=%u,",q1->value(0).toUInt())+
|
||||
"ACCESS_DATE=\""+
|
||||
RDEscapeString(q1->value(1).toDate().toString("yyyy-MM-dd"))+"\","+
|
||||
QString().sprintf("ACCESS_COUNT=%u",q1->value(2).toUInt());
|
||||
if(!RDSqlQuery::apply(sql,err_msg)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
delete q1;
|
||||
}
|
||||
|
||||
if(!DropTable("CAST_DOWNLOADS",err_msg)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
WriteSchemaVersion(--cur_schema);
|
||||
}
|
||||
|
||||
//
|
||||
// Revert 293
|
||||
//
|
||||
|
@ -132,7 +132,7 @@ void MainObject::InitializeSchemaMap() {
|
||||
global_version_map["2.17"]=268;
|
||||
global_version_map["2.18"]=272;
|
||||
global_version_map["2.19"]=275;
|
||||
global_version_map["2.20"]=293;
|
||||
global_version_map["2.20"]=294;
|
||||
}
|
||||
|
||||
|
||||
|
@ -7797,6 +7797,54 @@ bool MainObject::UpdateSchema(int cur_schema,int set_schema,QString *err_msg) co
|
||||
WriteSchemaVersion(++cur_schema);
|
||||
}
|
||||
|
||||
if((cur_schema<294)&&(set_schema>cur_schema)) {
|
||||
sql=QString("create table if not exists CAST_DOWNLOADS (")+
|
||||
"ID int unsigned not null auto_increment primary key,"+
|
||||
"FEED_KEY_NAME char(8) not null,"+
|
||||
"CAST_ID int unsigned not null,"+
|
||||
"ACCESS_DATE date not null,"+
|
||||
"ACCESS_COUNT int unsigned not null default 0,"+
|
||||
"unique index KEY_NAME_CAST_ID_DATE_IDX(FEED_KEY_NAME,CAST_ID,ACCESS_DATE))"+
|
||||
db_table_create_postfix;
|
||||
if(!RDSqlQuery::apply(sql,err_msg)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
sql=QString("select KEY_NAME from FEEDS");
|
||||
q=new RDSqlQuery(sql,false);
|
||||
while(q->next()) {
|
||||
QString tablename=q->value(0).toString()+"_FLG";
|
||||
tablename.replace(" ","_");
|
||||
sql=QString("select ")+
|
||||
"CAST_ID,"+ // 00
|
||||
"ACCESS_DATE,"+ // 01
|
||||
"ACCESS_COUNT "+ // 02
|
||||
"from `"+tablename+"` "+
|
||||
"order by ACCESS_DATE";
|
||||
q1=new RDSqlQuery(sql,false);
|
||||
while(q1->next()) {
|
||||
sql=QString("insert into CAST_DOWNLOADS set ")+
|
||||
"FEED_KEY_NAME=\""+RDEscapeString(q->value(0).toString())+"\","+
|
||||
QString().sprintf("CAST_ID=%u,",q1->value(0).toUInt())+
|
||||
"ACCESS_DATE=\""+
|
||||
RDEscapeString(q1->value(1).toDate().toString("yyyy-MM-dd"))+"\","+
|
||||
QString().sprintf("ACCESS_COUNT=%u",q1->value(2).toUInt());
|
||||
if(!RDSqlQuery::apply(sql,err_msg)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
delete q1;
|
||||
if(!DropTable(tablename,err_msg)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
delete q;
|
||||
|
||||
|
||||
|
||||
WriteSchemaVersion(++cur_schema);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
|
@ -143,10 +143,9 @@ void MainObject::PurgeCast(unsigned id)
|
||||
delete q1;
|
||||
}
|
||||
else {
|
||||
QString keyname=q->value(2).toString();
|
||||
keyname.replace(" ","_");
|
||||
sql=QString().sprintf("delete from %s_FLG where CAST_ID=%d",
|
||||
(const char *)keyname,id);
|
||||
sql=QString("delete from CAST_DOWNLOADS where ")+
|
||||
"FEED_KEY_NAME=\""+RDEscapeString(q->value(2).toString())+"\" && "+
|
||||
QString().sprintf("CAST_ID=%d",id);
|
||||
q1=new RDSqlQuery(sql);
|
||||
delete q1;
|
||||
|
||||
|
@ -1493,15 +1493,16 @@ void MainObject::ServeSubscriptionReport()
|
||||
line_colors[0]=RD_WEB_LINE_COLOR1;
|
||||
line_colors[1]=RD_WEB_LINE_COLOR2;
|
||||
int current_color=0;
|
||||
QString keyname_esc=cast_key_name;
|
||||
keyname_esc.replace(" ","_");
|
||||
sql=QString().sprintf("select ACCESS_DATE,ACCESS_COUNT,CAST_ID from %s_FLG \
|
||||
where (ACCESS_DATE>=\"%s\")&&\
|
||||
(ACCESS_DATE<=\"%s\") \
|
||||
order by ACCESS_DATE,CAST_ID desc",
|
||||
(const char *)keyname_esc,
|
||||
(const char *)cast_start_date.toString("yyyy-MM-dd"),
|
||||
(const char *)cast_end_date.toString("yyyy-MM-dd"));
|
||||
sql=QString("select ")+
|
||||
"ACCESS_DATE,"+ // 00
|
||||
"ACCESS_COUNT,"+ // 01
|
||||
"CAST_ID "+ // 02
|
||||
"from CAST_DOWNLOADS where "+
|
||||
"(ACCESS_DATE>=\""+
|
||||
RDEscapeString(cast_start_date.toString("yyyy-MM-dd"))+"\")&&"+
|
||||
"(ACCESS_DATE<=\""+
|
||||
RDEscapeString(cast_end_date.toString("yyyy-MM-dd"))+"\" "+
|
||||
"order by ACCESS_DATE,CAST_ID desc";
|
||||
q=new RDSqlQuery(sql);
|
||||
while(q->next()) {
|
||||
if(q->value(2).toUInt()==0) {
|
||||
@ -1660,16 +1661,17 @@ void MainObject::ServeEpisodeReport()
|
||||
line_colors[0]=RD_WEB_LINE_COLOR1;
|
||||
line_colors[1]=RD_WEB_LINE_COLOR2;
|
||||
int current_color=0;
|
||||
QString keyname_esc=cast_key_name;
|
||||
keyname_esc.replace(" ","_");
|
||||
sql=QString().sprintf("select ACCESS_DATE,ACCESS_COUNT from %s_FLG \
|
||||
where (ACCESS_DATE>=\"%s\")&&\
|
||||
(ACCESS_DATE<=\"%s\")&& \
|
||||
(CAST_ID=%d) order by ACCESS_DATE",
|
||||
(const char *)keyname_esc,
|
||||
(const char *)cast_start_date.toString("yyyy-MM-dd"),
|
||||
(const char *)cast_end_date.toString("yyyy-MM-dd"),
|
||||
cast_cast_id);
|
||||
sql=QString("select ")+
|
||||
"ACCESS_DATE,"+ // 00
|
||||
"ACCESS_COUNT "+ // 01
|
||||
"from CAST_DOWNLOADS where "+
|
||||
"FEED_KEY_NAME=\""+RDEscapeString(cast_key_name)+"\" && "+
|
||||
"(ACCESS_DATE>=\""+
|
||||
RDEscapeString(cast_start_date.toString("yyyy-MM-dd"))+"\")&&"+
|
||||
"(ACCESS_DATE<=\""+
|
||||
RDEscapeString(cast_end_date.toString("yyyy-MM-dd"))+"\")&&"+
|
||||
QString().sprintf("(CAST_ID=%d) ",cast_cast_id)+
|
||||
"order by ACCESS_DATE";
|
||||
q=new RDSqlQuery(sql);
|
||||
while(q->next()) {
|
||||
printf("<tr><td align=\"center\" bgcolor=\"%s\">%s</td>\n",
|
||||
|
Loading…
x
Reference in New Issue
Block a user