From 6ad33d4ad4d2f0019e6e9d75d94e27e2c5921d5a Mon Sep 17 00:00:00 2001 From: Spoike Date: Mon, 21 Jun 2021 13:36:30 +0000 Subject: [PATCH] Avoid writing out a new xmpp.cfg file unless there's actually a change. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5888 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- plugins/jabber/jabberclient.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/plugins/jabber/jabberclient.c b/plugins/jabber/jabberclient.c index a2136dbf4..6c9531609 100644 --- a/plugins/jabber/jabberclient.c +++ b/plugins/jabber/jabberclient.c @@ -83,6 +83,7 @@ static struct icefuncs_t *piceapi; #endif static qboolean jclient_needreadconfig; +static qboolean jclient_configdirty; static qboolean jclient_updatebuddylist; static jclient_t *jclient_action_cl; static buddy_t *jclient_action_buddy; @@ -2469,12 +2470,14 @@ int JCL_ConExecuteCommand(qboolean isinsecure) if (jclient_action_cl->status == JCL_INACTIVE) jclient_action_cl->status = JCL_DEAD; jclient_action = ACT_NONE; + jclient_configdirty = true; return 2; //ask to not store in history. case ACT_ADDFRIEND: if (*args) XMPP_AddFriend(jclient_action_cl, args, ""); break; case ACT_SETBALIAS: + jclient_configdirty = true; Q_strncpyz(jclient_action_buddy->name, args, sizeof(jclient_action_buddy->name)); if (jclient_action_buddy->btype == BT_ROSTER) JCL_SendIQf(jclient_action_cl, NULL, "set", NULL, "", jclient_action_buddy->accountdomain, jclient_action_buddy->name); @@ -3656,6 +3659,8 @@ static qboolean JCL_BuddyVCardReply(jclient_t *jcl, xmltree_t *tree, struct iq_s bi->imagehash = strdup(hasha); bi->image = strdup(photobinval->body); bi->imagemime = strdup(photomime); + + jclient_configdirty = true; } } else @@ -5808,7 +5813,10 @@ void JCL_CloseConnection(jclient_t *jcl, const char *reason, qboolean reconnect) for (i = 0; i < sizeof(jclients)/sizeof(jclients[0]); i++) { if (jclients[i] == jcl) + { jclients[i] = NULL; + jclient_configdirty = true; + } } } @@ -6411,6 +6419,10 @@ void JCL_WriteConfig(void) struct buddyinfo_s *bi; buddy_t *bud; + if (!jclient_configdirty) + return; //no point yet. + jclient_configdirty = false; + //don't write the config if we're meant to be reading it. avoid wiping it if we're killed fast. if (jclient_needreadconfig) return; @@ -6525,6 +6537,7 @@ void JCL_LoadConfig(void) qhandle_t config; char *buf; qboolean oldtls; + jclient_configdirty = false; len = filefuncs->Open("**plugconfig", &config, 1); if (len >= 0) { @@ -6986,6 +6999,7 @@ void JCL_Command(int accid, char *console) Con_TrySubPrint(console, "Connect failed\n"); return; } + jclient_configdirty = true; } else if (!strcmp(arg[0]+1, "help")) { @@ -7041,6 +7055,7 @@ void JCL_Command(int accid, char *console) } else if (!strcmp(arg[0]+1, "oa2token")) { + jclient_configdirty = true; free(jcl->sasl.oauth2.authtoken); jcl->sasl.oauth2.authtoken = strdup(arg[1]); if (jcl->status == JCL_INACTIVE) @@ -7048,6 +7063,7 @@ void JCL_Command(int accid, char *console) } else if (!strcmp(arg[0]+1, "set")) { + jclient_configdirty = true; if (!strcmp(arg[1], "savepassword")) jcl->savepassword = atoi(arg[2]); else if (!strcmp(arg[1], "avatars")) @@ -7069,6 +7085,7 @@ void JCL_Command(int accid, char *console) } else if (!strcmp(arg[0]+1, "password")) { + jclient_configdirty = true; Q_strncpyz(jcl->sasl.password_plain, arg[1], sizeof(jcl->sasl.password_plain)); jcl->sasl.password_hash_size = 0; if (jcl->status == JCL_INACTIVE)