From eff51df9b7c1d767829cd9d50bc0ed23812f7c75 Mon Sep 17 00:00:00 2001 From: "Nothing2Do.fr" Date: Mon, 11 Oct 2021 21:08:23 +0200 Subject: [PATCH] long time far away, attempt to be multi-threaded (1 main and 1 SQL). --- README.md | 1 + android/AndroidManifest.xml | 16 +-- android/build.gradle | 1 + diary-mobile.pro | 2 +- mainwindow.cpp | 271 ++++++++++++++++++++---------------- mainwindow.h | 30 ++-- 6 files changed, 179 insertions(+), 142 deletions(-) diff --git a/README.md b/README.md index 05e87fe..512ca64 100755 --- a/README.md +++ b/README.md @@ -12,3 +12,4 @@ ftp://[user]:[pass]@[hostname]/[filename] todo : add autoupdate feature, and ... + diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index c99d683..2117b99 100755 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -1,6 +1,6 @@ - - + + @@ -18,11 +18,9 @@ - - @@ -46,12 +44,10 @@ - - - - - - - - + + diff --git a/android/build.gradle b/android/build.gradle index 989d079..a997029 100755 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,6 +2,7 @@ buildscript { repositories { google() jcenter() + //maven { url "http://jcenter.bintray.com"} } dependencies { diff --git a/diary-mobile.pro b/diary-mobile.pro index 4edd30f..b3e6e3c 100755 --- a/diary-mobile.pro +++ b/diary-mobile.pro @@ -28,7 +28,7 @@ MOBILITY = QMAKE_CXXFLAGS += -fpermissive -Wswitch TRANSLATIONS = diary-mobile_fr_FR.ts diary-mobile_en_EN.ts ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android - +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x050F00 OTHER_FILES += \ android/AndroidManifest.xml \ ui.sql \ diff --git a/mainwindow.cpp b/mainwindow.cpp index ad716ca..5e56d8e 100755 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -38,11 +38,12 @@ #include #include #include +#include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { qDebug()<<"begin of MainWindows"; - qDebug()<< QSslSocket::supportsSsl()<<"!\n"; + qDebug()<<"SSL support : "<< QSslSocket::supportsSsl()<<"!\n"; conf=new QSettings(QString("FwF"), QString("diary-mobile"), this); orienta=1; if(conf->allKeys().size()==0){ @@ -58,35 +59,36 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) page=0; np=0; //currenttype=conf->value(QString("currenttype"), QString("buttons")).toString(); + Worker *wk = new Worker; + wk->moveToThread(&thread); screen=new QWidget(this); screen->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); grid=new QGridLayout(screen); grid->setSizeConstraint(QLayout::SetMinAndMaxSize); - //signalmap=new QSignalMapper(this); - //shell=new QProcess(this);a desperated attempt to get the output of my cmd, i've try Qprocess (but don't get it) valeur=new QMap; - qDebug()<<"1' connect : "<value(QString("first")).toInt()==1)){ qDebug()<<"second"; bool ok; - QString ser=QInputDialog::getText(this, tr("init file"), tr("Enter the URL to download the init file"), QLineEdit::Normal, conf->value(QString("init")).toString(), &ok); - conf->setValue(QString("init"), ser); - downSQL(ser); + QString ser=QInputDialog::getText(this, tr("init file"), tr("Enter the URL to download the init file (SQL one)"), QLineEdit::Normal, conf->value(QString("init")).toString(), &ok); + if(ok){conf->setValue(QString("init"), ser); + downSQL(ser);} + d.lock(); conf->setValue(QString("first"), 2); } statusBar()->addPermanentWidget(label); menuBar()->setVisible(conf->value(QString("menu")).toBool()); //menuBar()->setVisible(true); - d.lock(); + start(); } void MainWindow::start(){ @@ -94,9 +96,12 @@ void MainWindow::start(){ way=conf->value(QString("start"), conf->value(QString("startdefault"))).toStringList(); QString b=way.last(); way.removeLast(); - qDebug()<<"a="<count(), maxc=conf->value(QString("maxcolumn")).toInt(), maxl=conf->value(QString("maxline")).toInt(); grid->addWidget(a, c/maxc, c%maxc, 1, 1, Qt::AlignJustify| Qt::AlignVCenter | Qt::AlignHCenter); - QObject::connect(a, SIGNAL(released()), signalmap, SLOT(map())); - signalmap->setMapping(a, key); + //QObject::connect(a, SIGNAL(released()), signalmap, SLOT(map())); + //QObject::connect(a, a->released(key), this, action(&key.toStdString())); + //QObject::connect(a, SIGNAL(released()), this, SLOT(action(&key))); + connect(a, &CLabel::released, [this, key] {action(key); }); +//connect(a, &A::foo, b, [a, b]{}); + + //signalmap->setMapping(a, key); useless, it seems if(c==(maxc*maxl)-2)return 1; //(p-1)*(ml*mc)+c nombre de boutons en tout osef, @@ -273,7 +283,7 @@ void MainWindow::action(const QString &a){ a desperated attempt to get the output of my cmd, i've try Qprocess (but don't get it)*/ } else if(b[0]==QString("sav")){ - Msav.lock(); + //Msav.lock(); sav(c); } @@ -297,16 +307,16 @@ void MainWindow::action(const QString &a){ //int t=grid->count(); flush(); int max=conf->value(QString("maxcolumn")).toInt()*conf->value(QString("maxline")).toInt(); - if(!page)tmp=q->seek(0); - else tmp=q->seek(page*(max-2)); + if(!page)tmp=q.seek(0); + else tmp=q.seek(page*(max-2)); //if(deb)QMessageBox::information(this, tr("result", "box title to debug prevpage"), int(tmp)); - printItem(*q); + printItem(q); } else if(b[0]==QString("nextpage")){ page++; flush(); - printItem(*q); + printItem(q); } else if(b[0]==QString("setfile")){ bool ok=0; @@ -412,10 +422,10 @@ void MainWindow::action(const QString &a){ lastprint=QString("-hist"); for(int i=0; isize();a++){ QString tmp("box "+tmpvalues[a]+"#"); - addWidget(tmp, new CLabel(tmpkeys[a], *conf)); + //addWidget(tmp, new CLabel(tmpkeys[a], *conf, tmpvalues[a])); //if(deb)QMessageBox::information(this, QString("val"), QString(tmpkeys[a]+"=="+tmpvalues[a])); } }else if(b[1]==QString("edit")){ flush(); for(int a=0;asize();a++){ QString tmp("val "+tmpkeys[a]+"#"); - addWidget(tmp, new CLabel(tmpkeys[a], *conf)); + addWidget(tmp, new CLabel(tmpkeys[a], *conf, tmpvalues[a])); //if(deb)QMessageBox::information(this, QString("val"), QString(tmpkeys[a]+"=="+tmpvalues[a])); } }else if(bs==2){ @@ -583,10 +593,11 @@ void MainWindow::flush(){ } //widget.clear(); } -CLabel::CLabel( const QString& text, QSettings & set, int tmpid, QWidget * parent ) : QLabel(parent) +CLabel::CLabel( const QString& text, QSettings & set, const QString& act, int tmpid, QWidget * parent ) : QLabel(parent) { QString a=set.value(QString("currenttype")).toString(); m_style=set.value(a).toString(); + action=act; setText(text); setWordWrap(true); setLineWidth(5); @@ -599,6 +610,9 @@ CLabel::CLabel( const QString& text, QSettings & set, int tmpid, QWidget * paren CLabel::~CLabel() { } +QString CLabel::getAction(){ + return action; +} void CLabel::mousePressEvent (QMouseEvent * event ) { //t.currentTime(); @@ -632,33 +646,44 @@ QSettings * CLabel::getSettings(){ return settings; } /*void MainWindow::debug(int col){ - q->first(); - while(q->isValid()){ - int k=q->at(); + q.first(); + while(q.isValid()){ + int k=q.at(); qDebug()<<"n°"<next(); + q.next(); } }*/ -void MainWindow::connectDB(){ - db = QSqlDatabase::addDatabase("QSQLITE"); - //db = QSqlDatabase::addDatabase("QPSQL"); - db.setHostName(conf->value(QString("host")).toString()); - db.setDatabaseName(conf->value(QString("database")).toString()); - db.setUserName(conf->value(QString("user")).toString()); - db.setPassword(conf->value(QString("password")).toString()); +int MainWindow::connectDB(){ + qDebug()<<"connectDB() with "<value(QString("sqldbtype")).toString()<<"->"<value(QString("sqluser")).toString()<<":"<value(QString("sqlpassword")).toString()<<"@"<value(QString("sqlhost")).toString()<<"/"<value(QString("sqlname")).toString(); + //db = QSqlDatabase::addDatabase(conf->value(QString("sqldbtype")).toString()); + db.addDatabase(conf->value(QString("sqldatabase")).toString()); + db.setDatabaseName(conf->value(QString("sqlname")).toString()); + db.setHostName(conf->value(QString("sqlhost")).toString()); + db.setUserName(conf->value(QString("sqluser")).toString()); + db.setPassword(conf->value(QString("sqlpassword")).toString()); db.setConnectOptions(conf->value(QString("SQLsettings")).toString());//10sec, - qDebug()<<"db.open() ? "< error connection SQL : "< database : "<value(QString("sqldbtype")).toString(); + } + + //q=new QSqlQuery(db); + QSqlQuery q(db); + //qq=new QSqlQuery(db); + QSqlQuery qq(db); + return status; } void MainWindow::firstrun(){ qDebug()<<"firstrun()"; - conf->setValue(QString("host"), QVariant("127.0.0.1")); + conf->setValue(QString("sqlhost"), QVariant("127.0.0.1")); conf->setValue(QString("port"),QVariant(5432)); - conf->setValue(QString("user"), QVariant("user")); + conf->setValue(QString("sqluser"), QVariant("user")); conf->setValue(QString("servercert"), QVariant("a.pem")); - conf->setValue(QString("database"), QVariant("db.db")); - conf->setValue(QString("password"), QVariant("pass")); + conf->setValue(QString("sqldatabase"), QVariant("db.db")); + conf->setValue(QString("sqlpassword"), QVariant("pass")); + conf->setValue(QString("sqlname"), QVariant("database")); conf->setValue(QString("fileraw"), QVariant("raw")); conf->setValue(QString("filebuttons"), QVariant("ui.sql+")); conf->setValue(QString("maxcolumn"), QVariant(3)); @@ -671,7 +696,7 @@ void MainWindow::firstrun(){ conf->setValue(QString("download"), QVariant("http:////"+conf->value(QString("filebuttons")).toString())); conf->setValue(QString("downloaduser"), QVariant("")); conf->setValue(QString("downloadpass"), QVariant("")); - + conf->setValue(QString("sqldbtype"), QVariant("QSQLITE")); conf->setValue(QString("init"), QVariant("http://www.nothing2do.fr/init")); conf->setValue(QString("userftp"), QVariant("")); conf->setValue(QString("hostftp"), QVariant("")); @@ -707,42 +732,43 @@ void MainWindow::firstrun(){ conf->setValue(QString("startdefault"), QVariant("begin")); conf->setValue(QString("actionmenu"), QVariant("")); //conf->setValue(QString("process"), QVariant(0)); - d.unlock(); + //d.unlock(); qDebug()<<"firstrun() finished"; } QString MainWindow::get(int column){ - return q->value(column).toString(); + return q.value(column).toString(); } QString MainWindow::get2(int column){ - return qq->value(column).toString(); + return qq.value(column).toString(); } int MainWindow::exec(const QList & a){ - qDebug()<<"exec("<prepare: "<prepare(a.at(0)); + qDebug()<<"exec("<bindValue(j-1, a.at(j)); + q.bindValue(j-1, a.at(j)); qDebug()<<"bind "<exec(); - QSqlError b=q->lastError(); + qDebug()<<"q.exec(a[0]):"<isSelect())return q->size(); - else if(q->isValid()) return 0; + if(q.isSelect())return q.size(); + else if(q.isValid()) return 0; return -1; } int MainWindow::exec2(const QList & a){ - qDebug()<<"exec("<prepare: "<prepare(a[0]); - qq->prepare(a[0]); + qDebug()<<"exec("<bindValue(j-1, a[j]); + qq.bindValue(j-1, a[j]); qDebug()<<"bind "<exec(); - QSqlError b=qq->lastError(); + qDebug()<<"exec():"<isSelect())return qq->size(); - else if (qq->isValid()) return 0; + if(q.isSelect())return qq.size(); + else if (qq.isValid()) return 0; else return -1; } void MainWindow::entry(const QString &a){ @@ -770,8 +796,8 @@ void MainWindow::entry(const QString &a){ else c=context+", "+a+" : "+entry; QList d({conf->value(QString("addraw")).toString(), time, c}); if(!exec2(d))qDebug()<<"exec don't works (entry(QString))"; - QSqlError b=q->lastError(); - if (b.isValid())qDebug()<<"q->lastError():"<setText(a); exec(tmp); page=0; - //while(q->next()){ - printItem(*q); + //while(q.next()){ + printItem(q); //} showExpanded(); } @@ -831,9 +857,9 @@ void MainWindow::chooseDB(const QString & b){ flush(); QString c="%"+b+"%", a="buttons"; qDebug()<<"exec()="<({conf->value(QString("choose"+a)).toString(), c})); - while (q->next()) { - QString action="edit "+q->value(0).toString(); - addWidget(action, new CLabel(q->value(1).toString(), *conf)); + while (q.next()) { + QString action="edit "+q.value(0).toString(); + addWidget(action, new CLabel(q.value(1).toString(), *conf, *&action)); } } void MainWindow::chooseDB(const QString & a,const QString & b){ @@ -841,9 +867,9 @@ void MainWindow::chooseDB(const QString & a,const QString & b){ QString c="%"+b+"%"; qDebug()<<"exec()="<({conf->value(QString("choose"+a)).toString(), c})); - while (q->next()) { - QString action="edit "+q->value(0).toString(); - addWidget(action, new CLabel(q->value(1).toString(), *conf)); + while (q.next()) { + QString action="edit "+q.value(0).toString(); + addWidget(action, new CLabel(q.value(1).toString(), *conf, *&action)); } } void MainWindow::editDB(const QString & a, const QString & b){ @@ -852,11 +878,11 @@ void MainWindow::editDB(const QString & a, const QString & b){ if(deb)QMessageBox::information(this, tr("EditDB", "box title to debug editDB"), txt); exec(QList({tmp, b})); - if(q->isSelect())q->first(); + if(q.isSelect())q.first(); bool ok; - QString keyword=q->value(1).toString(); - QString label=q->value(2).toString(); - QString action=q->value(3).toString(); + QString keyword=q.value(1).toString(); + QString label=q.value(2).toString(); + QString action=q.value(3).toString(); QString tmpkeyword, tmplabel, tmpaction; if(conf->value(QString("multiline")).toBool())tmpkeyword=QInputDialog::getMultiLineText(this, tr("keyword", "Title of box where ask for button's keyword"), tr("new keyword", "question to get new button's keyword"), keyword, &ok); else tmpkeyword=QInputDialog::getText(this, tr("keyword", "Title of box where ask for button's keyword"), tr("new keyword", "question to get new button's keyword"), QLineEdit::Normal, keyword, &ok); @@ -902,13 +928,13 @@ void MainWindow::sendRAW(){ a.open(QIODevice::WriteOnly/*|QIODevice::Text*/); QTextStream b(&a); //int c=conf->value(QString("columnraw")).toInt()-1; - int c=q->record().count()-1; + int c=q.record().count()-1; QString sep=conf->value(QString("sepcolraw")).toString(); - while (q->next()) { + while (q.next()) { for (int i=0; ivalue(i).toString()<value(c).toString()<<"\n"; + b<exec("PRAGMA foreign_keys=OFF;"); - q->exec("BEGIN TRANSACTION;");// these 2 line is SQLite specific + q.exec("PRAGMA foreign_keys=OFF;"); + q.exec("BEGIN TRANSACTION;");// these 2 line is SQLite specific int b=in.count('\n'); QString d=conf->value(QString("sql")+a).toString(), sep=conf->value(QString("sepcol")+a).toString(); qDebug()<<"sql"<bindValue(j, tmp); + q.bindValue(j, tmp); qDebug()<<"bind "<exec() : "<exec()<<" lastError()="<lastError(); + qDebug()<<"q.exec() : "<record().count()-1; + int d=q.record().count()-1; QString sep=conf->value(QString("sepcol")+a).toString(); - while (q->next()) { + while (q.next()) { for (int i=0; ivalue(i).toString()<value(d).toString()<<"\n"; + c<value(QString("userftp")).toString()+QString(":")+conf->value(QString("passftp")).toString()+QString("@")+conf->value(QString("hostftp")).toString()+QString("/")+conf->value(QString("file")+a).toString()); @@ -1103,7 +1129,7 @@ void MainWindow::sav(const QString & a){ QSslConfiguration ssl; ssl.setProtocol(QSsl::TlsV1_3); rq->setSslConfiguration(ssl); - //rq->setSslConfiguration(QSslConfiguration::defaultConfiguration()); + //rq.setSslConfiguration(QSslConfiguration::defaultConfiguration()); rep=net->put(*rq, b.readAll()); b.close(); qDebug()<<"net->put : "<first(); + q.first(); //int count=0; - QString key=q->value(1).toString(); - QVariant id=q->value(0); - while(q->next()){ + QString key=q.value(1).toString(); + QVariant id=q.value(0); + while(q.next()){ //count++; - key=q->value(1).toString()+" "+key; + key=q.value(1).toString()+" "+key; } if(!key.contains(keyword)){// it isn't possible to have 2 buttons with same label and action key=key+" "+keyword; @@ -1154,13 +1180,13 @@ void MainWindow::remove(const QString & type, const QString & keyword, const QSt tmp.append(action); qDebug()<<"tmp.size()="<disconnect(); - d.unlock(); + //d.unlock(); } /*void MainWindow::addMedia(const QString & a){ if((video)&&(playlist)){ @@ -1251,13 +1277,13 @@ void MainWindow::action(){ void MainWindow::mass(const QString & type, const QString & column, const QString & before, const QString & after){ exec(QList({conf->value(QString("change")+type).toString(), column})); QString key; - while(q->next()){ - int n=q->record().indexOf(column); + while(q.next()){ + int n=q.record().indexOf(column); key=get(n); if(key.contains(before)){ key.replace(before, after); QList tmp({conf->value(QString("update")+type).toString()}); - for(int t=0;trecord().count();t++){ + for(int t=0;tdoWork(a); connect(m, SIGNAL(downloaded()), SLOT(readSQL())); } void MainWindow::readSQL(){ disconnect(m, SIGNAL(downloaded())); qDebug()<<"readSQL"; QByteArray in=m->downloadedData(); - q->exec("PRAGMA foreign_keys=OFF;"); - q->exec("BEGIN TRANSACTION;");// these 2 line is SQLite specific - int b=in.count('\n'); + q.exec("PRAGMA foreign_keys=OFF;"); + q.exec("BEGIN TRANSACTION;");// these 2 line is SQLite specific + long long int b=in.count('\n'); for(int i=0;iexec(in.split('\n').at(i)); + //q.exec(in.split('\n').at(i)); + doSQL(in.split('\n').at(i)); } - emit datafilled(); + } void MainWindow::debug(){ if(deb)deb=0; @@ -1319,24 +1347,23 @@ bool MainWindow::printItem(QSqlQuery & a){ qDebug()<<"printItem()"; if(page){ QString tmp("prevpage"); - addWidget(tmp, new CLabel(tr("Prev"), *conf)); + addWidget(tmp, new CLabel(tr("Prev"), *conf, tmp)); } bool t; do{ - int tmp=0; + unsigned int tmp=0; QString tmp4=a.value(actCol).toString(); - if(a.isValid())tmp=addWidget(tmp4, new CLabel(a.value(labCol).toString(), *conf, a.value(idcol).toInt())); + if(a.isValid())tmp=addWidget(tmp4, new CLabel(a.value(labCol).toString(), *conf, tmp4, a.value(idcol).toInt())); if(tmp==1){ QString tmp3("nextpage"); - addWidget(tmp3, new CLabel(tr("Next"), *conf)); + addWidget(tmp3, new CLabel(tr("Next"), *conf, QString("next"))); return 1; } i++; t=a.next(); }while(t); qDebug()<<"end printItem : "<value(t).toString(); @@ -1355,10 +1382,14 @@ void MainWindow::get2(const QString & d, const QString &b){ label->setText(a); exec2(tmp); page=0; - //while(q->next()){ - printItem(*qq); + //while(q.next()){ + printItem(qq); //} } /*void MainWindow::shellReady(){ QMessageBox::information(this, QString("shell"), QString("shell ready")); }*/ +void MainWindow::doSQL(const QString & a){ + q.exec(a); + emit SQLdone(); +} diff --git a/mainwindow.h b/mainwindow.h index 5649d30..01b622b 100755 --- a/mainwindow.h +++ b/mainwindow.h @@ -63,8 +63,6 @@ #ifndef FILEDOWNLOADER_H #define FILEDOWNLOADER_H - - class FileDownloader : public QObject { Q_OBJECT @@ -82,19 +80,29 @@ private: }; #endif // FILEDOWNLOADER_H +class Worker : public QObject +{ + Q_OBJECT +public slots: + void doWork(const QString &); +signals: + void resultReady(const QString &); +}; + class CLabel : public QLabel { Q_OBJECT - QString m_style; + QString m_style, action; QSettings * settings; QTime t; int id; QWidget * parents; public: - explicit CLabel(const QString&, QSettings &, int=0, QWidget * parent = 0 ); + explicit CLabel(const QString&, QSettings &, const QString&, int=0, QWidget * parent = 0 ); ~CLabel(); void SetTextToLabel(const QString &); QSettings * getSettings(); + QString getAction(); signals: void clicked(); void pressed(); @@ -131,7 +139,8 @@ public: void mass(const QString &, const QString &, const QString &, const QString &); void downSQL(const QString &); void debug(); -private slots: +protected slots: + void doSQL(const QString &); void readSQL(); void tmpdown(); void readData(); @@ -148,7 +157,7 @@ private slots: void createMenuBar(); void toggleMenu(); void flush(); - void connectDB(); + int connectDB(); void firstrun(); QString get(int); QString get2(int); @@ -188,6 +197,7 @@ public slots: signals: void datafilled(); void writed(); + void SQLdone(); private: //sax2 xml; //QsKineticScroller * ks; @@ -202,11 +212,14 @@ private: QSettings *conf; QString tmp, tmp2, file, lastprint, currenttype, savtitle, beforekey, beforeactionmenu, beforekeyback, beforevolumedown, beforevolumeup;//host, user, tmp, password, servercert,database; QMenu *FileMenu, *EditMenu, *HackMenu; - QSignalMapper *signalmap; + //QSignalMapper *signalmap; QStringList way; QSqlDatabase db; - QSqlQuery *q, *qq; + QSqlQuery q, qq; QSqlRecord r; + Worker * wk; + QThread thread; + QString dbsql; FileDownloader * m; QNetworkAccessManager *net; QNetworkReply * rep; @@ -217,6 +230,5 @@ private: QMap * valeur; }; - #endif // MAINWINDOW_H -- 2.45.1