1
0
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:
Vadim Kurland 2010-05-26 19:10:07 +00:00
parent 51519696d2
commit e5656609a3
7 changed files with 92 additions and 72 deletions

View File

@ -1 +1 @@
#define BUILD_NUM 2935
#define BUILD_NUM 2936

View File

@ -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)
{

View File

@ -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:

View File

@ -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());

View File

@ -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&)));

View File

@ -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();

View File

@ -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; }