Changeset 5a8afc3 for protocols


Ignore:
Timestamp:
2016-11-21T06:58:47Z (7 years ago)
Author:
dequis <dx@…>
Branches:
master
Children:
3f44e43, f8c9347
Parents:
11d4123
git-author:
dequis <dx@…> (21-11-16 06:40:54)
git-committer:
dequis <dx@…> (21-11-16 06:58:47)
Message:

Manual merge with wilmer's approach to handling missing protocols

Turns out he already implemented pretty much the same thing in the
parson branch... last year.

The differences between the two approaches are subtle (there aren't too
many ways to do this, some lines are the exact same thing) but I decided
I like his version better, so this mostly reverts a handful of my
changes while keeping others. The main advantage of his approach is that
no fake protocols are registered, no actual prpl functions are called,
and the missing prpl is a singleton constant.

New things compared to the implementation in the other branch:

  • The explain_unknown_protocol() function.
  • Fixed named chatrooms throwing a warning and losing the "account" setting when saving. See changes in irc_im.c
  • Fixed the "server" setting dropping when saving. See account.c

Differences with my previous implementation:

  • Accounts with missing protocols don't autoconnect
  • 'account list' marks them as "(missing!)"
Location:
protocols
Files:
1 deleted
4 edited

Legend:

Unmodified
Added
Removed
  • protocols/Makefile

    r11d4123 r5a8afc3  
    1313
    1414# [SH] Program variables
    15 objects = account.o bee.o bee_chat.o bee_ft.o bee_user.o nogaim.o unknown.o
     15objects = account.o bee.o bee_chat.o bee_ft.o bee_user.o nogaim.o
    1616
    1717
  • protocols/account.c

    r11d4123 r5a8afc3  
    7575        s->flags |= SET_NOSAVE | ACC_SET_OFFLINE_ONLY | ACC_SET_LOCKABLE;
    7676        set_setstr(&a->set, "username", user);
     77
     78        if (prpl == &protocol_missing) {
     79                s = set_add(&a->set, "server", NULL, set_eval_account, a);
     80                s->flags |= SET_NOSAVE | SET_HIDDEN | ACC_SET_OFFLINE_ONLY | ACC_SET_ONLINE_ONLY;
     81        }
    7782
    7883        /* Hardcode some more clever tag guesses. */
  • protocols/nogaim.c

    r11d4123 r5a8afc3  
    160160GList *protocols = NULL;
    161161GList *disabled_protocols = NULL;
    162 static struct prpl *unknown_prpl;
    163162
    164163void register_protocol(struct prpl *p)
     
    190189        GList *gl = g_list_find_custom(protocols, name, proto_name_cmp);
    191190        return gl ? gl->data: NULL;
    192 }
    193 
    194 struct prpl *make_unknown_protocol(const char *name)
    195 {
    196         struct prpl *ret = g_memdup(unknown_prpl, sizeof(struct prpl));
    197         ret->name = g_strdup(name);
    198         register_protocol(ret);
    199         return ret;
    200191}
    201192
     
    250241        extern void twitter_initmodule();
    251242        extern void purple_initmodule();
    252         extern void unknown_prpl_initmodule();
    253 
    254         unknown_prpl_initmodule(&unknown_prpl);
    255243
    256244#ifdef WITH_MSN
  • protocols/nogaim.h

    r11d4123 r5a8afc3  
    159159        /* The protocol is not suitable for OTR, see OPT_NOOTR */
    160160        PRPL_OPT_NOOTR = 1 << 12,
    161 
    162         /* This prpl is a placeholder for a missing protocol */
    163         PRPL_OPT_UNKNOWN_PROTOCOL = 1 << 13,
    164161} prpl_options_t;
    165162
     
    324321G_MODULE_EXPORT struct prpl *find_protocol(const char *name);
    325322G_MODULE_EXPORT gboolean is_protocol_disabled(const char *name);
    326 G_MODULE_EXPORT struct prpl *make_unknown_protocol(const char *name);
    327323G_MODULE_EXPORT char *explain_unknown_protocol(const char *name);
    328324/* When registering a new protocol, you should allocate space for a new prpl
Note: See TracChangeset for help on using the changeset viewer.