Mercurial > pidgin
changeset 9427:66b3f54527e6
[gaim-migrate @ 10245]
" As discussed on #gaim
(15:02:02) Paco-Paco: the ugliness of this feature
trumps compatability, unless there is some pretty
important functionality to be lost
(15:04:02) aatharuv: Paco-Paco: Because zephyr is a
silly UDP based protocol, and sometimes subscriptions
(chats you've registered for) get lost, and you can
tell a user to a cli tool 'zctl' which will restore the
subs.
(15:04:32) aatharuv: Paco-Paco: Of course, I should
just add this as a protocol option, so users don't have
to do that.
(15:04:39) Paco-Paco: yes
(15:04:50) Paco-Paco: that would be the appropriate answer
(15:06:05) LSchiere: okay, so rather then messing with
anoncvs delays, i'm going to leave this in for now, and
aatharuv can just change to to a account option in place
Okay, here's a patch to reload subscriptions incase the
server loses track of them, as a protocol action. Since
my anoncvs hasn't even gotten the original zephyr patch
yet, you might as well reverse the original patch, and
apply this new one." --Arun A Tharuvai
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Tue, 29 Jun 2004 20:35:30 +0000 |
parents | dfee44a581a4 |
children | 796f510a6e19 |
files | src/protocols/zephyr/zephyr.c src/util.c src/util.h |
diffstat | 3 files changed, 46 insertions(+), 39 deletions(-) [+] |
line wrap: on
line diff
--- a/src/protocols/zephyr/zephyr.c Tue Jun 29 17:23:08 2004 +0000 +++ b/src/protocols/zephyr/zephyr.c Tue Jun 29 20:35:30 2004 +0000 @@ -894,9 +894,7 @@ static void zephyr_login(GaimAccount * account) { ZSubscription_t sub; - unsigned short port = 0; - FILE* wgfile; - char* wgfilename; + if (zgc) { gaim_notify_error(account->gc, NULL, _("Already logged in with Zephyr"), _("Because Zephyr uses your system username, you " "are unable to have multiple accounts on it " "when logged in as the same user.")); @@ -908,24 +906,19 @@ gaim_connection_update_progress(zgc, _("Connecting"), 0, 2); z_call_s(ZInitialize(), "Couldn't initialize zephyr"); - z_call_s(ZOpenPort(&port), "Couldn't open port"); + z_call_s(ZOpenPort(NULL), "Couldn't open port"); z_call_s(ZSetLocation((char *) gaim_account_get_string(zgc->account, "exposure_level", EXPOSE_REALMVIS)), "Couldn't set location"); sub.zsub_class = "MESSAGE"; sub.zsub_classinst = "PERSONAL"; sub.zsub_recipient = (char *)gaim_zephyr_get_sender(); - + /* we don't care if this fails. i'm lying right now. */ if (ZSubscribeTo(&sub, 1, 0) != ZERR_NONE) { gaim_debug(GAIM_DEBUG_ERROR, "zephyr", "Couldn't subscribe to messages!\n"); } - wgfile = gaim_mkstemp_template(&wgfilename,"gaimwgXXXXXX"); - if (wgfile) { - fprintf(wgfile,"%d\n",port); - fclose(wgfile); - } gaim_connection_set_state(zgc, GAIM_CONNECTED); serv_finish_login(zgc); @@ -1344,6 +1337,46 @@ } +static int zephyr_resubscribe(GaimConnection *gc) +{ + /* Resubscribe to the in-memory list of subscriptions and also + unsubscriptions*/ + + GSList *s = subscrips; + zephyr_triple *zt; + ZSubscription_t zst; + while (s) { + zt = s->data; + zst.zsub_class = zt->class; + zst.zsub_classinst = zt->instance; + zst.zsub_recipient = zt->recipient; + ZSubscribeTo(&zst, 1, 0); + /* XXX We really should care if this fails */ + s = s->next; + } + /* XXX handle unsubscriptions */ + return 1; +} + +static void zephyr_action_resubscribe(GaimPluginAction *action) +{ + + GaimConnection *gc = (GaimConnection *) action->context; + zephyr_resubscribe(gc); +} + + +static GList *zephyr_actions(GaimPlugin *plugin, gpointer context) +{ + GList *list = NULL; + GaimPluginAction *act = NULL; + + act = gaim_plugin_action_new(_("Resubscribe"), zephyr_action_resubscribe); + list = g_list_append(list, act); + + return list; +} + static GaimPlugin *my_protocol = NULL; static GaimPluginProtocolInfo prpl_info = { @@ -1429,7 +1462,7 @@ NULL, /**< ui_info */ &prpl_info, /**< extra_info */ NULL, - NULL + zephyr_actions }; static void init_plugin(GaimPlugin * plugin)
--- a/src/util.c Tue Jun 29 17:23:08 2004 +0000 +++ b/src/util.c Tue Jun 29 20:35:30 2004 +0000 @@ -1951,13 +1951,7 @@ static const char *gaim_mkstemp_templ = {"gaimXXXXXX"}; FILE * -gaim_mkstemp(char **fpath) { - return gaim_mkstemp_template(fpath, gaim_mkstemp_templ); -} - - -FILE * -gaim_mkstemp_template(char **fpath, const char *template) +gaim_mkstemp(char **fpath) { const gchar *tmpdir; #ifndef _WIN32 @@ -1968,7 +1962,7 @@ g_return_val_if_fail(fpath != NULL, NULL); if((tmpdir = (gchar*)g_get_tmp_dir()) != NULL) { - if((*fpath = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", tmpdir, template)) != NULL) { + if((*fpath = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", tmpdir, gaim_mkstemp_templ)) != NULL) { #ifdef _WIN32 char* result = _mktemp( *fpath ); if( result == NULL )
--- a/src/util.h Tue Jun 29 17:23:08 2004 +0000 +++ b/src/util.h Tue Jun 29 20:35:30 2004 +0000 @@ -394,26 +394,6 @@ FILE *gaim_mkstemp(char **path); /** - * Creates a temporary file and returns a file pointer to it. - * - * This is like mkstemp(), but returns a file pointer. It uses the - * semantics of tempnam() for the directory to use and allocates the - * space for the file path. - * - * The caller is responsible for closing the file and removing it when - * done, as well as freeing the space pointed to by @a path with - * g_free(). - * - * @param path The returned path to the temp file. - * - * @param pattern Pattern for use with the returned filename. - * - * @return A file pointer to the temporary file, or @c NULL on failure. - */ - -FILE *gaim_mkstemp_template(char **path,const char *template); - -/** * Checks if the given program name is valid and executable. * * @param program The file name of the application.