summaryrefslogtreecommitdiff
path: root/plugins-alternative/CopyEngine/Rsync/Filters.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins-alternative/CopyEngine/Rsync/Filters.cpp')
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Filters.cpp456
1 files changed, 456 insertions, 0 deletions
diff --git a/plugins-alternative/CopyEngine/Rsync/Filters.cpp b/plugins-alternative/CopyEngine/Rsync/Filters.cpp
new file mode 100644
index 0000000..ce87b52
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Filters.cpp
@@ -0,0 +1,456 @@
+#include "Filters.h"
+#include "ui_Filters.h"
+
+#include <QMessageBox>
+
+Filters::Filters(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::Filters)
+{
+ ui->setupUi(this);
+}
+
+Filters::~Filters()
+{
+ delete ui;
+}
+
+void Filters::setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
+{
+ if(includeStrings.size()!=includeOptions.size() || excludeStrings.size()!=excludeOptions.size())
+ return;
+ Filters_rules new_item;
+
+ include.clear();
+ int index=0;
+ while(index<includeStrings.size())
+ {
+ new_item.search_text=includeStrings.at(index);
+ QStringList options=includeOptions.at(index).split(";");
+ new_item.need_match_all=false;
+ new_item.search_type=SearchType_rawText;
+ new_item.apply_on=ApplyOn_fileAndFolder;
+
+ if(options.contains("SearchType_simpleRegex"))
+ new_item.search_type=SearchType_simpleRegex;
+ if(options.contains("SearchType_perlRegex"))
+ new_item.search_type=SearchType_perlRegex;
+ if(options.contains("ApplyOn_file"))
+ new_item.apply_on=ApplyOn_file;
+ if(options.contains("ApplyOn_folder"))
+ new_item.apply_on=ApplyOn_folder;
+ if(options.contains("need_match_all"))
+ new_item.need_match_all=true;
+
+ if(convertToRegex(new_item))
+ include << new_item;
+
+ index++;
+ }
+
+ exclude.clear();
+ index=0;
+ while(index<excludeStrings.size())
+ {
+ new_item.search_text=excludeStrings.at(index);
+ QStringList options=excludeOptions.at(index).split(";");
+ new_item.need_match_all=false;
+ new_item.search_type=SearchType_rawText;
+ new_item.apply_on=ApplyOn_fileAndFolder;
+
+ if(options.contains("SearchType_simpleRegex"))
+ new_item.search_type=SearchType_simpleRegex;
+ if(options.contains("SearchType_perlRegex"))
+ new_item.search_type=SearchType_perlRegex;
+ if(options.contains("ApplyOn_file"))
+ new_item.apply_on=ApplyOn_file;
+ if(options.contains("ApplyOn_folder"))
+ new_item.apply_on=ApplyOn_folder;
+ if(options.contains("need_match_all"))
+ new_item.need_match_all=true;
+
+ if(convertToRegex(new_item))
+ exclude << new_item;
+
+ index++;
+ }
+
+ reShowAll();
+}
+
+void Filters::reShowAll()
+{
+ ui->inclusion->clear();
+ int index=0;
+ while(index<include.size())
+ {
+ QString entryShow=include.at(index).search_text+" (";
+ QStringList optionsToShow;
+ switch(include.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << tr("Raw text");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << tr("Simplified regex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << tr("Perl's regex");
+ break;
+ default:
+ break;
+ }
+ switch(include.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << tr("Only on file");
+ break;
+ case ApplyOn_folder:
+ optionsToShow << tr("Only on folder");
+ break;
+ default:
+ break;
+ }
+ if(include.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ entryShow+=optionsToShow.join(",");
+ entryShow+=")";
+ ui->inclusion->addItem(new QListWidgetItem(entryShow));
+ index++;
+ }
+ ui->exclusion->clear();
+ index=0;
+ while(index<exclude.size())
+ {
+ QString entryShow=exclude.at(index).search_text+" (";
+ QStringList optionsToShow;
+ switch(exclude.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << tr("Raw text");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << tr("Simplified regex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << tr("Perl's regex");
+ break;
+ default:
+ break;
+ }
+ switch(exclude.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << tr("Only on file");
+ break;
+ case ApplyOn_folder:
+ optionsToShow << tr("Only on folder");
+ break;
+ default:
+ break;
+ }
+ if(exclude.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ entryShow+=optionsToShow.join(",");
+ entryShow+=")";
+ ui->exclusion->addItem(new QListWidgetItem(entryShow));
+ index++;
+ }
+}
+
+QList<Filters_rules> Filters::getInclude()
+{
+ return include;
+}
+
+QList<Filters_rules> Filters::getExclude()
+{
+ return exclude;
+}
+
+void Filters::newLanguageLoaded()
+{
+ ui->retranslateUi(this);
+ reShowAll();
+}
+
+void Filters::haveNewFilters()
+{
+ QStringList includeStrings,includeOptions,excludeStrings,excludeOptions;
+ int index=0;
+ while(index<include.size())
+ {
+ includeStrings<<include.at(index).search_text;
+ QStringList optionsToShow;
+
+ switch(include.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << "SearchType_rawText";
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << "SearchType_simpleRegex";
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << "SearchType_perlRegex";
+ break;
+ default:
+ break;
+ }
+ switch(include.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << "ApplyOn_file";
+ break;
+ case ApplyOn_fileAndFolder:
+ optionsToShow << "ApplyOn_fileAndFolder";
+ break;
+ case ApplyOn_folder:
+ optionsToShow << "ApplyOn_folder";
+ break;
+ default:
+ break;
+ }
+ if(include.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ includeOptions<<optionsToShow.join(";");
+ index++;
+ }
+ index=0;
+ while(index<exclude.size())
+ {
+ excludeStrings<<exclude.at(index).search_text;
+ QStringList optionsToShow;
+
+ switch(exclude.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << "SearchType_rawText";
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << "SearchType_simpleRegex";
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << "SearchType_perlRegex";
+ break;
+ default:
+ break;
+ }
+ switch(exclude.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << "ApplyOn_file";
+ break;
+ case ApplyOn_fileAndFolder:
+ optionsToShow << "ApplyOn_fileAndFolder";
+ break;
+ case ApplyOn_folder:
+ optionsToShow << "ApplyOn_folder";
+ break;
+ default:
+ break;
+ }
+ if(exclude.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ excludeOptions<<optionsToShow.join(";");
+ index++;
+ }
+ emit sendNewFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+}
+
+bool Filters::convertToRegex(Filters_rules &item)
+{
+ bool isValid=!item.search_text.isEmpty();
+ if(isValid)
+ {
+ QRegExp regex;
+ QString tempString;
+ if(item.search_type==SearchType_rawText)
+ {
+ tempString=QRegExp::escape(item.search_text);
+ if(tempString.contains('/') || tempString.contains('\\'))
+ isValid=false;
+ }
+ else if(item.search_type==SearchType_simpleRegex)
+ {
+ tempString=QRegExp::escape(item.search_text);
+ tempString.replace("\\*","[^\\\\/]*");
+ }
+ else if(item.search_type==SearchType_perlRegex)
+ {
+ tempString=item.search_text;
+ if(tempString.startsWith('^') && tempString.endsWith('$'))
+ {
+ item.need_match_all=true;
+ tempString.remove(QRegExp("^\\^"));
+ tempString.remove(QRegExp("\\$$"));
+ item.search_text=tempString;
+ }
+ }
+ if(isValid)
+ {
+ if(item.need_match_all==true)
+ tempString="^"+tempString+"$";
+ regex=QRegExp(tempString);
+ isValid=regex.isValid() && !regex.isEmpty();
+ item.regex=regex;
+ return true;
+ }
+ else
+ return false;
+ }
+ return false;
+}
+
+void Filters::on_remove_exclusion_clicked()
+{
+ bool removedEntry=false;
+ int index=0;
+ while(index<ui->exclusion->count())
+ {
+ if(ui->exclusion->item(index)->isSelected())
+ {
+ delete ui->exclusion->item(index);
+ exclude.removeAt(index);
+ removedEntry=true;
+ }
+ else
+ index++;
+ }
+ if(removedEntry)
+ {
+ reShowAll();
+ haveNewFilters();
+ }
+}
+
+void Filters::on_remove_inclusion_clicked()
+{
+ bool removedEntry=false;
+ int index=0;
+ while(index<ui->inclusion->count())
+ {
+ if(ui->inclusion->item(index)->isSelected())
+ {
+ delete ui->inclusion->item(index);
+ include.removeAt(index);
+ removedEntry=true;
+ }
+ else
+ index++;
+ }
+ if(removedEntry)
+ {
+ reShowAll();
+ haveNewFilters();
+ }
+}
+
+void Filters::on_add_exclusion_clicked()
+{
+ FilterRules dialog(this);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ Filters_rules new_item;
+ new_item.apply_on=dialog.get_apply_on();
+ new_item.need_match_all=dialog.get_need_match_all();
+ new_item.search_text=dialog.get_search_text();
+ new_item.search_type=dialog.get_search_type();
+ exclude << new_item;
+ reShowAll();
+ haveNewFilters();
+ }
+}
+
+void Filters::on_buttonBox_clicked(QAbstractButton *button)
+{
+ if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole)
+ reject();
+}
+
+void Filters::on_add_inclusion_clicked()
+{
+ FilterRules dialog(this);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ Filters_rules new_item;
+ new_item.apply_on=dialog.get_apply_on();
+ new_item.need_match_all=dialog.get_need_match_all();
+ new_item.search_text=dialog.get_search_text();
+ new_item.search_type=dialog.get_search_type();
+ if(convertToRegex(new_item))
+ include << new_item;
+ reShowAll();
+ haveNewFilters();
+ }
+}
+
+void Filters::on_edit_exclusion_clicked()
+{
+ bool editedEntry=false;
+ int index=0;
+ while(index<ui->exclusion->count())
+ {
+ if(ui->exclusion->item(index)->isSelected())
+ {
+ FilterRules dialog(this);
+ dialog.set_apply_on(exclude[index].apply_on);
+ dialog.set_need_match_all(exclude[index].need_match_all);
+ dialog.set_search_text(exclude[index].search_text);
+ dialog.set_search_type(exclude[index].search_type);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ exclude[index].apply_on=dialog.get_apply_on();
+ exclude[index].need_match_all=dialog.get_need_match_all();
+ exclude[index].search_text=dialog.get_search_text();
+ exclude[index].search_type=dialog.get_search_type();
+ if(!convertToRegex(exclude[index]))
+ exclude.removeAt(index);
+ editedEntry=true;
+ }
+ }
+ index++;
+ }
+ if(editedEntry)
+ {
+ reShowAll();
+ haveNewFilters();
+ }
+}
+
+void Filters::on_edit_inclusion_clicked()
+{
+ bool editedEntry=false;
+ int index=0;
+ while(index<ui->inclusion->count())
+ {
+ if(ui->inclusion->item(index)->isSelected())
+ {
+ FilterRules dialog(this);
+ dialog.set_apply_on(exclude[index].apply_on);
+ dialog.set_need_match_all(exclude[index].need_match_all);
+ dialog.set_search_text(exclude[index].search_text);
+ dialog.set_search_type(exclude[index].search_type);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ exclude[index].apply_on=dialog.get_apply_on();
+ exclude[index].need_match_all=dialog.get_need_match_all();
+ exclude[index].search_text=dialog.get_search_text();
+ exclude[index].search_type=dialog.get_search_type();
+ if(!convertToRegex(exclude[index]))
+ exclude.removeAt(index);
+ editedEntry=true;
+ }
+ }
+ index++;
+ }
+ if(editedEntry)
+ {
+ reShowAll();
+ haveNewFilters();
+ }
+}