[FIX] Updating status with QSettings will get stuck sometimes.

This commit is contained in:
iaom 2021-02-25 14:40:44 +08:00
parent 051447ec82
commit fbb15e4a14
6 changed files with 29 additions and 19 deletions

View File

@ -35,8 +35,9 @@ GlobalSettings *GlobalSettings::getInstance()
GlobalSettings::GlobalSettings(QObject *parent) : QObject(parent)
{
m_settings = new QSettings("org.ukui", "ukui-search", this);
m_block_dirs_settings = new QSettings("org.ukui","ukui-search-block-dirs",this);
m_settings = new QSettings("org.ukui/ukui-search", "ukui-search", this);
// m_settings->setAtomicSyncRequired(false);
m_block_dirs_settings = new QSettings("org.ukui/ukui-search","ukui-search-block-dirs",this);
m_block_dirs_settings->setIniCodec(QTextCodec::codecForName("UTF-8"));
this->forceSync();
//the default number of transparency in mainwindow is 0.7
@ -58,7 +59,6 @@ GlobalSettings::GlobalSettings(QObject *parent) : QObject(parent)
GlobalSettings::~GlobalSettings()
{
}
const QVariant GlobalSettings::getValue(const QString &key)
@ -75,11 +75,11 @@ void GlobalSettings::reset(const QString &key)
{
m_cache.remove(key);
QtConcurrent::run([=]() {
if (m_mutex.tryLock(1000)) {
// if (m_mutex.tryLock(1000)) {
m_settings->remove(key);
m_settings->sync();
m_mutex.unlock();
}
// m_settings->sync();
// m_mutex.unlock();
// }
});
Q_EMIT this->valueChanged(key);
}
@ -149,14 +149,19 @@ QStringList GlobalSettings::getBlockDirs()
//MouseZhangZh
void GlobalSettings::setValue(const QString &key, const QVariant &value)
{
// qDebug()<<"setvalue========"<<key<<":"<<value;
m_cache.insert(key, value);
// m_settings->sync();
QtConcurrent::run([=]() {
// if (m_mutex.tryLock(1000)) {
m_mutex.lock();
// qDebug()<<m_settings->status();
// if (m_mutex.tryLock(1000)) {
// m_mutex.lock();
m_settings->setValue(key, value);
// qDebug()<<"setvalue========finish!!!"<<key<<":"<<value;
m_settings->sync();
m_mutex.unlock();
// }
// qDebug()<<"setvalue========sync!!!"<<key<<":"<<value;
// m_mutex.unlock();
// }
});
}

View File

@ -169,6 +169,7 @@ void FirstIndex::run(){
if (p_indexGenerator)
delete p_indexGenerator;
p_indexGenerator = nullptr;
GlobalSettings::getInstance()->forceSync();
::_exit(0);
}
else if(pid < 0)
@ -182,13 +183,14 @@ void FirstIndex::run(){
}
GlobalSettings::getInstance()->setValue(INOTIFY_NORMAL_EXIT, "2");
int retval = write(fifo_fd, buffer, strlen(buffer));
if(retval == -1)
{
qWarning("write error\n");
}
qDebug("write data ok!\n");
GlobalSettings::getInstance()->reset(INOTIFY_NORMAL_EXIT);
return;
}

View File

@ -420,6 +420,7 @@ fork:
qDebug() << "select timeout!";
::free(read_timeout);
IndexGenerator::getInstance()->~IndexGenerator();
GlobalSettings::getInstance()->forceSync();
::_exit(0);
}else{
GlobalSettings::getInstance()->setValue(INOTIFY_NORMAL_EXIT, "0");

View File

@ -20,7 +20,7 @@
#include "config-file.h"
bool ConfigFile::writeCommonly(QString message){
QSettings *m_qSettings=new QSettings(QDir::homePath()+"/.config/org.ukui/ukui-search/ukui-search.conf",QSettings::IniFormat);
QSettings *m_qSettings=new QSettings(HOMEPAGE_SETTINGS,QSettings::IniFormat);
QStringList messagelist=message.split("/");
QString appname=messagelist.last();
if(!appname.contains("desktop"))
@ -39,7 +39,7 @@ bool ConfigFile::writeCommonly(QString message){
}
QStringList ConfigFile::readCommonly(){
QSettings *m_qSettings=new QSettings(QDir::homePath()+"/.config/org.ukui/ukui-search/ukui-search.conf",QSettings::IniFormat);
QSettings *m_qSettings=new QSettings(HOMEPAGE_SETTINGS,QSettings::IniFormat);
QStringList returnlist;
QMap<QString,int> quicklycount;
m_qSettings->beginGroup("Commonly");
@ -66,7 +66,7 @@ QStringList ConfigFile::readCommonly(){
}
bool ConfigFile::writeRecently(QString message){
QSettings *m_qSettings=new QSettings(QDir::homePath()+"/.config/org.ukui/ukui-search/ukui-search.conf",QSettings::IniFormat);
QSettings *m_qSettings=new QSettings(HOMEPAGE_SETTINGS,QSettings::IniFormat);
m_qSettings->beginGroup("Recently");
QStringList recently=m_qSettings->value("Recently").toStringList();
@ -89,7 +89,7 @@ bool ConfigFile::writeRecently(QString message){
}
QStringList ConfigFile::readRecently(){
QSettings *m_qSettings=new QSettings(QDir::homePath()+"/.config/org.ukui/ukui-search/ukui-search.conf",QSettings::IniFormat);
QSettings *m_qSettings=new QSettings(HOMEPAGE_SETTINGS,QSettings::IniFormat);
m_qSettings->beginGroup("Recently");
QStringList recently=m_qSettings->value("Recently").toStringList();
@ -113,7 +113,7 @@ QMap<QString,QStringList> ConfigFile::readConfig(){
}
void ConfigFile::receiveMessage(QString message){
QFile file(QDir::homePath()+"/.config/org.ukui/ukui-search/ukui-search.conf");
QFile file(HOMEPAGE_SETTINGS);
if(!file.exists()){
file.open( QIODevice::ReadWrite | QIODevice::Text );
file.close();

View File

@ -25,6 +25,7 @@
#include <QDebug>
#include <QFileInfo>
#include <QDir>
#define HOMEPAGE_SETTINGS QDir::homePath()+"/.config/org.ukui/ukui-search/ukui-search-homepage.conf"
class ConfigFile : public QObject
{
Q_OBJECT

View File

@ -72,6 +72,7 @@ void messageOutput(QtMsgType type, const QMessageLogContext &context, const QStr
bool showDebug = true;
// QString logFilePath = QStandardPaths::writableLocation(QStandardPaths::TempLocation) + "/ukui-search.log";
// QString logFilePath = QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + "/.config/org.ukui/ukui-search/ukui-search.log";
QString logFilePath = QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + "/.config/org.ukui/ukui-search.log";
if (!QFile::exists(logFilePath)) {
showDebug = false;