mirror of
				https://github.com/arcan1s/awesome-widgets.git
				synced 2025-11-04 06:43:41 +00:00 
			
		
		
		
	implement ExtScripts configuration
This commit is contained in:
		@ -82,10 +82,9 @@ private slots:
 | 
			
		||||
    void addBar();
 | 
			
		||||
    void addCustomScript();
 | 
			
		||||
    void addNewPkgCommand(QTableWidgetItem *item);
 | 
			
		||||
    void contextMenuCustomCommand(const QPoint pos);
 | 
			
		||||
    void contextMenuPkgCommand(const QPoint pos);
 | 
			
		||||
    void editBar(QListWidgetItem *item);
 | 
			
		||||
    void editCustomCommand(const int row, const int column);
 | 
			
		||||
    void editCustomCommand(QListWidgetItem *item);
 | 
			
		||||
    void editFanItem(QListWidgetItem *item);
 | 
			
		||||
    void editHddItem(QListWidgetItem *item);
 | 
			
		||||
    void editHddSpeedItem(QListWidgetItem *item);
 | 
			
		||||
 | 
			
		||||
@ -366,40 +366,10 @@ void AwesomeWidget::createConfigurationInterface(KConfigDialog *parent)
 | 
			
		||||
    // dataengine
 | 
			
		||||
    QMap<QString, QString> deSettings = readDataEngineConfiguration();
 | 
			
		||||
    uiDEConfig.lineEdit_acpi->setText(deSettings[QString("ACPIPATH")]);
 | 
			
		||||
    uiDEConfig.tableWidget_customCommand->clear();
 | 
			
		||||
    QList<ExtScript *> externalScripts = initScripts();
 | 
			
		||||
    uiDEConfig.tableWidget_customCommand->setRowCount(externalScripts.count());
 | 
			
		||||
    headerList.clear();
 | 
			
		||||
    headerList.append(i18n("Name"));
 | 
			
		||||
    headerList.append(i18n("Interval"));
 | 
			
		||||
    headerList.append(i18n("Output"));
 | 
			
		||||
    headerList.append(i18n("Prefix"));
 | 
			
		||||
    headerList.append(i18n("Redirect"));
 | 
			
		||||
    uiDEConfig.tableWidget_customCommand->setHorizontalHeaderLabels(headerList);
 | 
			
		||||
    uiDEConfig.tableWidget_customCommand->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
 | 
			
		||||
    for (int i=0; i<externalScripts.count(); i++) {
 | 
			
		||||
        QTableWidgetItem *name = new QTableWidgetItem(externalScripts[i]->getName());
 | 
			
		||||
        name->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsEnabled);
 | 
			
		||||
        if (externalScripts[i]->isActive())
 | 
			
		||||
            name->setCheckState(Qt::Checked);
 | 
			
		||||
        else
 | 
			
		||||
            name->setCheckState(Qt::Unchecked);
 | 
			
		||||
        uiDEConfig.tableWidget_customCommand->setItem(i, 0, name);
 | 
			
		||||
        uiDEConfig.tableWidget_customCommand->setItem(i, 1, new QTableWidgetItem(QString::number(externalScripts[i]->getInterval())));
 | 
			
		||||
        QTableWidgetItem *output = new QTableWidgetItem();
 | 
			
		||||
        if (externalScripts[i]->hasOutput())
 | 
			
		||||
            output->setCheckState(Qt::Checked);
 | 
			
		||||
        else
 | 
			
		||||
            output->setCheckState(Qt::Unchecked);
 | 
			
		||||
        uiDEConfig.tableWidget_customCommand->setItem(i, 2, output);
 | 
			
		||||
        uiDEConfig.tableWidget_customCommand->setItem(i, 3, new QTableWidgetItem(externalScripts[i]->getPrefix()));
 | 
			
		||||
        QComboBox *redirect = new QComboBox();
 | 
			
		||||
        redirect->addItem(QString("out2err"));
 | 
			
		||||
        redirect->addItem(QString("nothing"));
 | 
			
		||||
        redirect->addItem(QString("err2out"));
 | 
			
		||||
        redirect->setCurrentIndex(externalScripts[i]->getRedirect() + 1);
 | 
			
		||||
        uiDEConfig.tableWidget_customCommand->setCellWidget(i, 4, redirect);
 | 
			
		||||
    }
 | 
			
		||||
    uiDEConfig.listWidget_custom->clear();
 | 
			
		||||
    for (int i=0; i<externalScripts.count(); i++)
 | 
			
		||||
        uiDEConfig.listWidget_custom->addItem(new QListWidgetItem(externalScripts[i]->getFileName()));
 | 
			
		||||
    externalScripts.clear();
 | 
			
		||||
    uiDEConfig.comboBox_gpudev->setCurrentIndex(
 | 
			
		||||
                uiDEConfig.comboBox_gpudev->findText(deSettings[QString("GPUDEV")], Qt::MatchFixedString));
 | 
			
		||||
@ -479,15 +449,14 @@ void AwesomeWidget::createConfigurationInterface(KConfigDialog *parent)
 | 
			
		||||
            this, SLOT(editTempItem(QListWidgetItem *)));
 | 
			
		||||
    connect(uiAdvancedConfig.listWidget_bars, SIGNAL(itemActivated(QListWidgetItem *)),
 | 
			
		||||
            this, SLOT(editBar(QListWidgetItem *)));
 | 
			
		||||
    connect(uiDEConfig.tableWidget_customCommand, SIGNAL(cellDoubleClicked(int, int)),
 | 
			
		||||
            this, SLOT(editCustomCommand(int, int)));
 | 
			
		||||
    connect(uiDEConfig.tableWidget_customCommand, SIGNAL(customContextMenuRequested(QPoint)),
 | 
			
		||||
            this, SLOT(contextMenuCustomCommand(QPoint)));
 | 
			
		||||
    connect(uiDEConfig.listWidget_custom, SIGNAL(itemActivated(QListWidgetItem *)),
 | 
			
		||||
            this, SLOT(editCustomCommand(QListWidgetItem *)));
 | 
			
		||||
    connect(uiDEConfig.tableWidget_pkgCommand, SIGNAL(itemChanged(QTableWidgetItem *)),
 | 
			
		||||
            this, SLOT(addNewPkgCommand(QTableWidgetItem *)));
 | 
			
		||||
    connect(uiDEConfig.tableWidget_pkgCommand, SIGNAL(customContextMenuRequested(QPoint)),
 | 
			
		||||
            this, SLOT(contextMenuPkgCommand(QPoint)));
 | 
			
		||||
    connect(uiAdvancedConfig.pushButton_bars, SIGNAL(clicked(bool)), this, SLOT(addBar()));
 | 
			
		||||
    connect(uiDEConfig.pushButton_custom, SIGNAL(clicked(bool)), this, SLOT(addCustomScript()));
 | 
			
		||||
    connect(uiWidConfig.pushButton_tags, SIGNAL(clicked(bool)), this, SLOT(setFormating()));
 | 
			
		||||
    connect(uiWidConfig.pushButton_br, SIGNAL(clicked(bool)), this, SLOT(setFormating()));
 | 
			
		||||
    connect(uiWidConfig.pushButton_font, SIGNAL(clicked(bool)), this, SLOT(setFontFormating()));
 | 
			
		||||
@ -583,24 +552,6 @@ void AwesomeWidget::configAccepted()
 | 
			
		||||
    // dataengine
 | 
			
		||||
    QMap<QString, QString> deSettings;
 | 
			
		||||
    deSettings[QString("ACPIPATH")] = uiDEConfig.lineEdit_acpi->text();
 | 
			
		||||
    QStringList dirs = KGlobal::dirs()->findDirs("data", "plasma_engine_extsysmon/scripts");
 | 
			
		||||
    for (int i=0; i<uiDEConfig.tableWidget_customCommand->rowCount(); i++) {
 | 
			
		||||
        ExtScript *script = new ExtScript(0, uiDEConfig.tableWidget_customCommand->item(i, 0)->text(), dirs, debug);
 | 
			
		||||
        if (uiDEConfig.tableWidget_customCommand->item(i, 0)->checkState() == Qt::Checked)
 | 
			
		||||
            script->setActive(true);
 | 
			
		||||
        else
 | 
			
		||||
            script->setActive(false);
 | 
			
		||||
        script->setInterval(uiDEConfig.tableWidget_customCommand->item(i, 1)->text().toInt());
 | 
			
		||||
        if (uiDEConfig.tableWidget_customCommand->item(i, 2)->checkState() == Qt::Checked)
 | 
			
		||||
            script->setHasOutput(true);
 | 
			
		||||
        else
 | 
			
		||||
            script->setHasOutput(false);
 | 
			
		||||
        script->setPrefix(uiDEConfig.tableWidget_customCommand->item(i, 3)->text());
 | 
			
		||||
        int redirect = ((QComboBox *)uiDEConfig.tableWidget_customCommand->cellWidget(i, 4))->currentIndex() - 1;
 | 
			
		||||
        script->setRedirect((ExtScript::Redirect)redirect);
 | 
			
		||||
        script->writeConfiguration();
 | 
			
		||||
        delete script;
 | 
			
		||||
    }
 | 
			
		||||
    deSettings[QString("GPUDEV")] = uiDEConfig.comboBox_gpudev->currentText();
 | 
			
		||||
    deSettings[QString("HDDDEV")] = uiDEConfig.comboBox_hdddev->currentText();
 | 
			
		||||
    deSettings[QString("HDDTEMPCMD")] = uiDEConfig.lineEdit_hddtempCmd->text();
 | 
			
		||||
@ -783,50 +734,15 @@ void AwesomeWidget::addCustomScript()
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
 | 
			
		||||
    QString name = QInputDialog::getText(0, i18n("Enter script name"),
 | 
			
		||||
                                         i18n("Name"));
 | 
			
		||||
    if (name.isEmpty()) return;
 | 
			
		||||
    QString localDir = KGlobal::dirs()->locateLocal("data", "plasma_engine_extsysmon/scripts");
 | 
			
		||||
    QStringList dirs = KGlobal::dirs()->findDirs("data", "plasma_applet_awesome-widget/desktops");
 | 
			
		||||
    bool ok;
 | 
			
		||||
    QString name = QInputDialog::getText(0, i18n("Enter file name"),
 | 
			
		||||
                                         i18n("File name"), QLineEdit::Normal,
 | 
			
		||||
                                         QString(""), &ok);
 | 
			
		||||
    if ((!ok) || (name.isEmpty())) return;
 | 
			
		||||
 | 
			
		||||
    QString fileName = QDir(localDir).absoluteFilePath(name);
 | 
			
		||||
    if (debug) qDebug() << PDEBUG << ":" << "Script" << fileName;
 | 
			
		||||
    QFile configFile(fileName);
 | 
			
		||||
    if (!configFile.open(QIODevice::WriteOnly)) return;
 | 
			
		||||
    configFile.write("#!/bin/bash\n");
 | 
			
		||||
    configFile.close();
 | 
			
		||||
    configFile.setPermissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner |
 | 
			
		||||
                              QFile::ReadGroup | QFile::ExeGroup |
 | 
			
		||||
                              QFile::ReadOther | QFile::ExeOther);
 | 
			
		||||
    QDesktopServices::openUrl(QUrl(fileName));
 | 
			
		||||
 | 
			
		||||
    fileName = QDir(localDir).absoluteFilePath(name + QString(".conf"));
 | 
			
		||||
    if (debug) qDebug() << PDEBUG << ":" << "Configuration" << fileName;
 | 
			
		||||
    configFile.setFileName(fileName);
 | 
			
		||||
    if (!configFile.open(QIODevice::WriteOnly)) return;
 | 
			
		||||
    configFile.write("ACTIVE=false\n");
 | 
			
		||||
    configFile.write("INTERVAL=1\n");
 | 
			
		||||
    configFile.write("OUTPUT=true\n");
 | 
			
		||||
    configFile.write("PREFIX=\n");
 | 
			
		||||
    configFile.write("REDIRECT=0\n");
 | 
			
		||||
    configFile.close();
 | 
			
		||||
 | 
			
		||||
    int i = uiDEConfig.tableWidget_customCommand->rowCount();
 | 
			
		||||
    uiDEConfig.tableWidget_customCommand->insertRow(i);
 | 
			
		||||
    QTableWidgetItem *nameItem = new QTableWidgetItem(name);
 | 
			
		||||
    nameItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsEnabled);
 | 
			
		||||
    nameItem->setCheckState(Qt::Unchecked);
 | 
			
		||||
    uiDEConfig.tableWidget_customCommand->setItem(i, 0, nameItem);
 | 
			
		||||
    uiDEConfig.tableWidget_customCommand->setItem(i, 1, new QTableWidgetItem(QString::number(1)));
 | 
			
		||||
    QTableWidgetItem *output = new QTableWidgetItem();
 | 
			
		||||
    output->setCheckState(Qt::Checked);
 | 
			
		||||
    uiDEConfig.tableWidget_customCommand->setItem(i, 2, output);
 | 
			
		||||
    uiDEConfig.tableWidget_customCommand->setItem(i, 3, new QTableWidgetItem(QString("")));
 | 
			
		||||
    QComboBox *redirect = new QComboBox();
 | 
			
		||||
    redirect->addItem(QString("out2err"));
 | 
			
		||||
    redirect->addItem(QString("nothing"));
 | 
			
		||||
    redirect->addItem(QString("err2out"));
 | 
			
		||||
    redirect->setCurrentIndex(1);
 | 
			
		||||
    uiDEConfig.tableWidget_customCommand->setCellWidget(i, 4, redirect);
 | 
			
		||||
    ExtScript *script = new ExtScript(0, name, dirs, debug);
 | 
			
		||||
    script->showConfiguration();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -845,31 +761,6 @@ void AwesomeWidget::addNewPkgCommand(QTableWidgetItem *item)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void AwesomeWidget::contextMenuCustomCommand(const QPoint pos)
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
    if (uiDEConfig.tableWidget_customCommand->currentItem() == 0) return;
 | 
			
		||||
 | 
			
		||||
    QMenu menu(uiDEConfig.tableWidget_customCommand);
 | 
			
		||||
    QAction *edit = menu.addAction(QIcon::fromTheme("document-edit"), i18n("Edit"));
 | 
			
		||||
    QAction *create = menu.addAction(QIcon::fromTheme("document-new"), i18n("Create"));
 | 
			
		||||
    QAction *remove = menu.addAction(QIcon::fromTheme("edit-delete"), i18n("Remove"));
 | 
			
		||||
    QAction *action = menu.exec(uiDEConfig.tableWidget_customCommand->viewport()->mapToGlobal(pos));
 | 
			
		||||
    if (action == edit) {
 | 
			
		||||
        editCustomCommand(uiDEConfig.tableWidget_customCommand->currentRow(), 0);
 | 
			
		||||
    } else if (action == create) {
 | 
			
		||||
        addCustomScript();
 | 
			
		||||
    } else if (action == remove) {
 | 
			
		||||
        int row = uiDEConfig.tableWidget_customCommand->currentRow();
 | 
			
		||||
        QStringList dirs = KGlobal::dirs()->findDirs("data", "plasma_engine_extsysmon/scripts");
 | 
			
		||||
        ExtScript *script = new ExtScript(0, uiDEConfig.tableWidget_customCommand->item(row, 0)->text(), dirs, debug);
 | 
			
		||||
        script->tryDelete();
 | 
			
		||||
        delete script;
 | 
			
		||||
        uiDEConfig.tableWidget_customCommand->removeRow(row);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void AwesomeWidget::contextMenuPkgCommand(const QPoint pos)
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
@ -900,20 +791,13 @@ void AwesomeWidget::editBar(QListWidgetItem *item)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void AwesomeWidget::editCustomCommand(const int row, const int column)
 | 
			
		||||
void AwesomeWidget::editCustomCommand(QListWidgetItem *item)
 | 
			
		||||
{
 | 
			
		||||
    Q_UNUSED(column);
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
 | 
			
		||||
    QString name = uiDEConfig.tableWidget_customCommand->item(row, 0)->text();
 | 
			
		||||
    QString localDir = KStandardDirs::locateLocal("data", "plasma_engine_extsysmon/scripts");
 | 
			
		||||
    QStringList dirs = KGlobal::dirs()->findDirs("data", "plasma_engine_extsysmon/scripts");
 | 
			
		||||
    for (int i=0; i<dirs.count(); i++) {
 | 
			
		||||
        if (!QDir(dirs[i]).exists(name)) continue;
 | 
			
		||||
        if (dirs[i] == localDir) break;
 | 
			
		||||
        QFile::copy(QDir(dirs[i]).absoluteFilePath(name), QDir(localDir).absoluteFilePath(name));
 | 
			
		||||
    }
 | 
			
		||||
    QDesktopServices::openUrl(QUrl(QDir(localDir).absoluteFilePath(name)));
 | 
			
		||||
    ExtScript *script = new ExtScript(0, item->text(), dirs, debug);
 | 
			
		||||
    script->showConfiguration();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -60,6 +60,9 @@
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>hddtemp cmd</string>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="alignment">
 | 
			
		||||
            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
@ -84,6 +87,9 @@
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>GPU device</string>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="alignment">
 | 
			
		||||
            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
@ -137,6 +143,9 @@
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>HDD</string>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="alignment">
 | 
			
		||||
            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
@ -170,6 +179,9 @@
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>Music player</string>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="alignment">
 | 
			
		||||
            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
@ -213,6 +225,9 @@
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>MPD port</string>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="alignment">
 | 
			
		||||
            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
@ -268,6 +283,9 @@
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>MPD address</string>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="alignment">
 | 
			
		||||
            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
@ -305,6 +323,9 @@
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>ACPI path</string>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="alignment">
 | 
			
		||||
            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
@ -316,47 +337,6 @@
 | 
			
		||||
         </item>
 | 
			
		||||
        </layout>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="1" column="0">
 | 
			
		||||
        <widget class="QTableWidget" name="tableWidget_customCommand">
 | 
			
		||||
         <property name="contextMenuPolicy">
 | 
			
		||||
          <enum>Qt::CustomContextMenu</enum>
 | 
			
		||||
         </property>
 | 
			
		||||
         <property name="selectionMode">
 | 
			
		||||
          <enum>QAbstractItemView::SingleSelection</enum>
 | 
			
		||||
         </property>
 | 
			
		||||
         <attribute name="horizontalHeaderStretchLastSection">
 | 
			
		||||
          <bool>true</bool>
 | 
			
		||||
         </attribute>
 | 
			
		||||
         <attribute name="verticalHeaderVisible">
 | 
			
		||||
          <bool>false</bool>
 | 
			
		||||
         </attribute>
 | 
			
		||||
         <column>
 | 
			
		||||
          <property name="text">
 | 
			
		||||
           <string>Name</string>
 | 
			
		||||
          </property>
 | 
			
		||||
         </column>
 | 
			
		||||
         <column>
 | 
			
		||||
          <property name="text">
 | 
			
		||||
           <string>Interval</string>
 | 
			
		||||
          </property>
 | 
			
		||||
         </column>
 | 
			
		||||
         <column>
 | 
			
		||||
          <property name="text">
 | 
			
		||||
           <string>Output</string>
 | 
			
		||||
          </property>
 | 
			
		||||
         </column>
 | 
			
		||||
         <column>
 | 
			
		||||
          <property name="text">
 | 
			
		||||
           <string>Prefix</string>
 | 
			
		||||
          </property>
 | 
			
		||||
         </column>
 | 
			
		||||
         <column>
 | 
			
		||||
          <property name="text">
 | 
			
		||||
           <string>Redirect</string>
 | 
			
		||||
          </property>
 | 
			
		||||
         </column>
 | 
			
		||||
        </widget>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="7" column="0">
 | 
			
		||||
        <layout class="QVBoxLayout" name="layout_mpris">
 | 
			
		||||
         <item>
 | 
			
		||||
@ -382,6 +362,9 @@
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>MPRIS player name</string>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="alignment">
 | 
			
		||||
              <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 | 
			
		||||
             </property>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
@ -481,6 +464,53 @@ del - remove item</string>
 | 
			
		||||
         </item>
 | 
			
		||||
        </layout>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="1" column="0">
 | 
			
		||||
        <layout class="QVBoxLayout" name="layout_custom">
 | 
			
		||||
         <item>
 | 
			
		||||
          <layout class="QHBoxLayout" name="layout_customAdd">
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QLabel" name="label_custom">
 | 
			
		||||
             <property name="minimumSize">
 | 
			
		||||
              <size>
 | 
			
		||||
               <width>200</width>
 | 
			
		||||
               <height>0</height>
 | 
			
		||||
              </size>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>Custom scripts</string>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="alignment">
 | 
			
		||||
              <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 | 
			
		||||
             </property>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <spacer name="spacer_custom">
 | 
			
		||||
             <property name="orientation">
 | 
			
		||||
              <enum>Qt::Horizontal</enum>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="sizeHint" stdset="0">
 | 
			
		||||
              <size>
 | 
			
		||||
               <width>40</width>
 | 
			
		||||
               <height>20</height>
 | 
			
		||||
              </size>
 | 
			
		||||
             </property>
 | 
			
		||||
            </spacer>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QPushButton" name="pushButton_custom">
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>Add</string>
 | 
			
		||||
             </property>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
          </layout>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QListWidget" name="listWidget_custom"/>
 | 
			
		||||
         </item>
 | 
			
		||||
        </layout>
 | 
			
		||||
       </item>
 | 
			
		||||
      </layout>
 | 
			
		||||
     </widget>
 | 
			
		||||
    </widget>
 | 
			
		||||
 | 
			
		||||
@ -1,492 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<ui version="4.0">
 | 
			
		||||
 <class>DEWindow</class>
 | 
			
		||||
 <widget class="QWidget" name="DEWindow">
 | 
			
		||||
  <property name="geometry">
 | 
			
		||||
   <rect>
 | 
			
		||||
    <x>0</x>
 | 
			
		||||
    <y>0</y>
 | 
			
		||||
    <width>700</width>
 | 
			
		||||
    <height>584</height>
 | 
			
		||||
   </rect>
 | 
			
		||||
  </property>
 | 
			
		||||
  <property name="sizePolicy">
 | 
			
		||||
   <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
 | 
			
		||||
    <horstretch>0</horstretch>
 | 
			
		||||
    <verstretch>0</verstretch>
 | 
			
		||||
   </sizepolicy>
 | 
			
		||||
  </property>
 | 
			
		||||
  <property name="minimumSize">
 | 
			
		||||
   <size>
 | 
			
		||||
    <width>700</width>
 | 
			
		||||
    <height>0</height>
 | 
			
		||||
   </size>
 | 
			
		||||
  </property>
 | 
			
		||||
  <property name="maximumSize">
 | 
			
		||||
   <size>
 | 
			
		||||
    <width>16777215</width>
 | 
			
		||||
    <height>16777215</height>
 | 
			
		||||
   </size>
 | 
			
		||||
  </property>
 | 
			
		||||
  <property name="windowTitle">
 | 
			
		||||
   <string notr="true">DE</string>
 | 
			
		||||
  </property>
 | 
			
		||||
  <layout class="QGridLayout" name="gridLayout_2">
 | 
			
		||||
   <item row="0" column="0">
 | 
			
		||||
    <widget class="QScrollArea" name="scrollArea_dattaengine">
 | 
			
		||||
     <property name="widgetResizable">
 | 
			
		||||
      <bool>true</bool>
 | 
			
		||||
     </property>
 | 
			
		||||
     <widget class="QWidget" name="contents_dattaengine">
 | 
			
		||||
      <property name="geometry">
 | 
			
		||||
       <rect>
 | 
			
		||||
        <x>0</x>
 | 
			
		||||
        <y>0</y>
 | 
			
		||||
        <width>684</width>
 | 
			
		||||
        <height>568</height>
 | 
			
		||||
       </rect>
 | 
			
		||||
      </property>
 | 
			
		||||
      <layout class="QGridLayout" name="gridLayout">
 | 
			
		||||
       <item row="4" column="0">
 | 
			
		||||
        <layout class="QHBoxLayout" name="layout_hddtempCmd">
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QLabel" name="label_hddtempCmd">
 | 
			
		||||
           <property name="minimumSize">
 | 
			
		||||
            <size>
 | 
			
		||||
             <width>200</width>
 | 
			
		||||
             <height>0</height>
 | 
			
		||||
            </size>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>hddtemp cmd</string>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QLineEdit" name="lineEdit_hddtempCmd">
 | 
			
		||||
           <property name="alignment">
 | 
			
		||||
            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
        </layout>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="2" column="0">
 | 
			
		||||
        <layout class="QHBoxLayout" name="layout_gpudev">
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QLabel" name="label_gpudev">
 | 
			
		||||
           <property name="minimumSize">
 | 
			
		||||
            <size>
 | 
			
		||||
             <width>200</width>
 | 
			
		||||
             <height>0</height>
 | 
			
		||||
            </size>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>GPU device</string>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QComboBox" name="comboBox_gpudev">
 | 
			
		||||
           <property name="sizePolicy">
 | 
			
		||||
            <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
 | 
			
		||||
             <horstretch>0</horstretch>
 | 
			
		||||
             <verstretch>0</verstretch>
 | 
			
		||||
            </sizepolicy>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="minimumSize">
 | 
			
		||||
            <size>
 | 
			
		||||
             <width>100</width>
 | 
			
		||||
             <height>0</height>
 | 
			
		||||
            </size>
 | 
			
		||||
           </property>
 | 
			
		||||
           <item>
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string notr="true">auto</string>
 | 
			
		||||
            </property>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string notr="true">disable</string>
 | 
			
		||||
            </property>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string notr="true">nvidia</string>
 | 
			
		||||
            </property>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string notr="true">ati</string>
 | 
			
		||||
            </property>
 | 
			
		||||
           </item>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
        </layout>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="3" column="0">
 | 
			
		||||
        <layout class="QHBoxLayout" name="layout_hdddev">
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QLabel" name="label_hdddev">
 | 
			
		||||
           <property name="minimumSize">
 | 
			
		||||
            <size>
 | 
			
		||||
             <width>200</width>
 | 
			
		||||
             <height>0</height>
 | 
			
		||||
            </size>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>HDD</string>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QComboBox" name="comboBox_hdddev">
 | 
			
		||||
           <property name="sizePolicy">
 | 
			
		||||
            <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
 | 
			
		||||
             <horstretch>0</horstretch>
 | 
			
		||||
             <verstretch>0</verstretch>
 | 
			
		||||
            </sizepolicy>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="minimumSize">
 | 
			
		||||
            <size>
 | 
			
		||||
             <width>100</width>
 | 
			
		||||
             <height>0</height>
 | 
			
		||||
            </size>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
        </layout>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="8" column="0">
 | 
			
		||||
        <layout class="QHBoxLayout" name="layout_playerSelect">
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QLabel" name="label_playerSelect">
 | 
			
		||||
           <property name="minimumSize">
 | 
			
		||||
            <size>
 | 
			
		||||
             <width>200</width>
 | 
			
		||||
             <height>0</height>
 | 
			
		||||
            </size>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>Music player</string>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QComboBox" name="comboBox_playerSelect">
 | 
			
		||||
           <property name="sizePolicy">
 | 
			
		||||
            <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
 | 
			
		||||
             <horstretch>0</horstretch>
 | 
			
		||||
             <verstretch>0</verstretch>
 | 
			
		||||
            </sizepolicy>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="minimumSize">
 | 
			
		||||
            <size>
 | 
			
		||||
             <width>100</width>
 | 
			
		||||
             <height>0</height>
 | 
			
		||||
            </size>
 | 
			
		||||
           </property>
 | 
			
		||||
           <item>
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string notr="true">mpris</string>
 | 
			
		||||
            </property>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string notr="true">mpd</string>
 | 
			
		||||
            </property>
 | 
			
		||||
           </item>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
        </layout>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="6" column="0">
 | 
			
		||||
        <layout class="QHBoxLayout" name="layout_mpdport">
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QLabel" name="label_mpdport">
 | 
			
		||||
           <property name="minimumSize">
 | 
			
		||||
            <size>
 | 
			
		||||
             <width>200</width>
 | 
			
		||||
             <height>0</height>
 | 
			
		||||
            </size>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>MPD port</string>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <spacer name="spacer_mpdport">
 | 
			
		||||
           <property name="orientation">
 | 
			
		||||
            <enum>Qt::Horizontal</enum>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="sizeHint" stdset="0">
 | 
			
		||||
            <size>
 | 
			
		||||
             <width>40</width>
 | 
			
		||||
             <height>19</height>
 | 
			
		||||
            </size>
 | 
			
		||||
           </property>
 | 
			
		||||
          </spacer>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QSpinBox" name="spinBox_mpdport">
 | 
			
		||||
           <property name="minimumSize">
 | 
			
		||||
            <size>
 | 
			
		||||
             <width>180</width>
 | 
			
		||||
             <height>0</height>
 | 
			
		||||
            </size>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="alignment">
 | 
			
		||||
            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="minimum">
 | 
			
		||||
            <number>0</number>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="maximum">
 | 
			
		||||
            <number>50000</number>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="singleStep">
 | 
			
		||||
            <number>100</number>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="value">
 | 
			
		||||
            <number>6600</number>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
        </layout>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="5" column="0">
 | 
			
		||||
        <layout class="QHBoxLayout" name="layout_mpdaddress">
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QLabel" name="label_mpdaddress">
 | 
			
		||||
           <property name="minimumSize">
 | 
			
		||||
            <size>
 | 
			
		||||
             <width>200</width>
 | 
			
		||||
             <height>0</height>
 | 
			
		||||
            </size>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>MPD address</string>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QLineEdit" name="lineEdit_mpdaddress">
 | 
			
		||||
           <property name="alignment">
 | 
			
		||||
            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
        </layout>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="10" column="0">
 | 
			
		||||
        <spacer name="spacer_dataengine">
 | 
			
		||||
         <property name="orientation">
 | 
			
		||||
          <enum>Qt::Vertical</enum>
 | 
			
		||||
         </property>
 | 
			
		||||
         <property name="sizeHint" stdset="0">
 | 
			
		||||
          <size>
 | 
			
		||||
           <width>20</width>
 | 
			
		||||
           <height>40</height>
 | 
			
		||||
          </size>
 | 
			
		||||
         </property>
 | 
			
		||||
        </spacer>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="0" column="0">
 | 
			
		||||
        <layout class="QHBoxLayout" name="layout_acpi">
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QLabel" name="label_acpi">
 | 
			
		||||
           <property name="minimumSize">
 | 
			
		||||
            <size>
 | 
			
		||||
             <width>200</width>
 | 
			
		||||
             <height>0</height>
 | 
			
		||||
            </size>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>ACPI path</string>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QLineEdit" name="lineEdit_acpi">
 | 
			
		||||
           <property name="toolTip">
 | 
			
		||||
            <string>"/sys/class/power_supply/" by default</string>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
        </layout>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="1" column="0">
 | 
			
		||||
        <widget class="QTableWidget" name="tableWidget_customCommand">
 | 
			
		||||
         <property name="contextMenuPolicy">
 | 
			
		||||
          <enum>Qt::CustomContextMenu</enum>
 | 
			
		||||
         </property>
 | 
			
		||||
         <property name="selectionMode">
 | 
			
		||||
          <enum>QAbstractItemView::SingleSelection</enum>
 | 
			
		||||
         </property>
 | 
			
		||||
         <attribute name="horizontalHeaderStretchLastSection">
 | 
			
		||||
          <bool>true</bool>
 | 
			
		||||
         </attribute>
 | 
			
		||||
         <attribute name="verticalHeaderVisible">
 | 
			
		||||
          <bool>false</bool>
 | 
			
		||||
         </attribute>
 | 
			
		||||
         <column>
 | 
			
		||||
          <property name="text">
 | 
			
		||||
           <string>Name</string>
 | 
			
		||||
          </property>
 | 
			
		||||
         </column>
 | 
			
		||||
         <column>
 | 
			
		||||
          <property name="text">
 | 
			
		||||
           <string>Interval</string>
 | 
			
		||||
          </property>
 | 
			
		||||
         </column>
 | 
			
		||||
         <column>
 | 
			
		||||
          <property name="text">
 | 
			
		||||
           <string>Output</string>
 | 
			
		||||
          </property>
 | 
			
		||||
         </column>
 | 
			
		||||
         <column>
 | 
			
		||||
          <property name="text">
 | 
			
		||||
           <string>Prefix</string>
 | 
			
		||||
          </property>
 | 
			
		||||
         </column>
 | 
			
		||||
         <column>
 | 
			
		||||
          <property name="text">
 | 
			
		||||
           <string>Redirect</string>
 | 
			
		||||
          </property>
 | 
			
		||||
         </column>
 | 
			
		||||
        </widget>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="7" column="0">
 | 
			
		||||
        <layout class="QVBoxLayout" name="layout_mpris">
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QLabel" name="label_mprisInfo">
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string><b>NOTE:</b> Player DBus interface should be an active</string>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="alignment">
 | 
			
		||||
            <set>Qt::AlignCenter</set>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <layout class="QHBoxLayout" name="layout_mprisSelect">
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QLabel" name="label_mpris">
 | 
			
		||||
             <property name="minimumSize">
 | 
			
		||||
              <size>
 | 
			
		||||
               <width>200</width>
 | 
			
		||||
               <height>0</height>
 | 
			
		||||
              </size>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>MPRIS player name</string>
 | 
			
		||||
             </property>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QComboBox" name="comboBox_mpris">
 | 
			
		||||
             <property name="sizePolicy">
 | 
			
		||||
              <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
 | 
			
		||||
               <horstretch>0</horstretch>
 | 
			
		||||
               <verstretch>0</verstretch>
 | 
			
		||||
              </sizepolicy>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="minimumSize">
 | 
			
		||||
              <size>
 | 
			
		||||
               <width>100</width>
 | 
			
		||||
               <height>0</height>
 | 
			
		||||
              </size>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="editable">
 | 
			
		||||
              <bool>true</bool>
 | 
			
		||||
             </property>
 | 
			
		||||
             <item>
 | 
			
		||||
              <property name="text">
 | 
			
		||||
               <string notr="true">auto</string>
 | 
			
		||||
              </property>
 | 
			
		||||
             </item>
 | 
			
		||||
             <item>
 | 
			
		||||
              <property name="text">
 | 
			
		||||
               <string notr="true">amarok</string>
 | 
			
		||||
              </property>
 | 
			
		||||
             </item>
 | 
			
		||||
             <item>
 | 
			
		||||
              <property name="text">
 | 
			
		||||
               <string notr="true">audacious</string>
 | 
			
		||||
              </property>
 | 
			
		||||
             </item>
 | 
			
		||||
             <item>
 | 
			
		||||
              <property name="text">
 | 
			
		||||
               <string notr="true">clementine</string>
 | 
			
		||||
              </property>
 | 
			
		||||
             </item>
 | 
			
		||||
             <item>
 | 
			
		||||
              <property name="text">
 | 
			
		||||
               <string notr="true">deadbeef</string>
 | 
			
		||||
              </property>
 | 
			
		||||
             </item>
 | 
			
		||||
             <item>
 | 
			
		||||
              <property name="text">
 | 
			
		||||
               <string notr="true">vlc</string>
 | 
			
		||||
              </property>
 | 
			
		||||
             </item>
 | 
			
		||||
             <item>
 | 
			
		||||
              <property name="text">
 | 
			
		||||
               <string notr="true">qmmp</string>
 | 
			
		||||
              </property>
 | 
			
		||||
             </item>
 | 
			
		||||
             <item>
 | 
			
		||||
              <property name="text">
 | 
			
		||||
               <string notr="true">xmms2</string>
 | 
			
		||||
              </property>
 | 
			
		||||
             </item>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
          </layout>
 | 
			
		||||
         </item>
 | 
			
		||||
        </layout>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="9" column="0">
 | 
			
		||||
        <layout class="QVBoxLayout" name="layout_pkgCommand">
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QTableWidget" name="tableWidget_pkgCommand">
 | 
			
		||||
           <property name="contextMenuPolicy">
 | 
			
		||||
            <enum>Qt::CustomContextMenu</enum>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="toolTip">
 | 
			
		||||
            <string>Editable
 | 
			
		||||
del - remove item</string>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="selectionMode">
 | 
			
		||||
            <enum>QAbstractItemView::SingleSelection</enum>
 | 
			
		||||
           </property>
 | 
			
		||||
           <attribute name="horizontalHeaderStretchLastSection">
 | 
			
		||||
            <bool>true</bool>
 | 
			
		||||
           </attribute>
 | 
			
		||||
           <attribute name="verticalHeaderVisible">
 | 
			
		||||
            <bool>false</bool>
 | 
			
		||||
           </attribute>
 | 
			
		||||
           <column>
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string>Package manager</string>
 | 
			
		||||
            </property>
 | 
			
		||||
           </column>
 | 
			
		||||
           <column>
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string>Null lines</string>
 | 
			
		||||
            </property>
 | 
			
		||||
           </column>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
        </layout>
 | 
			
		||||
       </item>
 | 
			
		||||
      </layout>
 | 
			
		||||
     </widget>
 | 
			
		||||
    </widget>
 | 
			
		||||
   </item>
 | 
			
		||||
  </layout>
 | 
			
		||||
 </widget>
 | 
			
		||||
 <resources/>
 | 
			
		||||
 <connections/>
 | 
			
		||||
</ui>
 | 
			
		||||
@ -357,7 +357,7 @@ void GraphicalItem::showConfiguration(const QStringList tags)
 | 
			
		||||
    if (ret == 0) {
 | 
			
		||||
        QStringList colorText;
 | 
			
		||||
        setName(ui->label_nameValue->text());
 | 
			
		||||
        setComment(ui->label_comment->text());
 | 
			
		||||
        setComment(ui->lineEdit_comment->text());
 | 
			
		||||
        setBar(ui->comboBox_value->currentText());
 | 
			
		||||
        colorText = ui->pushButton_activeColor->text().split(QChar(','));
 | 
			
		||||
        setActiveColor(QColor(colorText[0].toInt(), colorText[1].toInt(),
 | 
			
		||||
@ -379,7 +379,8 @@ void GraphicalItem::tryDelete()
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
 | 
			
		||||
    for (int i=0; i<dirs.count(); i++)
 | 
			
		||||
        if (debug) qDebug() << PDEBUG << ":" << "Remove file" << fileName << QFile::remove(fileName);
 | 
			
		||||
        if (debug) qDebug() << PDEBUG << ":" << "Remove file" << dirs[i] + QDir::separator() + fileName <<
 | 
			
		||||
                               QFile::remove(dirs[i] + QDir::separator() + fileName);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,6 +20,7 @@
 | 
			
		||||
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
#include <QDir>
 | 
			
		||||
#include <QSettings>
 | 
			
		||||
#include <QTextCodec>
 | 
			
		||||
 | 
			
		||||
#include <pdebug/pdebug.h>
 | 
			
		||||
@ -28,7 +29,7 @@
 | 
			
		||||
 | 
			
		||||
ExtScript::ExtScript(QWidget *parent, const QString scriptName, const QStringList directories, const bool debugCmd) :
 | 
			
		||||
    QDialog(parent),
 | 
			
		||||
    name(scriptName),
 | 
			
		||||
    fileName(scriptName),
 | 
			
		||||
    dirs(directories),
 | 
			
		||||
    debug(debugCmd),
 | 
			
		||||
    ui(new Ui::ExtScript)
 | 
			
		||||
@ -46,11 +47,35 @@ ExtScript::~ExtScript()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
QString ExtScript::getComment()
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
 | 
			
		||||
    return _comment;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
QString ExtScript::getExec()
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
 | 
			
		||||
    return _exec;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
QString ExtScript::getFileName()
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
 | 
			
		||||
    return fileName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int ExtScript::getInterval()
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
 | 
			
		||||
    return interval;
 | 
			
		||||
    return _interval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -58,7 +83,7 @@ QString ExtScript::getName()
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
 | 
			
		||||
    return name;
 | 
			
		||||
    return _name;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -103,6 +128,24 @@ void ExtScript::setActive(const bool state)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ExtScript::setComment(const QString comment)
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
    if (debug) qDebug() << PDEBUG << ":" << "Comment" << comment;
 | 
			
		||||
 | 
			
		||||
    _comment = comment;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ExtScript::setExec(const QString exec)
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
    if (debug) qDebug() << PDEBUG << ":" << "Executable" << exec;
 | 
			
		||||
 | 
			
		||||
    _exec = exec;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ExtScript::setHasOutput(const bool state)
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
@ -122,6 +165,15 @@ void ExtScript::setInterval(const int interval)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ExtScript::setName(const QString name)
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
    if (debug) qDebug() << PDEBUG << ":" << "Name" << name;
 | 
			
		||||
 | 
			
		||||
    _name = name;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ExtScript::setPrefix(const QString prefix)
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
@ -149,16 +201,35 @@ void ExtScript::readConfiguration()
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
 | 
			
		||||
    QMap<QString, QString> settings;
 | 
			
		||||
    for (int i=dirs.count()-1; i>=0; i--) {
 | 
			
		||||
        if (!QDir(dirs[i]).entryList(QDir::Files).contains(name + QString(".conf"))) continue;
 | 
			
		||||
        QString fileName = dirs[i] + QDir::separator() + name + QString(".conf");
 | 
			
		||||
        QMap<QString, QString> newSettings = getConfigurationFromFile(fileName);
 | 
			
		||||
        for (int i=0; i<newSettings.keys().count(); i++)
 | 
			
		||||
            settings[newSettings.keys()[i]] = newSettings[newSettings.keys()[i]];
 | 
			
		||||
        if (!QDir(dirs[i]).entryList(QDir::Files).contains(fileName)) continue;
 | 
			
		||||
        QSettings settings(dirs[i] + QDir::separator() + fileName, QSettings::IniFormat);
 | 
			
		||||
        settings.beginGroup(QString("Desktop Entry"));
 | 
			
		||||
        QStringList childKeys = settings.childKeys();
 | 
			
		||||
        for (int i=0; i<childKeys.count(); i++) {
 | 
			
		||||
            if (childKeys[i] == QString("Name")) {
 | 
			
		||||
                setName(settings.value(childKeys[i]).toString());
 | 
			
		||||
            } else if (childKeys[i] == QString("Comment")) {
 | 
			
		||||
                setComment(settings.value(childKeys[i]).toString());
 | 
			
		||||
            } else if (childKeys[i] == QString("Exec")) {
 | 
			
		||||
                setExec(settings.value(childKeys[i]).toString());
 | 
			
		||||
            } else if (childKeys[i] == QString("X-AW-Prefix")) {
 | 
			
		||||
                setPrefix(settings.value(childKeys[i]).toString());
 | 
			
		||||
            } else if (childKeys[i] == QString("X-AW-Active")) {
 | 
			
		||||
                setActive(settings.value(childKeys[i]).toString() == QString("true"));
 | 
			
		||||
            } else if (childKeys[i] == QString("X-AW-Output")) {
 | 
			
		||||
                setHasOutput(settings.value(childKeys[i]).toString() == QString("true"));
 | 
			
		||||
            } else if (childKeys[i] == QString("X-AW-Redirect")) {
 | 
			
		||||
                setRedirect(settings.value(childKeys[i]).toString());
 | 
			
		||||
            } else if (childKeys[i] == QString("X-AW-Interval")) {
 | 
			
		||||
                setInterval(settings.value(childKeys[i]).toInt());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        settings.endGroup();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fromExternalConfiguration(settings);
 | 
			
		||||
    if (!_output)
 | 
			
		||||
        setRedirect(QString("stdout2stderr"));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -168,7 +239,7 @@ ExtScript::ScriptData ExtScript::run(const int time)
 | 
			
		||||
 | 
			
		||||
    ScriptData response;
 | 
			
		||||
    response.active = _active;
 | 
			
		||||
    response.name = name;
 | 
			
		||||
    response.name = _name;
 | 
			
		||||
    response.refresh = false;
 | 
			
		||||
    if (!_active) return response;
 | 
			
		||||
    if (time != _interval) return response;
 | 
			
		||||
@ -177,10 +248,10 @@ ExtScript::ScriptData ExtScript::run(const int time)
 | 
			
		||||
    QStringList cmdList;
 | 
			
		||||
    if (!_prefix.isEmpty())
 | 
			
		||||
        cmdList.append(_prefix);
 | 
			
		||||
    QString fullPath = name;
 | 
			
		||||
    QString fullPath = fileName;
 | 
			
		||||
    for (int i=0; i<dirs.count(); i++) {
 | 
			
		||||
        if (!QDir(dirs[i]).entryList(QDir::Files).contains(name)) continue;
 | 
			
		||||
        fullPath = dirs[i] + QDir::separator() + name;
 | 
			
		||||
        if (!QDir(dirs[i]).entryList(QDir::Files).contains(fileName)) continue;
 | 
			
		||||
        fullPath = dirs[i] + QDir::separator() + fileName;
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    cmdList.append(fullPath);
 | 
			
		||||
@ -213,6 +284,34 @@ ExtScript::ScriptData ExtScript::run(const int time)
 | 
			
		||||
void ExtScript::showConfiguration()
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
 | 
			
		||||
    ui->lineEdit_name->setText(_name);
 | 
			
		||||
    ui->lineEdit_comment->setText(_comment);
 | 
			
		||||
    ui->lineEdit_command->setText(_exec);
 | 
			
		||||
    ui->lineEdit_prefix->setText(_prefix);
 | 
			
		||||
    if (_active)
 | 
			
		||||
        ui->checkBox_active->setCheckState(Qt::Checked);
 | 
			
		||||
    else
 | 
			
		||||
        ui->checkBox_active->setCheckState(Qt::Unchecked);
 | 
			
		||||
    if (_output)
 | 
			
		||||
        ui->checkBox_output->setCheckState(Qt::Checked);
 | 
			
		||||
    else
 | 
			
		||||
        ui->checkBox_output->setCheckState(Qt::Unchecked);
 | 
			
		||||
    ui->comboBox_redirect->setCurrentIndex((int)_redirect);
 | 
			
		||||
    ui->spinBox_interval->setValue(_interval);
 | 
			
		||||
 | 
			
		||||
    int ret = exec();
 | 
			
		||||
    if (ret == 0) {
 | 
			
		||||
        setName(ui->lineEdit_name->text());
 | 
			
		||||
        setComment(ui->lineEdit_comment->text());
 | 
			
		||||
        setExec(ui->lineEdit_command->text());
 | 
			
		||||
        setPrefix(ui->lineEdit_prefix->text());
 | 
			
		||||
        setActive(ui->checkBox_active->checkState() == Qt::Checked);
 | 
			
		||||
        setHasOutput(ui->checkBox_output->checkState() == Qt::Checked);
 | 
			
		||||
        setRedirect(ui->comboBox_redirect->currentText());
 | 
			
		||||
        setInterval(ui->spinBox_interval->value());
 | 
			
		||||
        writeConfiguration();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -220,12 +319,9 @@ void ExtScript::tryDelete()
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
 | 
			
		||||
    for (int i=0; i<dirs.count(); i++) {
 | 
			
		||||
        QString fileName = dirs[i] + QDir::separator() + name;
 | 
			
		||||
        if (debug) qDebug() << PDEBUG << ":" << "Remove file" << fileName << QFile::remove(fileName);
 | 
			
		||||
        if (debug) qDebug() << PDEBUG << ":" << "Remove file" << fileName + QString(".conf") <<
 | 
			
		||||
                               QFile::remove(fileName + QString(".conf"));
 | 
			
		||||
    }
 | 
			
		||||
    for (int i=0; i<dirs.count(); i++)
 | 
			
		||||
        if (debug) qDebug() << PDEBUG << ":" << "Remove file" << dirs[i] + QDir::separator() + fileName <<
 | 
			
		||||
                               QFile::remove(dirs[i] + QDir::separator() + fileName);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -233,80 +329,40 @@ void ExtScript::writeConfiguration()
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
 | 
			
		||||
    QString fileName = dirs[0] + QDir::separator() + name + QString(".conf");
 | 
			
		||||
    if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << fileName;
 | 
			
		||||
    QFile configFile(fileName);
 | 
			
		||||
    if (!configFile.open(QIODevice::WriteOnly)) return;
 | 
			
		||||
    QMap<QString, QString> config = toExternalConfiguration();
 | 
			
		||||
    for (int i=0; i<config.keys().count(); i++) {
 | 
			
		||||
        QByteArray string = (config.keys()[i] + QString("=") + config[config.keys()[i]] + QString("\n")).toUtf8();
 | 
			
		||||
        configFile.write(string);
 | 
			
		||||
    }
 | 
			
		||||
    configFile.close();
 | 
			
		||||
}
 | 
			
		||||
    QSettings settings(dirs[0] + QDir::separator() + fileName, QSettings::IniFormat);
 | 
			
		||||
    if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << settings.fileName();
 | 
			
		||||
    settings.beginGroup(QString("Desktop Entry"));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ExtScript::fromExternalConfiguration(const QMap<QString, QString> settings)
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
 | 
			
		||||
    if (settings.contains(QString("ACTIVE")))
 | 
			
		||||
        _active = (settings[QString("ACTIVE")] == QString("true"));
 | 
			
		||||
    if (settings.contains(QString("INTERVAL")))
 | 
			
		||||
        _interval = settings[QString("INTERVAL")].toInt();
 | 
			
		||||
    if (settings.contains(QString("PREFIX")))
 | 
			
		||||
        _prefix = settings[QString("PREFIX")];
 | 
			
		||||
    if (settings.contains(QString("OUTPUT")))
 | 
			
		||||
        _output = (settings[QString("OUTPUT")] == QString("true"));
 | 
			
		||||
    if (settings.contains(QString("REDIRECT")))
 | 
			
		||||
        _redirect = (Redirect)settings[QString("REDIRECT")].toInt();
 | 
			
		||||
    if (!_output)
 | 
			
		||||
        _redirect = stdout2stderr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
QMap<QString, QString> ExtScript::getConfigurationFromFile(const QString fileName)
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
    if (debug) qDebug() << PDEBUG << ":" << "File" << fileName;
 | 
			
		||||
 | 
			
		||||
    QMap<QString, QString> settings;
 | 
			
		||||
    QFile configFile(fileName);
 | 
			
		||||
    QString fileStr;
 | 
			
		||||
    if (!configFile.open(QIODevice::ReadOnly)) return settings;
 | 
			
		||||
    while (true) {
 | 
			
		||||
        fileStr = QString(configFile.readLine()).trimmed();
 | 
			
		||||
        if ((fileStr.isEmpty()) && (!configFile.atEnd())) continue;
 | 
			
		||||
        if ((fileStr[0] == QChar('#')) && (!configFile.atEnd())) continue;
 | 
			
		||||
        if ((fileStr[0] == QChar(';')) && (!configFile.atEnd())) continue;
 | 
			
		||||
        if (fileStr.contains(QChar('=')))
 | 
			
		||||
            settings[fileStr.split(QChar('='))[0]] = fileStr.split(QChar('='))[1];
 | 
			
		||||
        if (configFile.atEnd()) break;
 | 
			
		||||
    }
 | 
			
		||||
    configFile.close();
 | 
			
		||||
    for (int i=0; i<settings.keys().count(); i++)
 | 
			
		||||
        if (debug) qDebug() << PDEBUG << ":" << settings.keys()[i] + QString("=") + settings[settings.keys()[i]];
 | 
			
		||||
 | 
			
		||||
    return settings;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
QMap<QString, QString> ExtScript::toExternalConfiguration()
 | 
			
		||||
{
 | 
			
		||||
    if (debug) qDebug() << PDEBUG;
 | 
			
		||||
 | 
			
		||||
    QMap<QString, QString> settings;
 | 
			
		||||
    QString strValue;
 | 
			
		||||
    settings.setValue(QString("Encoding"), QString("UTF-8"));
 | 
			
		||||
    settings.setValue(QString("Name"), _name);
 | 
			
		||||
    settings.setValue(QString("Comment"), _comment);
 | 
			
		||||
    settings.setValue(QString("Exec"), _exec);
 | 
			
		||||
    settings.setValue(QString("X-AW-Prefix"), _prefix);
 | 
			
		||||
    if (_active)
 | 
			
		||||
        settings[QString("ACTIVE")] = QString("true");
 | 
			
		||||
        strValue = QString("true");
 | 
			
		||||
    else
 | 
			
		||||
        settings[QString("ACTIVE")] = QString("false");
 | 
			
		||||
    settings[QString("INTERVAL")] = QString::number(_interval);
 | 
			
		||||
    settings[QString("PREFIX")] = _prefix;
 | 
			
		||||
        strValue = QString("false");
 | 
			
		||||
    settings.setValue(QString("X-AW-Active"), strValue);
 | 
			
		||||
    if (_output)
 | 
			
		||||
        settings[QString("OUTPUT")] = QString("true");
 | 
			
		||||
        strValue = QString("true");
 | 
			
		||||
    else
 | 
			
		||||
        settings[QString("OUTPUT")] = QString("false");
 | 
			
		||||
    settings[QString("REDIRECT")] = QString::number(_redirect);
 | 
			
		||||
        strValue = QString("false");
 | 
			
		||||
    settings.setValue(QString("X-AW-Output"), strValue);
 | 
			
		||||
    switch (_redirect) {
 | 
			
		||||
    case stdout2stderr:
 | 
			
		||||
        strValue = QString("stdout2stderr");
 | 
			
		||||
        break;
 | 
			
		||||
    case stderr2stdout:
 | 
			
		||||
        strValue = QString("stderr2stdout");
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        strValue = QString("nothing");
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    settings.setValue(QString("X-AW-Redirect"), strValue);
 | 
			
		||||
    settings.setValue(QString("X-AW-Interval"), _interval);
 | 
			
		||||
 | 
			
		||||
    return settings;
 | 
			
		||||
    settings.endGroup();
 | 
			
		||||
    settings.sync();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -46,6 +46,9 @@ public:
 | 
			
		||||
                       const QStringList directories = QStringList(), const bool debugCmd = false);
 | 
			
		||||
    ~ExtScript();
 | 
			
		||||
    // get methods
 | 
			
		||||
    QString getComment();
 | 
			
		||||
    QString getExec();
 | 
			
		||||
    QString getFileName();
 | 
			
		||||
    int getInterval();
 | 
			
		||||
    QString getName();
 | 
			
		||||
    QString getPrefix();
 | 
			
		||||
@ -54,8 +57,11 @@ public:
 | 
			
		||||
    bool isActive();
 | 
			
		||||
    // set methods
 | 
			
		||||
    void setActive(const bool state = true);
 | 
			
		||||
    void setComment(const QString comment = QString("empty"));
 | 
			
		||||
    void setExec(const QString exec = QString("/usr/bin/true"));
 | 
			
		||||
    void setHasOutput(const bool state = true);
 | 
			
		||||
    void setInterval(const int interval = 1);
 | 
			
		||||
    void setName(const QString name = QString("none"));
 | 
			
		||||
    void setPrefix(const QString prefix = QString(""));
 | 
			
		||||
    void setRedirect(const QString redirect = QString("nothing"));
 | 
			
		||||
 | 
			
		||||
@ -68,18 +74,16 @@ public slots:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    QString name;
 | 
			
		||||
    QString fileName;
 | 
			
		||||
    QStringList dirs;
 | 
			
		||||
    bool debug;
 | 
			
		||||
    Ui::ExtScript *ui;
 | 
			
		||||
    // configuration
 | 
			
		||||
    void fromExternalConfiguration(const QMap<QString, QString> settings);
 | 
			
		||||
    QMap<QString, QString> getConfigurationFromFile(const QString fileName);
 | 
			
		||||
    QMap<QString, QString> toExternalConfiguration();
 | 
			
		||||
    // properties
 | 
			
		||||
    bool _active = true;
 | 
			
		||||
    QString _comment = QString("");
 | 
			
		||||
    QString _comment = QString("empty");
 | 
			
		||||
    QString _exec = QString("/usr/bin/true");
 | 
			
		||||
    int _interval = 1;
 | 
			
		||||
    QString _name = QString("none");
 | 
			
		||||
    bool _output = true;
 | 
			
		||||
    QString _prefix = QString("");
 | 
			
		||||
    Redirect _redirect = nothing;
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user