mirror of
https://github.com/fwbuilder/fwbuilder
synced 2026-03-24 04:07:55 +01:00
see #1466 storing workflow flags as QByteArray in setting using QDataStream serialization; changed format of the query string sent to the server using keyword arguments instead of the bit masks
This commit is contained in:
parent
51519696d2
commit
e5656609a3
@ -397,8 +397,15 @@ void FWBSettings::setDontSaveStdLib( bool f) { setValue(dontSaveStdLib,f);}
|
||||
bool FWBSettings::getShowUndoPanel() {return value(showUndoPanel).toBool();}
|
||||
void FWBSettings::setShowUndoPanel(bool f) {setValue(showUndoPanel, f);}
|
||||
|
||||
int FWBSettings::getUserWorkflowFlags() {return value(userWorkflowFlags).toInt();}
|
||||
void FWBSettings::setUserWorkflowFlags(int f) {setValue(userWorkflowFlags, f);}
|
||||
QByteArray FWBSettings::getUserWorkflowFlags()
|
||||
{
|
||||
return value(userWorkflowFlags).toByteArray();
|
||||
}
|
||||
|
||||
void FWBSettings::setUserWorkflowFlags(const QByteArray &f)
|
||||
{
|
||||
setValue(userWorkflowFlags, f);
|
||||
}
|
||||
|
||||
bool FWBSettings::haveScreenPosition(const QString &wname)
|
||||
{
|
||||
|
||||
@ -241,8 +241,8 @@ class FWBSettings : public QSettings {
|
||||
bool getShowUndoPanel();
|
||||
void setShowUndoPanel(bool);
|
||||
|
||||
int getUserWorkflowFlags();
|
||||
void setUserWorkflowFlags(int);
|
||||
QByteArray getUserWorkflowFlags();
|
||||
void setUserWorkflowFlags(const QByteArray &);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
@ -74,8 +74,7 @@ void FWCmdRule::notify()
|
||||
|
||||
void FWCmdRule::redo()
|
||||
{
|
||||
if (!wfl->checkFlag(UserWorkflow::RULE_MOD))
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
RuleSetModel* md = getRuleSetModel();
|
||||
redoOnModel(md);
|
||||
notify();
|
||||
@ -115,8 +114,7 @@ FWCmdRuleInsert::~FWCmdRuleInsert()
|
||||
|
||||
void FWCmdRuleInsert::redoOnModel(RuleSetModel *md)
|
||||
{
|
||||
if (!wfl->checkFlag(UserWorkflow::RULE_MOD))
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
if (insertedRule == 0) {
|
||||
if (ruleToInsert == 0)
|
||||
{
|
||||
@ -217,8 +215,7 @@ FWCmdRuleDelete::~FWCmdRuleDelete()
|
||||
|
||||
void FWCmdRuleDelete::redoOnModel(RuleSetModel *md)
|
||||
{
|
||||
if (!wfl->checkFlag(UserWorkflow::RULE_MOD))
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
if (fwbdebug)
|
||||
qDebug() << "FWCmdRuleDelete::redoOnModel(RuleSetModel *md)";
|
||||
foreach(Rule* rule, rulesToDelete)
|
||||
@ -276,8 +273,7 @@ void FWCmdRuleColor::redoOnModel(RuleSetModel *md)
|
||||
{
|
||||
QModelIndexList indexes;
|
||||
|
||||
if (!wfl->checkFlag(UserWorkflow::RULE_MOD))
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
|
||||
foreach(int ruleId, oldColors.keys())
|
||||
{
|
||||
@ -319,8 +315,7 @@ FWCmdRuleMove::FWCmdRuleMove(ProjectPanel *project, libfwbuilder::RuleSet* rules
|
||||
|
||||
void FWCmdRuleMove::redoOnModel(RuleSetModel *md)
|
||||
{
|
||||
if (!wfl->checkFlag(UserWorkflow::RULE_MOD))
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
move(md, direction);
|
||||
}
|
||||
|
||||
@ -368,8 +363,7 @@ FWCmdRuleRenameGroup::FWCmdRuleRenameGroup(ProjectPanel *project, RuleSet* rules
|
||||
|
||||
void FWCmdRuleRenameGroup::redoOnModel(RuleSetModel *md)
|
||||
{
|
||||
if (!wfl->checkFlag(UserWorkflow::RULE_MOD))
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
QModelIndex grp = md->index(oldName);
|
||||
md->renameGroup(grp, newName);
|
||||
}
|
||||
@ -392,8 +386,7 @@ FWCmdRuleRemoveFromGroup::FWCmdRuleRemoveFromGroup(ProjectPanel* project, RuleSe
|
||||
|
||||
void FWCmdRuleRemoveFromGroup::redoOnModel(RuleSetModel *md)
|
||||
{
|
||||
if (!wfl->checkFlag(UserWorkflow::RULE_MOD))
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
QModelIndex group = md->index(groupName);
|
||||
QModelIndex first = md->index(firstRule, 0);
|
||||
QModelIndex last = md->index(lastRule, 0);
|
||||
@ -437,8 +430,7 @@ FWCmdRuleNewGroup::FWCmdRuleNewGroup(ProjectPanel* project, RuleSet* ruleset, Ru
|
||||
|
||||
void FWCmdRuleNewGroup::redoOnModel(RuleSetModel *md)
|
||||
{
|
||||
if (!wfl->checkFlag(UserWorkflow::RULE_MOD))
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
QModelIndex first = md->index(firstRule, 0);
|
||||
QModelIndex last = md->index(lastRule, 0);
|
||||
QModelIndex index = md->createNewGroup(groupName, first.row(), last.row());
|
||||
@ -467,8 +459,7 @@ FWCmdRuleAddToGroup::FWCmdRuleAddToGroup(ProjectPanel* project, RuleSet* ruleset
|
||||
|
||||
void FWCmdRuleAddToGroup::redoOnModel(RuleSetModel *md)
|
||||
{
|
||||
if (!wfl->checkFlag(UserWorkflow::RULE_MOD))
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
QModelIndex first = md->index(firstRule, 0);
|
||||
QModelIndex last = md->index(lastRule, 0);
|
||||
|
||||
@ -501,8 +492,7 @@ void FWCmdRuleChange::selectAffectedRule()
|
||||
|
||||
void FWCmdRuleChange::redo()
|
||||
{
|
||||
if (!wfl->checkFlag(UserWorkflow::RULE_MOD))
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
prepareRuleSetView();
|
||||
FWCmdChange::redo();
|
||||
selectAffectedRule();
|
||||
@ -640,8 +630,7 @@ FWCmdRuleNegateRE::FWCmdRuleNegateRE(ProjectPanel *project,
|
||||
|
||||
void FWCmdRuleNegateRE::redo()
|
||||
{
|
||||
if (!wfl->checkFlag(UserWorkflow::RULE_MOD))
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
wfl->registerFlag(UserWorkflow::RULE_MOD, true);
|
||||
|
||||
prepareRuleSetView();
|
||||
RuleElement* ruleElement = RuleElement::cast(getObject());
|
||||
|
||||
@ -109,7 +109,7 @@ StartTipDialog::~StartTipDialog()
|
||||
* This does happen in unit tests and might happen on slow machines or
|
||||
* slow internet connections
|
||||
*/
|
||||
void StartTipDialog::closeEvent(QCloseEvent *event)
|
||||
void StartTipDialog::closeEvent(QCloseEvent*)
|
||||
{
|
||||
disconnect(http_getter, SIGNAL(done(const QString&)),
|
||||
this, SLOT(downloadComplete(const QString&)));
|
||||
|
||||
@ -31,6 +31,8 @@
|
||||
|
||||
#include <QtDebug>
|
||||
#include <QTimer>
|
||||
#include <QDataStream>
|
||||
|
||||
|
||||
/*
|
||||
* Create object UserWorkflow only after FWBSettings object has been
|
||||
@ -41,13 +43,13 @@ UserWorkflow::UserWorkflow()
|
||||
assert(st != NULL);
|
||||
start_timestamp = QDateTime::currentDateTime();
|
||||
report_query = NULL;
|
||||
int int_flags = st->getUserWorkflowFlags();
|
||||
int f = 1;
|
||||
for (int i=0; i<32; ++i)
|
||||
{
|
||||
if (int_flags & f) flags.insert((enum workflowFlags)(f));
|
||||
f = f << 1;
|
||||
}
|
||||
|
||||
QDataStream str(st->getUserWorkflowFlags());
|
||||
str.setVersion(QDataStream::Qt_4_0);
|
||||
str >> flags;
|
||||
|
||||
if (fwbdebug)
|
||||
qDebug() << "UserWorkflow flags initialization:" << flagsToQueryString();
|
||||
|
||||
// what if the user disabled tip of the day before they upgraded
|
||||
// to the version with UserWorkflow ? Or re-enabled version update
|
||||
@ -62,24 +64,18 @@ UserWorkflow::~UserWorkflow()
|
||||
if (report_query != NULL) delete report_query;
|
||||
}
|
||||
|
||||
int UserWorkflow::flagsToInt()
|
||||
void UserWorkflow::registerFlag(enum workflowFlags e, quint32 f)
|
||||
{
|
||||
int int_flags = 0;
|
||||
foreach(int f, flags) int_flags |= f;
|
||||
return int_flags;
|
||||
}
|
||||
if (fwbdebug)
|
||||
qDebug() << "UserWorkflow::registerFlag(" << e << "," << f << ")";
|
||||
flags.insert(e, f);
|
||||
|
||||
bool UserWorkflow::checkFlag(enum workflowFlags e)
|
||||
{
|
||||
return flags.contains(e);
|
||||
}
|
||||
QByteArray buffer;
|
||||
QDataStream str(&buffer, QIODevice::WriteOnly);
|
||||
str.setVersion(QDataStream::Qt_4_0);
|
||||
str << flags;
|
||||
|
||||
void UserWorkflow::registerFlag(enum workflowFlags e, bool f)
|
||||
{
|
||||
if (fwbdebug) qDebug() << "UserWorkflow::registerFlag(" << e << "," << f << ")";
|
||||
if (f) flags.insert(e);
|
||||
else flags.remove(e);
|
||||
st->setUserWorkflowFlags(flagsToInt());
|
||||
st->setUserWorkflowFlags(buffer);
|
||||
}
|
||||
|
||||
void UserWorkflow::registerTutorialViewing(const QString &tutorial_name)
|
||||
@ -88,6 +84,23 @@ void UserWorkflow::registerTutorialViewing(const QString &tutorial_name)
|
||||
registerFlag(UserWorkflow::GETTING_STARTED_TUTOTIAL, true);
|
||||
}
|
||||
|
||||
QString UserWorkflow::flagsToQueryString()
|
||||
{
|
||||
// query string of flags has the format uc=0&gs=1&ft=0 ...
|
||||
// each flag is a two-characters variable with a value of 0 or 1
|
||||
QStringList fl;
|
||||
fl << QString("uc=%1").arg(flags.value(UPDATE_CHECKS_DISABLED));
|
||||
fl << QString("gs=%1").arg(flags.value(GETTING_STARTED_TUTOTIAL));
|
||||
fl << QString("ft=%1").arg(flags.value(NEW_FW_WITH_TEMPLATE));
|
||||
fl << QString("fn=%1").arg(flags.value(NEW_FW_NO_TEMPLATE));
|
||||
fl << QString("rm=%1").arg(flags.value(RULE_MOD));
|
||||
fl << QString("co=%1").arg(flags.value(COMPILE));
|
||||
fl << QString("in=%1").arg(flags.value(INSTALL));
|
||||
fl << QString("im=%1").arg(flags.value(IMPORT));
|
||||
fl << QString("ti=%1").arg(flags.value(TIP_OF_THE_DAY_DISABLED));
|
||||
return fl.join("&");
|
||||
}
|
||||
|
||||
void UserWorkflow::report()
|
||||
{
|
||||
uint elapsed_time = QDateTime::currentDateTime().toTime_t() -
|
||||
@ -97,11 +110,14 @@ void UserWorkflow::report()
|
||||
// program stayed open for over 24 hr, it would return incorrect
|
||||
// session duration.
|
||||
|
||||
|
||||
if (fwbdebug)
|
||||
{
|
||||
QString s("%1");
|
||||
qDebug() << "UserWorkflow::report():" << s.arg(flagsToInt(), 0, 16);
|
||||
QByteArray buffer;
|
||||
QDataStream str(&buffer, QIODevice::WriteOnly);
|
||||
str.setVersion(QDataStream::Qt_4_0);
|
||||
str << flags;
|
||||
|
||||
qDebug() << "UserWorkflow::report():" << flagsToQueryString();
|
||||
qDebug() << "Session:" << elapsed_time << "sec";
|
||||
}
|
||||
|
||||
@ -118,9 +134,16 @@ void UserWorkflow::report()
|
||||
if (report_override_url != NULL)
|
||||
report_url = QString(report_override_url);
|
||||
|
||||
// start http query to get latest version from the web site
|
||||
// closing report url has three parameters:
|
||||
// %1 = version
|
||||
// %2 = uuid
|
||||
// %3 = a query string of flags in the format uc=0&gs=1&ft=0 ...
|
||||
// each flag is a two-characters variable with a value of 0 or 1
|
||||
|
||||
QString url = QString(report_url)
|
||||
.arg(VERSION).arg(st->getAppGUID()).arg(flagsToInt());
|
||||
.arg(VERSION).arg(st->getAppGUID()).arg(flagsToQueryString());
|
||||
|
||||
// start http query
|
||||
if (!report_query->get(url) && fwbdebug)
|
||||
{
|
||||
qDebug() << "HttpGet error: " << report_query->getLastError();
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
|
||||
#include <QObject>
|
||||
#include <QDateTime>
|
||||
#include <QSet>
|
||||
#include <QHash>
|
||||
|
||||
#include "HttpGet.h"
|
||||
|
||||
@ -65,36 +65,37 @@
|
||||
*/
|
||||
|
||||
#define CLOSING_REPORT_URL \
|
||||
"http://update.fwbuilder.org/reports/closing.cgi?v=%1&uuid=%2&flags=%3"
|
||||
"http://update.fwbuilder.org/reports/closing.cgi?v=%1&uuid=%2&%3"
|
||||
|
||||
class UserWorkflow : public QObject {
|
||||
|
||||
Q_OBJECT;
|
||||
|
||||
public:
|
||||
enum workflowFlags { UPDATE_CHECKS_DISABLED = 1,
|
||||
GETTING_STARTED_TUTOTIAL = 2,
|
||||
NEW_FW_WITH_TEMPLATE = 4,
|
||||
NEW_FW_NO_TEMPLATE = 8,
|
||||
RULE_MOD = 16,
|
||||
COMPILE = 32,
|
||||
INSTALL = 64,
|
||||
IMPORT = 128,
|
||||
TIP_OF_THE_DAY_DISABLED = 256,
|
||||
|
||||
enum workflowFlags {
|
||||
UPDATE_CHECKS_DISABLED,
|
||||
GETTING_STARTED_TUTOTIAL,
|
||||
NEW_FW_WITH_TEMPLATE,
|
||||
NEW_FW_NO_TEMPLATE,
|
||||
RULE_MOD,
|
||||
COMPILE,
|
||||
INSTALL,
|
||||
IMPORT,
|
||||
TIP_OF_THE_DAY_DISABLED,
|
||||
};
|
||||
|
||||
private:
|
||||
QDateTime start_timestamp;
|
||||
QSet<enum workflowFlags> flags;
|
||||
QHash<quint32, quint32> flags;
|
||||
HttpGet *report_query;
|
||||
|
||||
int flagsToInt();
|
||||
|
||||
|
||||
QString flagsToQueryString();
|
||||
|
||||
public:
|
||||
UserWorkflow();
|
||||
virtual ~UserWorkflow();
|
||||
bool checkFlag(enum workflowFlags e);
|
||||
void registerFlag(enum workflowFlags e, bool f);
|
||||
void registerFlag(enum workflowFlags e, quint32 f);
|
||||
void registerTutorialViewing(const QString &tutorial_name);
|
||||
void report();
|
||||
bool reportInProgress() { return report_query != NULL; }
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user