mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-07-31 16:09:35 +02:00
2023-12-01 Fred Gleason <fredg@paravelsystems.com>
* Added support for subclauses in the cart library search filter. Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
parent
8063f40cbe
commit
ce989b725d
@ -24504,3 +24504,5 @@
|
|||||||
event of the appended log.
|
event of the appended log.
|
||||||
2023-12-01 Fred Gleason <fredg@paravelsystems.com>
|
2023-12-01 Fred Gleason <fredg@paravelsystems.com>
|
||||||
* Optimized the handling of cart numbers when searching for carts.
|
* Optimized the handling of cart numbers when searching for carts.
|
||||||
|
2023-12-01 Fred Gleason <fredg@paravelsystems.com>
|
||||||
|
* Added support for subclauses in the cart library search filter.
|
||||||
|
@ -588,13 +588,14 @@ void RDCartFilter::resizeEvent(QResizeEvent *e)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QString RDCartFilter::phraseFilter(const QString &phrase, bool incl_cuts)
|
QString RDCartFilter::phraseFilter(QString phrase, bool incl_cuts)
|
||||||
{
|
{
|
||||||
QString sql="";
|
QString sql="";
|
||||||
QList<unsigned> cart_numbers;
|
QList<unsigned> cart_numbers;
|
||||||
|
QStringList clauses;
|
||||||
bool ok=false;
|
bool ok=false;
|
||||||
|
|
||||||
if(phrase.isEmpty()) {
|
if(phrase.trimmed().isEmpty()) {
|
||||||
sql=" ";
|
sql=" ";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -610,35 +611,46 @@ QString RDCartFilter::phraseFilter(const QString &phrase, bool incl_cuts)
|
|||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
phrase=words.join(" ").trimmed();
|
||||||
|
|
||||||
sql+=" (";
|
//
|
||||||
if(words.size()>0) {
|
// Generate Clauses
|
||||||
QString search=RDEscapeString(words.join(" "));
|
//
|
||||||
sql+=QString("(`CART`.`TITLE` like '%")+search+"%')||"+
|
QString accum;
|
||||||
"(`CART`.`ARTIST` like '%"+search+"%')||"+
|
for(int i=0;i<phrase.size();i++) {
|
||||||
"(`CART`.`CLIENT` like '%"+search+"%')||"+
|
if(phrase.at(i)==QChar('"')) {
|
||||||
"(`CART`.`AGENCY` like '%"+search+"%')||"+
|
if(!accum.trimmed().isEmpty()) {
|
||||||
"(`CART`.`ALBUM` like '%"+search+"%')||"+
|
clauses.push_back(accum.trimmed());
|
||||||
"(`CART`.`LABEL` like '%"+search+"%')||"+
|
}
|
||||||
"(`CART`.`PUBLISHER` like '%"+search+"%')||"+
|
accum="";
|
||||||
"(`CART`.`COMPOSER` like '%"+search+"%')||"+
|
}
|
||||||
"(`CART`.`CONDUCTOR` like '%"+search+"%')||"+
|
else {
|
||||||
"(`CART`.`SONG_ID` like '%"+search+"%')||"+
|
accum+=phrase.at(i);
|
||||||
"(`CART`.`USER_DEFINED` like '%"+search+"%')||";
|
|
||||||
if(incl_cuts) {
|
|
||||||
sql+=QString("(`CUTS`.`ISCI` like '%")+search+"%')||"+
|
|
||||||
"(`CUTS`.`ISRC` like '%"+search+"%')||"+
|
|
||||||
"(`CUTS`.`DESCRIPTION` like '%"+search+"%')||"+
|
|
||||||
"(`CUTS`.`OUTCUE` like '%"+search+"%')||";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(int i=0;i<cart_numbers.size();i++) {
|
if(!accum.isEmpty()) {
|
||||||
sql+=QString::asprintf("(`CART`.`NUMBER`=%u)||",cart_numbers.at(i));
|
clauses.push_back(accum.trimmed());
|
||||||
}
|
}
|
||||||
if(sql.right(2)=="||") {
|
|
||||||
sql=sql.left(sql.length()-2);
|
//
|
||||||
|
// Compose SQL
|
||||||
|
//
|
||||||
|
if((clauses.size()==0)&&(cart_numbers.size()==0)) {
|
||||||
|
sql="";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sql+=" (";
|
||||||
|
for(int i=0;i<clauses.size();i++) {
|
||||||
|
sql+=RDCartFilter::ClauseSql(clauses.at(i),incl_cuts);
|
||||||
|
}
|
||||||
|
for(int i=0;i<cart_numbers.size();i++) {
|
||||||
|
sql+=QString::asprintf("(`CART`.`NUMBER`=%u)||",cart_numbers.at(i));
|
||||||
|
}
|
||||||
|
if(sql.right(2)=="||") {
|
||||||
|
sql=sql.left(sql.length()-2);
|
||||||
|
}
|
||||||
|
sql+=") && ";
|
||||||
}
|
}
|
||||||
sql+=") && ";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return sql;
|
return sql;
|
||||||
@ -773,3 +785,28 @@ void RDCartFilter::UpdateModel()
|
|||||||
emit filterChanged(d_model_filter_sql,d_model_cart_limit);
|
emit filterChanged(d_model_filter_sql,d_model_cart_limit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString RDCartFilter::ClauseSql(const QString &clause,bool incl_cuts)
|
||||||
|
{
|
||||||
|
QString search=RDEscapeString(clause);
|
||||||
|
QString sql=QString("(`CART`.`TITLE` like '%")+search+"%')||"+
|
||||||
|
"(`CART`.`ARTIST` like '%"+search+"%')||"+
|
||||||
|
"(`CART`.`CLIENT` like '%"+search+"%')||"+
|
||||||
|
"(`CART`.`AGENCY` like '%"+search+"%')||"+
|
||||||
|
"(`CART`.`ALBUM` like '%"+search+"%')||"+
|
||||||
|
"(`CART`.`LABEL` like '%"+search+"%')||"+
|
||||||
|
"(`CART`.`PUBLISHER` like '%"+search+"%')||"+
|
||||||
|
"(`CART`.`COMPOSER` like '%"+search+"%')||"+
|
||||||
|
"(`CART`.`CONDUCTOR` like '%"+search+"%')||"+
|
||||||
|
"(`CART`.`SONG_ID` like '%"+search+"%')||"+
|
||||||
|
"(`CART`.`USER_DEFINED` like '%"+search+"%')||";
|
||||||
|
if(incl_cuts) {
|
||||||
|
sql+=QString("(`CUTS`.`ISCI` like '%")+search+"%')||"+
|
||||||
|
"(`CUTS`.`ISRC` like '%"+search+"%')||"+
|
||||||
|
"(`CUTS`.`DESCRIPTION` like '%"+search+"%')||"+
|
||||||
|
"(`CUTS`.`OUTCUE` like '%"+search+"%')||";
|
||||||
|
}
|
||||||
|
|
||||||
|
return sql;
|
||||||
|
}
|
||||||
|
@ -57,7 +57,7 @@ class RDCartFilter : public RDWidget
|
|||||||
QString service() const;
|
QString service() const;
|
||||||
void setService(const QString &svc);
|
void setService(const QString &svc);
|
||||||
RDLibraryModel *model() const;
|
RDLibraryModel *model() const;
|
||||||
static QString phraseFilter(const QString &phrase,bool incl_cuts);
|
static QString phraseFilter(QString phrase,bool incl_cuts);
|
||||||
static QString groupFilter(const QString &group,const QStringList &groups);
|
static QString groupFilter(const QString &group,const QStringList &groups);
|
||||||
static QString typeFilter(bool incl_audio,bool incl_macro,RDCart::Type mask);
|
static QString typeFilter(bool incl_audio,bool incl_macro,RDCart::Type mask);
|
||||||
|
|
||||||
@ -94,6 +94,7 @@ class RDCartFilter : public RDWidget
|
|||||||
void LoadUserGroups();
|
void LoadUserGroups();
|
||||||
void LoadServiceGroups();
|
void LoadServiceGroups();
|
||||||
void UpdateModel();
|
void UpdateModel();
|
||||||
|
static QString ClauseSql(const QString &clause,bool incl_cuts);
|
||||||
RDLibraryModel *d_cart_model;
|
RDLibraryModel *d_cart_model;
|
||||||
RDGroupListModel *d_group_model;
|
RDGroupListModel *d_group_model;
|
||||||
QLineEdit *d_filter_edit;
|
QLineEdit *d_filter_edit;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user