libgaim/plugins/tcl/tcl_cmds.c

Tue, 29 Aug 2006 02:22:08 +0000

author
Hil <allhilbert@users.sourceforge.net>
date
Tue, 29 Aug 2006 02:22:08 +0000
changeset 14432
3710852cdab5
parent 14425
629622ab2c70
child 20470
77693555855f
child 20472
6a6d2ef151e6
permissions
-rw-r--r--

[gaim-migrate @ 17076]
SF Patch #1547720 from Hilbert
Fixes SF Bug #1541097

If you search, leave the Find dialog open, switch tabs, and search again, the search happens in the original tab. This patch fixes that bug. Now when you search, it searches in the active conversation window.

committer: Richard Laager <rlaager@pidgin.im>

6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1 /**
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
2 * @file tcl_cmds.c Commands for the Gaim Tcl plugin bindings
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
3 *
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
4 * gaim
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
5 *
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
6 * Copyright (C) 2003 Ethan Blanton <eblanton@cs.purdue.edu>
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
7 *
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
11 * (at your option) any later version.
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
12 *
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
16 * GNU General Public License for more details.
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
17 *
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
21 */
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
22
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
23 #include <tcl.h>
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
24
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
25 #include "internal.h"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
26 #include "conversation.h"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
27 #include "connection.h"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
28 #include "account.h"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
29 #include "server.h"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
30 #include "notify.h"
6700
02bb89cd563e [gaim-migrate @ 7226]
Ethan Blanton <elb@pidgin.im>
parents: 6694
diff changeset
31 #include "blist.h"
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
32 #include "debug.h"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
33 #include "prefs.h"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
34 #include "core.h"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
35
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
36 #include "tcl_gaim.h"
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
37
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
38 static GaimAccount *tcl_validate_account(Tcl_Obj *obj, Tcl_Interp *interp);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
39 static GaimConversation *tcl_validate_conversation(Tcl_Obj *obj, Tcl_Interp *interp);
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
40 static GaimConnection *tcl_validate_gc(Tcl_Obj *obj, Tcl_Interp *interp);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
41
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
42 static GaimAccount *tcl_validate_account(Tcl_Obj *obj, Tcl_Interp *interp)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
43 {
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
44 GaimAccount *account;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
45 GList *cur;
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
46
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
47 account = gaim_tcl_ref_get(interp, obj, GaimTclRefAccount);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
48
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
49 if (account == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
50 return NULL;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
51
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
52 for (cur = gaim_accounts_get_all(); cur != NULL; cur = g_list_next(cur)) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
53 if (account == cur->data)
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
54 return account;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
55 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
56 if (interp != NULL)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
57 Tcl_SetStringObj(Tcl_GetObjResult(interp), "invalid account", -1);
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
58 return NULL;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
59 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
60
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
61 static GaimConversation *tcl_validate_conversation(Tcl_Obj *obj, Tcl_Interp *interp)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
62 {
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
63 GaimConversation *convo;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
64 GList *cur;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
65
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
66 convo = gaim_tcl_ref_get(interp, obj, GaimTclRefConversation);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
67
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
68 if (convo == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
69 return NULL;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
70
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
71 for (cur = gaim_get_conversations(); cur != NULL; cur = g_list_next(cur)) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
72 if (convo == cur->data)
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
73 return convo;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
74 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
75 if (interp != NULL)
13846
16348041cfaf [gaim-migrate @ 16300]
Ethan Blanton <elb@pidgin.im>
parents: 13828
diff changeset
76 Tcl_SetStringObj(Tcl_GetObjResult(interp), "invalid conversation", -1);
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
77 return NULL;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
78 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
79
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
80 static GaimConnection *tcl_validate_gc(Tcl_Obj *obj, Tcl_Interp *interp)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
81 {
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
82 GaimConnection *gc;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
83 GList *cur;
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
84
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
85 gc = gaim_tcl_ref_get(interp, obj, GaimTclRefConnection);
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
86
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
87 if (gc == NULL)
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
88 return NULL;
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
89
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
90 for (cur = gaim_connections_get_all(); cur != NULL; cur = g_list_next(cur)) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
91 if (gc == cur->data)
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
92 return gc;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
93 }
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
94 return NULL;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
95 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
96
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
97 int tcl_cmd_account(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
98 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
99 Tcl_Obj *result = Tcl_GetObjResult(interp), *list, *elem;
13828
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
100 const char *cmds[] = { "alias", "connect", "connection", "disconnect",
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
101 "enabled", "find", "handle", "isconnected",
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
102 "list", "presence", "protocol", "status",
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
103 "status_type", "status_types", "username",
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
104 NULL };
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
105 enum { CMD_ACCOUNT_ALIAS,
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
106 CMD_ACCOUNT_CONNECT, CMD_ACCOUNT_CONNECTION,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
107 CMD_ACCOUNT_DISCONNECT, CMD_ACCOUNT_ENABLED, CMD_ACCOUNT_FIND,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
108 CMD_ACCOUNT_HANDLE, CMD_ACCOUNT_ISCONNECTED, CMD_ACCOUNT_LIST,
13828
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
109 CMD_ACCOUNT_PRESENCE, CMD_ACCOUNT_PROTOCOL, CMD_ACCOUNT_STATUS,
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
110 CMD_ACCOUNT_STATUS_TYPE, CMD_ACCOUNT_STATUS_TYPES,
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
111 CMD_ACCOUNT_USERNAME } cmd;
10339
246feba79f04 [gaim-migrate @ 11548]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
112 const char *listopts[] = { "-all", "-online", NULL };
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
113 enum { CMD_ACCOUNTLIST_ALL, CMD_ACCOUNTLIST_ONLINE } listopt;
8834
0a798e3d2b84 [gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents: 7713
diff changeset
114 const char *alias;
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
115 const GList *cur;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
116 GaimAccount *account;
13828
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
117 GaimStatus *status;
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
118 GaimStatusType *status_type;
13828
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
119 GaimValue *value;
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
120 char *attr_id;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
121 int error;
13828
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
122 int b, i;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
123
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
124 if (objc < 2) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
125 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
126 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
127 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
128
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
129 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
130 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
131
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
132 switch (cmd) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
133 case CMD_ACCOUNT_ALIAS:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
134 if (objc != 3) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
135 Tcl_WrongNumArgs(interp, 2, objv, "account");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
136 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
137 }
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
138 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
139 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
140 alias = gaim_account_get_alias(account);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
141 Tcl_SetStringObj(result, alias ? (char *)alias : "", -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
142 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
143 case CMD_ACCOUNT_CONNECT:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
144 if (objc != 3) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
145 Tcl_WrongNumArgs(interp, 2, objv, "account");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
146 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
147 }
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
148 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
149 return TCL_ERROR;
10740
a1cb6b819a21 [gaim-migrate @ 12342]
Mark Doliner <markdoliner@pidgin.im>
parents: 10738
diff changeset
150 if (!gaim_account_is_connected(account))
a1cb6b819a21 [gaim-migrate @ 12342]
Mark Doliner <markdoliner@pidgin.im>
parents: 10738
diff changeset
151 gaim_account_connect(account);
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
152 Tcl_SetObjResult(interp,
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
153 gaim_tcl_ref_new(GaimTclRefConnection,
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
154 gaim_account_get_connection(account)));
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
155 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
156 case CMD_ACCOUNT_CONNECTION:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
157 if (objc != 3) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
158 Tcl_WrongNumArgs(interp, 2, objv, "account");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
159 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
160 }
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
161
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
162 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
163 return TCL_ERROR;
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
164 Tcl_SetObjResult(interp,
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
165 gaim_tcl_ref_new(GaimTclRefConnection,
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
166 gaim_account_get_connection(account)));
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
167 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
168 case CMD_ACCOUNT_DISCONNECT:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
169 if (objc != 3) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
170 Tcl_WrongNumArgs(interp, 2, objv, "account");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
171 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
172 }
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
173 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
174 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
175 gaim_account_disconnect(account);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
176 break;
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
177 case CMD_ACCOUNT_ENABLED:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
178 if (objc != 3 && objc != 4) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
179 Tcl_WrongNumArgs(interp, 2, objv, "account ?enabled?");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
180 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
181 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
182 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
183 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
184 if (objc == 3) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
185 Tcl_SetBooleanObj(result,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
186 gaim_account_get_enabled(account,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
187 gaim_core_get_ui()));
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
188 } else {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
189 if ((error = Tcl_GetBooleanFromObj(interp, objv[3], &b)) != TCL_OK)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
190 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
191 gaim_account_set_enabled(account, gaim_core_get_ui(), b);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
192 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
193 break;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
194 case CMD_ACCOUNT_FIND:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
195 if (objc != 4) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
196 Tcl_WrongNumArgs(interp, 2, objv, "username protocol");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
197 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
198 }
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
199 account = gaim_accounts_find(Tcl_GetString(objv[2]),
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
200 Tcl_GetString(objv[3]));
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
201 Tcl_SetObjResult(interp,
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
202 gaim_tcl_ref_new(GaimTclRefAccount, account));
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
203 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
204 case CMD_ACCOUNT_HANDLE:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
205 if (objc != 2) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
206 Tcl_WrongNumArgs(interp, 2, objv, "");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
207 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
208 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
209 Tcl_SetIntObj(result, (int)gaim_accounts_get_handle());
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
210 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
211 case CMD_ACCOUNT_ISCONNECTED:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
212 if (objc != 3) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
213 Tcl_WrongNumArgs(interp, 2, objv, "account");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
214 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
215 }
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
216 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
217 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
218 Tcl_SetBooleanObj(result, gaim_account_is_connected(account));
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
219 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
220 case CMD_ACCOUNT_LIST:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
221 listopt = CMD_ACCOUNTLIST_ALL;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
222 if (objc > 3) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
223 Tcl_WrongNumArgs(interp, 2, objv, "?option?");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
224 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
225 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
226 if (objc == 3) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
227 if ((error = Tcl_GetIndexFromObj(interp, objv[2], listopts, "option", 0, (int *)&listopt)) != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
228 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
229 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
230 list = Tcl_NewListObj(0, NULL);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
231 for (cur = gaim_accounts_get_all(); cur != NULL; cur = g_list_next(cur)) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
232 account = cur->data;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
233 if (listopt == CMD_ACCOUNTLIST_ONLINE && !gaim_account_is_connected(account))
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
234 continue;
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
235 elem = gaim_tcl_ref_new(GaimTclRefAccount, account);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
236 Tcl_ListObjAppendElement(interp, list, elem);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
237 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
238 Tcl_SetObjResult(interp, list);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
239 break;
13823
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
240 case CMD_ACCOUNT_PRESENCE:
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
241 if (objc != 3) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
242 Tcl_WrongNumArgs(interp, 2, objv, "account");
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
243 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
244 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
245 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
246 return TCL_ERROR;
13826
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
247 Tcl_SetObjResult(interp, gaim_tcl_ref_new(GaimTclRefPresence,
13823
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
248 gaim_account_get_presence(account)));
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
249 break;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
250 case CMD_ACCOUNT_PROTOCOL:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
251 if (objc != 3) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
252 Tcl_WrongNumArgs(interp, 2, objv, "account");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
253 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
254 }
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
255 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
256 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
257 Tcl_SetStringObj(result, (char *)gaim_account_get_protocol_id(account), -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
258 break;
13828
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
259 case CMD_ACCOUNT_STATUS:
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
260 if (objc < 3) {
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
261 Tcl_WrongNumArgs(interp, 2, objv, "account ?status_id name value ...?");
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
262 return TCL_ERROR;
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
263 }
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
264 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
265 return TCL_ERROR;
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
266 if (objc == 3) {
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
267 Tcl_SetObjResult(interp,
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
268 gaim_tcl_ref_new(GaimTclRefStatus,
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
269 gaim_account_get_active_status(account)));
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
270 } else {
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
271 GList *l = NULL;
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
272 if (objc % 2) {
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
273 Tcl_SetStringObj(result, "name without value setting status", -1);
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
274 return TCL_ERROR;
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
275 }
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
276 status = gaim_account_get_status(account, Tcl_GetString(objv[3]));
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
277 if (status == NULL) {
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
278 Tcl_SetStringObj(result, "invalid status for account", -1);
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
279 return TCL_ERROR;
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
280 }
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
281 for (i = 4; i < objc; i += 2) {
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
282 attr_id = Tcl_GetString(objv[i]);
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
283 value = gaim_status_get_attr_value(status, attr_id);
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
284 if (value == NULL) {
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
285 Tcl_SetStringObj(result, "invalid attribute for account", -1);
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
286 return TCL_ERROR;
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
287 }
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
288 switch (gaim_value_get_type(value)) {
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
289 case GAIM_TYPE_BOOLEAN:
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
290 error = Tcl_GetBooleanFromObj(interp, objv[i + 1], &b);
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
291 if (error != TCL_OK)
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
292 return error;
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
293 l = g_list_append(l, attr_id);
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
294 l = g_list_append(l, GINT_TO_POINTER(b));
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
295 break;
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
296 case GAIM_TYPE_INT:
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
297 error = Tcl_GetIntFromObj(interp, objv[i + 1], &b);
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
298 if (error != TCL_OK)
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
299 return error;
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
300 l = g_list_append(l, attr_id);
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
301 l = g_list_append(l, GINT_TO_POINTER(b));
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
302 break;
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
303 case GAIM_TYPE_STRING:
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
304 l = g_list_append(l, attr_id);
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
305 l = g_list_append(l, Tcl_GetString(objv[i + 1]));
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
306 break;
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
307 default:
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
308 Tcl_SetStringObj(result, "unknown GaimValue type", -1);
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
309 return TCL_ERROR;
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
310 }
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
311 }
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
312 gaim_account_set_status_list(account, Tcl_GetString(objv[3]), TRUE, l);
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
313 g_list_free(l);
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
314 }
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
315 break;
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
316 case CMD_ACCOUNT_STATUS_TYPE:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
317 if (objc != 4 && objc != 5) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
318 Tcl_WrongNumArgs(interp, 2, objv, "account ?statustype? ?-primitive primitive?");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
319 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
320 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
321 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
322 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
323 if (objc == 4) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
324 status_type = gaim_account_get_status_type(account,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
325 Tcl_GetString(objv[3]));
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
326 } else {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
327 GaimStatusPrimitive primitive;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
328 if (strcmp(Tcl_GetString(objv[3]), "-primitive")) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
329 Tcl_SetStringObj(result, "bad option \"", -1);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
330 Tcl_AppendObjToObj(result, objv[3]);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
331 Tcl_AppendToObj(result,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
332 "\": should be -primitive", -1);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
333 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
334 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
335 primitive = gaim_primitive_get_type_from_id(Tcl_GetString(objv[4]));
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
336 status_type = gaim_account_get_status_type_with_primitive(account,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
337 primitive);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
338 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
339 if (status_type == NULL) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
340 Tcl_SetStringObj(result, "status type not found", -1);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
341 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
342 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
343 Tcl_SetObjResult(interp,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
344 gaim_tcl_ref_new(GaimTclRefStatusType,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
345 status_type));
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
346 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
347 case CMD_ACCOUNT_STATUS_TYPES:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
348 if (objc != 3) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
349 Tcl_WrongNumArgs(interp, 2, objv, "account");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
350 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
351 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
352 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
353 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
354 list = Tcl_NewListObj(0, NULL);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
355 for (cur = gaim_account_get_status_types(account); cur != NULL;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
356 cur = g_list_next(cur)) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
357 Tcl_ListObjAppendElement(interp, list,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
358 gaim_tcl_ref_new(GaimTclRefStatusType,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
359 cur->data));
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
360 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
361 Tcl_SetObjResult(interp, list);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
362 break;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
363 case CMD_ACCOUNT_USERNAME:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
364 if (objc != 3) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
365 Tcl_WrongNumArgs(interp, 2, objv, "account");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
366 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
367 }
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
368 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
369 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
370 Tcl_SetStringObj(result, (char *)gaim_account_get_username(account), -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
371 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
372 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
373
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
374 return TCL_OK;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
375 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
376
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
377 static GaimBlistNode *tcl_list_to_buddy(Tcl_Interp *interp, int count, Tcl_Obj **elems)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
378 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
379 GaimBlistNode *node = NULL;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
380 GaimAccount *account;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
381 char *name;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
382 char *type;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
383
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
384 if (count < 3) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
385 Tcl_SetStringObj(Tcl_GetObjResult(interp), "list too short", -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
386 return NULL;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
387 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
388
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
389 type = Tcl_GetString(elems[0]);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
390 name = Tcl_GetString(elems[1]);
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
391 if ((account = tcl_validate_account(elems[2], interp)) == NULL)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
392 return NULL;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
393
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
394 if (!strcmp(type, "buddy")) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
395 node = (GaimBlistNode *)gaim_find_buddy(account, name);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
396 } else if (!strcmp(type, "group")) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
397 node = (GaimBlistNode *)gaim_blist_find_chat(account, name);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
398 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
399
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
400 return node;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
401 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
402
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
403 int tcl_cmd_buddy(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
404 {
6746
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
405 Tcl_Obj *list, *tclgroup, *tclgrouplist, *tclcontact, *tclcontactlist, *tclbud, **elems, *result;
10339
246feba79f04 [gaim-migrate @ 11548]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
406 const char *cmds[] = { "alias", "handle", "info", "list", NULL };
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
407 enum { CMD_BUDDY_ALIAS, CMD_BUDDY_HANDLE, CMD_BUDDY_INFO, CMD_BUDDY_LIST } cmd;
7100
cfa56fba1b19 [gaim-migrate @ 7665]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
408 GaimBuddyList *blist;
6746
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
409 GaimBlistNode *node, *gnode, *bnode;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
410 GaimAccount *account;
6746
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
411 GaimBuddy *bud;
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7100
diff changeset
412 GaimChat *cnode;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
413 int error, all = 0, count;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
414
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
415 if (objc < 2) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
416 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
417 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
418 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
419 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
420 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
421
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
422 result = Tcl_GetObjResult(interp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
423
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
424 switch (cmd) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
425 case CMD_BUDDY_ALIAS:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
426 if (objc != 3) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
427 Tcl_WrongNumArgs(interp, 2, objv, "buddy");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
428 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
429 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
430 if ((error = Tcl_ListObjGetElements(interp, objv[2], &count, &elems)) != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
431 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
432 if ((node = tcl_list_to_buddy(interp, count, elems)) == NULL)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
433 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
434 if (node->type == GAIM_BLIST_CHAT_NODE)
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7100
diff changeset
435 Tcl_SetStringObj(result, ((GaimChat *)node)->alias, -1);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
436 else if (node->type == GAIM_BLIST_BUDDY_NODE)
9620
fe99fcea5c1c [gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents: 8834
diff changeset
437 Tcl_SetStringObj(result, (char *)gaim_buddy_get_alias((GaimBuddy *)node), -1);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
438 return TCL_OK;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
439 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
440 case CMD_BUDDY_HANDLE:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
441 if (objc != 2) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
442 Tcl_WrongNumArgs(interp, 2, objv, "");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
443 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
444 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
445 Tcl_SetIntObj(result, (int)gaim_blist_get_handle());
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
446 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
447 case CMD_BUDDY_INFO:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
448 if (objc != 3 && objc != 4) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
449 Tcl_WrongNumArgs(interp, 2, objv, "( buddy | account username )");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
450 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
451 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
452 if (objc == 3) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
453 if ((error = Tcl_ListObjGetElements(interp, objv[2], &count, &elems)) != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
454 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
455 if (count < 3) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
456 Tcl_SetStringObj(result, "buddy too short", -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
457 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
458 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
459 if (strcmp("buddy", Tcl_GetString(elems[0]))) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
460 Tcl_SetStringObj(result, "invalid buddy", -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
461 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
462 }
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
463 if ((account = tcl_validate_account(elems[2], interp)) == NULL)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
464 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
465 serv_get_info(gaim_account_get_connection(account), Tcl_GetString(elems[1]));
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
466 } else {
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
467 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
468 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
469 serv_get_info(gaim_account_get_connection(account), Tcl_GetString(objv[3]));
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
470 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
471 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
472 case CMD_BUDDY_LIST:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
473 if (objc == 3) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
474 if (!strcmp("-all", Tcl_GetString(objv[2]))) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
475 all = 1;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
476 } else {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
477 Tcl_SetStringObj(result, "", -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
478 Tcl_AppendStringsToObj(result, "unknown option: ", Tcl_GetString(objv[2]), NULL);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
479 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
480 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
481 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
482 list = Tcl_NewListObj(0, NULL);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
483 blist = gaim_get_blist();
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
484 for (gnode = blist->root; gnode != NULL; gnode = gnode->next) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
485 tclgroup = Tcl_NewListObj(0, NULL);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
486 Tcl_ListObjAppendElement(interp, tclgroup, Tcl_NewStringObj("group", -1));
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
487 Tcl_ListObjAppendElement(interp, tclgroup,
6700
02bb89cd563e [gaim-migrate @ 7226]
Ethan Blanton <elb@pidgin.im>
parents: 6694
diff changeset
488 Tcl_NewStringObj(((GaimGroup *)gnode)->name, -1));
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
489 tclgrouplist = Tcl_NewListObj(0, NULL);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
490 for (node = gnode->child; node != NULL; node = node->next) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
491 switch (node->type) {
6746
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
492 case GAIM_BLIST_CONTACT_NODE:
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
493 tclcontact = Tcl_NewListObj(0, NULL);
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
494 Tcl_IncrRefCount(tclcontact);
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
495 Tcl_ListObjAppendElement(interp, tclcontact, Tcl_NewStringObj("contact", -1));
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
496 tclcontactlist = Tcl_NewListObj(0, NULL);
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
497 Tcl_IncrRefCount(tclcontactlist);
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
498 count = 0;
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
499 for (bnode = node->child; bnode != NULL; bnode = bnode ->next) {
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
500 if (bnode->type != GAIM_BLIST_BUDDY_NODE)
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
501 continue;
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
502 bud = (GaimBuddy *)bnode;
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
503 if (!all && !gaim_account_is_connected(bud->account))
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
504 continue;
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
505 count++;
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
506 tclbud = Tcl_NewListObj(0, NULL);
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
507 Tcl_ListObjAppendElement(interp, tclbud, Tcl_NewStringObj("buddy", -1));
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
508 Tcl_ListObjAppendElement(interp, tclbud, Tcl_NewStringObj(bud->name, -1));
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
509 Tcl_ListObjAppendElement(interp, tclbud, gaim_tcl_ref_new(GaimTclRefAccount, bud->account));
6746
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
510 Tcl_ListObjAppendElement(interp, tclcontactlist, tclbud);
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
511 }
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
512 if (count) {
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
513 Tcl_ListObjAppendElement(interp, tclcontact, tclcontactlist);
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
514 Tcl_ListObjAppendElement(interp, tclgrouplist, tclcontact);
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
515 }
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
516 Tcl_DecrRefCount(tclcontact);
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
517 Tcl_DecrRefCount(tclcontactlist);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
518 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
519 case GAIM_BLIST_CHAT_NODE:
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7100
diff changeset
520 cnode = (GaimChat *)node;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
521 if (!all && !gaim_account_is_connected(cnode->account))
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
522 continue;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
523 tclbud = Tcl_NewListObj(0, NULL);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
524 Tcl_ListObjAppendElement(interp, tclbud, Tcl_NewStringObj("chat", -1));
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
525 Tcl_ListObjAppendElement(interp, tclbud, Tcl_NewStringObj(cnode->alias, -1));
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
526 Tcl_ListObjAppendElement(interp, tclbud, gaim_tcl_ref_new(GaimTclRefAccount, cnode->account));
6746
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
527 Tcl_ListObjAppendElement(interp, tclgrouplist, tclbud);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
528 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
529 default:
6746
6f05900c1a8d [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
530 gaim_debug(GAIM_DEBUG_WARNING, "tcl", "Unexpected buddy type %d", node->type);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
531 continue;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
532 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
533 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
534 Tcl_ListObjAppendElement(interp, tclgroup, tclgrouplist);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
535 Tcl_ListObjAppendElement(interp, list, tclgroup);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
536 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
537 Tcl_SetObjResult(interp, list);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
538 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
539 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
540
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
541 return TCL_OK;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
542 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
543
13847
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
544 int tcl_cmd_cmd(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
545 {
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
546 const char *cmds[] = { "register", "unregister", NULL };
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
547 enum { CMD_CMD_REGISTER, CMD_CMD_UNREGISTER } cmd;
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
548 struct tcl_cmd_handler *handler;
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
549 Tcl_Obj *result = Tcl_GetObjResult(interp);
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
550 GaimCmdId id;
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
551 int error;
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
552
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
553 if (objc < 2) {
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
554 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
555 return TCL_ERROR;
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
556 }
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
557
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
558 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
559 return error;
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
560
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
561 switch (cmd) {
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
562 case CMD_CMD_REGISTER:
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
563 if (objc != 9) {
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
564 Tcl_WrongNumArgs(interp, 2, objv, "cmd arglist priority flags prpl_id proc helpstr");
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
565 return TCL_ERROR;
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
566 }
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
567 handler = g_new0(struct tcl_cmd_handler, 1);
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
568 handler->cmd = objv[2];
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
569 handler->args = Tcl_GetString(objv[3]);
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
570 handler->nargs = strlen(handler->args);
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
571 if ((error = Tcl_GetIntFromObj(interp, objv[4],
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
572 &handler->priority)) != TCL_OK) {
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
573 g_free(handler);
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
574 return error;
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
575 }
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
576 if ((error = Tcl_GetIntFromObj(interp, objv[5],
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
577 &handler->flags)) != TCL_OK) {
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
578 g_free(handler);
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
579 return error;
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
580 }
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
581 handler->prpl_id = Tcl_GetString(objv[6]);
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
582 handler->proc = objv[7];
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
583 handler->helpstr = Tcl_GetString(objv[8]);
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
584 handler->interp = interp;
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
585 if ((id = tcl_cmd_register(handler)) == 0) {
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
586 tcl_cmd_handler_free(handler);
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
587 Tcl_SetIntObj(result, 0);
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
588 } else {
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
589 handler->id = id;
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
590 Tcl_SetIntObj(result, id);
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
591 }
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
592 break;
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
593 case CMD_CMD_UNREGISTER:
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
594 if (objc != 3) {
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
595 Tcl_WrongNumArgs(interp, 2, objv, "id");
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
596 return TCL_ERROR;
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
597 }
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
598 if ((error = Tcl_GetIntFromObj(interp, objv[2],
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
599 (int *)&id)) != TCL_OK)
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
600 return error;
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
601 tcl_cmd_unregister(id, interp);
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
602 break;
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
603 }
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
604
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
605 return TCL_OK;
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
606 }
89bc33bfe294 [gaim-migrate @ 16301]
Etan Reisner <deryni@pidgin.im>
parents: 13846
diff changeset
607
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
608 int tcl_cmd_connection(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
609 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
610 Tcl_Obj *result = Tcl_GetObjResult(interp), *list, *elem;
10339
246feba79f04 [gaim-migrate @ 11548]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
611 const char *cmds[] = { "account", "displayname", "handle", "list", NULL };
7713
a400861e425d [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
612 enum { CMD_CONN_ACCOUNT, CMD_CONN_DISPLAYNAME, CMD_CONN_HANDLE, CMD_CONN_LIST } cmd;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
613 int error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
614 GList *cur;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
615 GaimConnection *gc;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
616
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
617 if (objc < 2) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
618 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
619 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
620 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
621
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
622 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
623 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
624
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
625 switch (cmd) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
626 case CMD_CONN_ACCOUNT:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
627 if (objc != 3) {
6864
359bc55e767f [gaim-migrate @ 7410]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6746
diff changeset
628 Tcl_WrongNumArgs(interp, 2, objv, "gc");
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
629 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
630 }
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
631 if ((gc = tcl_validate_gc(objv[2], interp)) == NULL)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
632 return TCL_ERROR;
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
633 Tcl_SetObjResult(interp,
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
634 gaim_tcl_ref_new(GaimTclRefAccount,
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
635 gaim_connection_get_account(gc)));
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
636 break;
7713
a400861e425d [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
637 case CMD_CONN_DISPLAYNAME:
a400861e425d [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
638 if (objc != 3) {
a400861e425d [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
639 Tcl_WrongNumArgs(interp, 2, objv, "gc");
a400861e425d [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
640 return TCL_ERROR;
a400861e425d [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
641 }
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
642 if ((gc = tcl_validate_gc(objv[2], interp)) == NULL)
7713
a400861e425d [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
643 return TCL_ERROR;
a400861e425d [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
644 Tcl_SetStringObj(result, (char *)gaim_connection_get_display_name(gc), -1);
a400861e425d [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
645 break;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
646 case CMD_CONN_HANDLE:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
647 if (objc != 2) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
648 Tcl_WrongNumArgs(interp, 2, objv, "");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
649 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
650 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
651 Tcl_SetIntObj(result, (int)gaim_connections_get_handle());
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
652 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
653 case CMD_CONN_LIST:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
654 if (objc != 2) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
655 Tcl_WrongNumArgs(interp, 2, objv, "");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
656 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
657 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
658 list = Tcl_NewListObj(0, NULL);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
659 for (cur = gaim_connections_get_all(); cur != NULL; cur = g_list_next(cur)) {
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
660 elem = gaim_tcl_ref_new(GaimTclRefConnection, cur->data);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
661 Tcl_ListObjAppendElement(interp, list, elem);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
662 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
663 Tcl_SetObjResult(interp, list);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
664 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
665 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
666
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
667 return TCL_OK;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
668 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
669
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
670 int tcl_cmd_conversation(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
671 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
672 Tcl_Obj *list, *elem, *result = Tcl_GetObjResult(interp);
14425
629622ab2c70 [gaim-migrate @ 17069]
Etan Reisner <deryni@pidgin.im>
parents: 14357
diff changeset
673 const char *cmds[] = { "find", "handle", "list", "new", "write", "name", "title", "send", NULL };
629622ab2c70 [gaim-migrate @ 17069]
Etan Reisner <deryni@pidgin.im>
parents: 14357
diff changeset
674 enum { CMD_CONV_FIND, CMD_CONV_HANDLE, CMD_CONV_LIST, CMD_CONV_NEW, CMD_CONV_WRITE , CMD_CONV_NAME, CMD_CONV_TITLE, CMD_CONV_SEND } cmd;
10339
246feba79f04 [gaim-migrate @ 11548]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
675 const char *styles[] = { "send", "recv", "system", NULL };
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
676 enum { CMD_CONV_WRITE_SEND, CMD_CONV_WRITE_RECV, CMD_CONV_WRITE_SYSTEM } style;
10339
246feba79f04 [gaim-migrate @ 11548]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
677 const char *newopts[] = { "-chat", "-im" };
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
678 enum { CMD_CONV_NEW_CHAT, CMD_CONV_NEW_IM } newopt;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
679 GaimConversation *convo;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
680 GaimAccount *account;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
681 GaimConversationType type;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
682 GList *cur;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
683 char *opt, *from, *what;
7156
127436d3f11a [gaim-migrate @ 7723]
Nathan Walp <nwalp@pidgin.im>
parents: 7118
diff changeset
684 int error, argsused, flags = 0;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
685
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
686 if (objc < 2) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
687 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
688 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
689 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
690
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
691 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
692 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
693
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
694 switch (cmd) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
695 case CMD_CONV_FIND:
10829
c0b0e9771b31 [gaim-migrate @ 12495]
Ethan Blanton <elb@pidgin.im>
parents: 10820
diff changeset
696 if (objc != 4) {
c0b0e9771b31 [gaim-migrate @ 12495]
Ethan Blanton <elb@pidgin.im>
parents: 10820
diff changeset
697 Tcl_WrongNumArgs(interp, 2, objv, "account name");
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
698 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
699 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
700 account = NULL;
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
701 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
10829
c0b0e9771b31 [gaim-migrate @ 12495]
Ethan Blanton <elb@pidgin.im>
parents: 10820
diff changeset
702 return TCL_ERROR;
11338
1a3663ac9b05 [gaim-migrate @ 13551]
Mark Doliner <markdoliner@pidgin.im>
parents: 10829
diff changeset
703 convo = gaim_find_conversation_with_account(GAIM_CONV_TYPE_ANY,
10829
c0b0e9771b31 [gaim-migrate @ 12495]
Ethan Blanton <elb@pidgin.im>
parents: 10820
diff changeset
704 Tcl_GetString(objv[3]),
c0b0e9771b31 [gaim-migrate @ 12495]
Ethan Blanton <elb@pidgin.im>
parents: 10820
diff changeset
705 account);
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
706 Tcl_SetObjResult(interp, gaim_tcl_ref_new(GaimTclRefConversation, convo));
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
707 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
708 case CMD_CONV_HANDLE:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
709 if (objc != 2) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
710 Tcl_WrongNumArgs(interp, 2, objv, "");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
711 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
712 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
713 Tcl_SetIntObj(result, (int)gaim_conversations_get_handle());
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
714 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
715 case CMD_CONV_LIST:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
716 list = Tcl_NewListObj(0, NULL);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
717 for (cur = gaim_get_conversations(); cur != NULL; cur = g_list_next(cur)) {
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
718 elem = gaim_tcl_ref_new(GaimTclRefConversation, cur->data);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
719 Tcl_ListObjAppendElement(interp, list, elem);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
720 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
721 Tcl_SetObjResult(interp, list);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
722 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
723 case CMD_CONV_NEW:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
724 if (objc < 4) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
725 Tcl_WrongNumArgs(interp, 2, objv, "?options? account name");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
726 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
727 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
728 argsused = 2;
11338
1a3663ac9b05 [gaim-migrate @ 13551]
Mark Doliner <markdoliner@pidgin.im>
parents: 10829
diff changeset
729 type = GAIM_CONV_TYPE_IM;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
730 while (argsused < objc) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
731 opt = Tcl_GetString(objv[argsused]);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
732 if (*opt == '-') {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
733 if ((error = Tcl_GetIndexFromObj(interp, objv[argsused], newopts,
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
734 "option", 0, (int *)&newopt)) != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
735 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
736 argsused++;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
737 switch (newopt) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
738 case CMD_CONV_NEW_CHAT:
11338
1a3663ac9b05 [gaim-migrate @ 13551]
Mark Doliner <markdoliner@pidgin.im>
parents: 10829
diff changeset
739 type = GAIM_CONV_TYPE_CHAT;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
740 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
741 case CMD_CONV_NEW_IM:
11338
1a3663ac9b05 [gaim-migrate @ 13551]
Mark Doliner <markdoliner@pidgin.im>
parents: 10829
diff changeset
742 type = GAIM_CONV_TYPE_IM;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
743 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
744 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
745 } else {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
746 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
747 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
748 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
749 if (objc - argsused != 2) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
750 Tcl_WrongNumArgs(interp, 2, objv, "?options? account name");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
751 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
752 }
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
753 if ((account = tcl_validate_account(objv[argsused++], interp)) == NULL)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
754 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
755 convo = gaim_conversation_new(type, account, Tcl_GetString(objv[argsused]));
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
756 Tcl_SetObjResult(interp, gaim_tcl_ref_new(GaimTclRefConversation, convo));
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
757 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
758 case CMD_CONV_WRITE:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
759 if (objc != 6) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
760 Tcl_WrongNumArgs(interp, 2, objv, "conversation style from what");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
761 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
762 }
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
763 if ((convo = tcl_validate_conversation(objv[2], interp)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
764 return TCL_ERROR;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
765 if ((error = Tcl_GetIndexFromObj(interp, objv[3], styles, "style", 0, (int *)&style)) != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
766 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
767 from = Tcl_GetString(objv[4]);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
768 what = Tcl_GetString(objv[5]);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
769
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
770 switch (style) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
771 case CMD_CONV_WRITE_SEND:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
772 flags = GAIM_MESSAGE_SEND;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
773 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
774 case CMD_CONV_WRITE_RECV:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
775 flags = GAIM_MESSAGE_RECV;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
776 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
777 case CMD_CONV_WRITE_SYSTEM:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
778 flags = GAIM_MESSAGE_SYSTEM;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
779 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
780 }
11338
1a3663ac9b05 [gaim-migrate @ 13551]
Mark Doliner <markdoliner@pidgin.im>
parents: 10829
diff changeset
781 if (gaim_conversation_get_type(convo) == GAIM_CONV_TYPE_CHAT)
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7100
diff changeset
782 gaim_conv_chat_write(GAIM_CONV_CHAT(convo), from, what, flags, time(NULL));
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
783 else
7118
280b3b85a28a [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7100
diff changeset
784 gaim_conv_im_write(GAIM_CONV_IM(convo), from, what, flags, time(NULL));
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
785 break;
14357
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
786 case CMD_CONV_NAME:
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
787 if (objc != 3) {
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
788 Tcl_WrongNumArgs(interp, 2, objv, "conversation");
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
789 return TCL_ERROR;
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
790 }
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
791
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
792 if ((convo = tcl_validate_conversation(objv[2], interp)) == NULL)
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
793 return TCL_ERROR;
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
794 Tcl_SetStringObj(result, (char *)gaim_conversation_get_name(convo), -1);
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
795 break;
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
796 case CMD_CONV_TITLE:
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
797 if (objc != 3) {
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
798 Tcl_WrongNumArgs(interp, 2, objv, "conversation");
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
799 return TCL_ERROR;
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
800 }
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
801
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
802 if ((convo = tcl_validate_conversation(objv[2], interp)) == NULL)
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
803 return TCL_ERROR;
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
804 Tcl_SetStringObj(result, (char *)gaim_conversation_get_title(convo), -1);
ece1a71881a1 [gaim-migrate @ 16985]
Etan Reisner <deryni@pidgin.im>
parents: 14254
diff changeset
805 break;
14425
629622ab2c70 [gaim-migrate @ 17069]
Etan Reisner <deryni@pidgin.im>
parents: 14357
diff changeset
806 case CMD_CONV_SEND:
629622ab2c70 [gaim-migrate @ 17069]
Etan Reisner <deryni@pidgin.im>
parents: 14357
diff changeset
807 if (objc != 4) {
629622ab2c70 [gaim-migrate @ 17069]
Etan Reisner <deryni@pidgin.im>
parents: 14357
diff changeset
808 Tcl_WrongNumArgs(interp, 2, objv, "conversation message");
629622ab2c70 [gaim-migrate @ 17069]
Etan Reisner <deryni@pidgin.im>
parents: 14357
diff changeset
809 return TCL_ERROR;
629622ab2c70 [gaim-migrate @ 17069]
Etan Reisner <deryni@pidgin.im>
parents: 14357
diff changeset
810 }
629622ab2c70 [gaim-migrate @ 17069]
Etan Reisner <deryni@pidgin.im>
parents: 14357
diff changeset
811 if ((convo = tcl_validate_conversation(objv[2], interp)) == NULL)
629622ab2c70 [gaim-migrate @ 17069]
Etan Reisner <deryni@pidgin.im>
parents: 14357
diff changeset
812 return TCL_ERROR;
629622ab2c70 [gaim-migrate @ 17069]
Etan Reisner <deryni@pidgin.im>
parents: 14357
diff changeset
813 what = Tcl_GetString(objv[3]);
629622ab2c70 [gaim-migrate @ 17069]
Etan Reisner <deryni@pidgin.im>
parents: 14357
diff changeset
814 if (gaim_conversation_get_type(convo) == GAIM_CONV_TYPE_CHAT)
629622ab2c70 [gaim-migrate @ 17069]
Etan Reisner <deryni@pidgin.im>
parents: 14357
diff changeset
815 gaim_conv_chat_send(GAIM_CONV_CHAT(convo), what);
629622ab2c70 [gaim-migrate @ 17069]
Etan Reisner <deryni@pidgin.im>
parents: 14357
diff changeset
816 else
629622ab2c70 [gaim-migrate @ 17069]
Etan Reisner <deryni@pidgin.im>
parents: 14357
diff changeset
817 gaim_conv_im_send(GAIM_CONV_IM(convo), what);
629622ab2c70 [gaim-migrate @ 17069]
Etan Reisner <deryni@pidgin.im>
parents: 14357
diff changeset
818 break;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
819 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
820
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
821 return TCL_OK;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
822 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
823
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
824 int tcl_cmd_core(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
825 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
826 Tcl_Obj *result = Tcl_GetObjResult(interp);
10339
246feba79f04 [gaim-migrate @ 11548]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
827 const char *cmds[] = { "handle", "quit", NULL };
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
828 enum { CMD_CORE_HANDLE, CMD_CORE_QUIT } cmd;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
829 int error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
830
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
831 if (objc < 2) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
832 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
833 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
834 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
835
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
836 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
837 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
838
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
839 switch (cmd) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
840 case CMD_CORE_HANDLE:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
841 if (objc != 2) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
842 Tcl_WrongNumArgs(interp, 2, objv, "");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
843 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
844 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
845 Tcl_SetIntObj(result, (int)gaim_get_core());
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
846 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
847 case CMD_CORE_QUIT:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
848 if (objc != 2) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
849 Tcl_WrongNumArgs(interp, 2, objv, "");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
850 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
851 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
852 gaim_core_quit();
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
853 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
854 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
855
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
856 return TCL_OK;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
857 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
858
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
859 int tcl_cmd_debug(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
860 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
861 char *category, *message;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
862 int lev;
10339
246feba79f04 [gaim-migrate @ 11548]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
863 const char *levels[] = { "-misc", "-info", "-warning", "-error", NULL };
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
864 GaimDebugLevel levelind[] = { GAIM_DEBUG_MISC, GAIM_DEBUG_INFO, GAIM_DEBUG_WARNING, GAIM_DEBUG_ERROR };
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
865 int error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
866
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
867 if (objc != 4) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
868 Tcl_WrongNumArgs(interp, 1, objv, "level category message");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
869 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
870 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
871
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
872 error = Tcl_GetIndexFromObj(interp, objv[1], levels, "debug level", 0, &lev);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
873 if (error != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
874 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
875
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
876 category = Tcl_GetString(objv[2]);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
877 message = Tcl_GetString(objv[3]);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
878
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
879 gaim_debug(levelind[lev], category, "%s\n", message);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
880
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
881 return TCL_OK;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
882 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
883
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
884 int tcl_cmd_notify(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
885 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
886 int error, type;
10339
246feba79f04 [gaim-migrate @ 11548]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
887 const char *opts[] = { "-error", "-warning", "-info", NULL };
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
888 GaimNotifyMsgType optind[] = { GAIM_NOTIFY_MSG_ERROR, GAIM_NOTIFY_MSG_WARNING, GAIM_NOTIFY_MSG_INFO };
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
889 char *title, *msg1, *msg2;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
890
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
891 if (objc < 4 || objc > 5) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
892 Tcl_WrongNumArgs(interp, 1, objv, "?type? title primary secondary");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
893 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
894 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
895
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
896 if (objc == 4) {
13424
b9d5d1d97526 [gaim-migrate @ 15798]
Ethan Blanton <elb@pidgin.im>
parents: 11338
diff changeset
897 type = 1; /* Default to warning */
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
898 title = Tcl_GetString(objv[1]);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
899 msg1 = Tcl_GetString(objv[2]);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
900 msg2 = Tcl_GetString(objv[3]);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
901 } else {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
902 error = Tcl_GetIndexFromObj(interp, objv[1], opts, "message type", 0, &type);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
903 if (error != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
904 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
905 title = Tcl_GetString(objv[2]);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
906 msg1 = Tcl_GetString(objv[3]);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
907 msg2 = Tcl_GetString(objv[4]);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
908 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
909
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
910 gaim_notify_message(_tcl_plugin, optind[type], title, msg1, msg2, NULL, NULL);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
911
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
912 return TCL_OK;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
913 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
914
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
915 int tcl_cmd_prefs(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
916 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
917 Tcl_Obj *result, *list, *elem, **elems;
10339
246feba79f04 [gaim-migrate @ 11548]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
918 const char *cmds[] = { "get", "set", "type", NULL };
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
919 enum { CMD_PREFS_GET, CMD_PREFS_SET, CMD_PREFS_TYPE } cmd;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
920 /* char *types[] = { "none", "boolean", "int", "string", "stringlist", NULL }; */
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
921 /* enum { TCL_PREFS_NONE, TCL_PREFS_BOOL, TCL_PREFS_INT, TCL_PREFS_STRING, TCL_PREFS_STRINGLIST } type; */
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
922 GaimPrefType preftype;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
923 GList *cur;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
924 int error, intval, nelem, i;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
925
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
926 if (objc < 2) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
927 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
928 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
929 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
930
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
931 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
932 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
933
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
934 result = Tcl_GetObjResult(interp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
935 switch (cmd) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
936 case CMD_PREFS_GET:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
937 if (objc != 3) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
938 Tcl_WrongNumArgs(interp, 1, objv, "path");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
939 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
940 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
941 preftype = gaim_prefs_get_type(Tcl_GetString(objv[2]));
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
942 switch (preftype) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
943 case GAIM_PREF_NONE:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
944 Tcl_SetStringObj(result, "pref type none", -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
945 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
946 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
947 case GAIM_PREF_BOOLEAN:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
948 Tcl_SetBooleanObj(result, gaim_prefs_get_bool(Tcl_GetString(objv[2])));
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
949 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
950 case GAIM_PREF_INT:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
951 Tcl_SetIntObj(result, gaim_prefs_get_int(Tcl_GetString(objv[2])));
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
952 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
953 case GAIM_PREF_STRING:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
954 Tcl_SetStringObj(result, (char *)gaim_prefs_get_string(Tcl_GetString(objv[2])), -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
955 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
956 case GAIM_PREF_STRING_LIST:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
957 cur = gaim_prefs_get_string_list(Tcl_GetString(objv[2]));
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
958 list = Tcl_NewListObj(0, NULL);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
959 while (cur != NULL) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
960 elem = Tcl_NewStringObj((char *)cur->data, -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
961 Tcl_ListObjAppendElement(interp, list, elem);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
962 cur = g_list_next(cur);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
963 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
964 Tcl_SetObjResult(interp, list);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
965 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
966 default:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
967 gaim_debug(GAIM_DEBUG_ERROR, "tcl", "tcl does not know about pref type %d\n", preftype);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
968 Tcl_SetStringObj(result, "unknown pref type", -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
969 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
970 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
971 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
972 case CMD_PREFS_SET:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
973 if (objc != 4) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
974 Tcl_WrongNumArgs(interp, 1, objv, "path value");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
975 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
976 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
977 preftype = gaim_prefs_get_type(Tcl_GetString(objv[2]));
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
978 switch (preftype) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
979 case GAIM_PREF_NONE:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
980 Tcl_SetStringObj(result, "bad path or pref type none", -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
981 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
982 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
983 case GAIM_PREF_BOOLEAN:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
984 if ((error = Tcl_GetBooleanFromObj(interp, objv[3], &intval)) != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
985 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
986 gaim_prefs_set_bool(Tcl_GetString(objv[2]), intval);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
987 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
988 case GAIM_PREF_INT:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
989 if ((error = Tcl_GetIntFromObj(interp, objv[3], &intval)) != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
990 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
991 gaim_prefs_set_int(Tcl_GetString(objv[2]), intval);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
992 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
993 case GAIM_PREF_STRING:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
994 gaim_prefs_set_string(Tcl_GetString(objv[2]), Tcl_GetString(objv[3]));
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
995 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
996 case GAIM_PREF_STRING_LIST:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
997 if ((error = Tcl_ListObjGetElements(interp, objv[3], &nelem, &elems)) != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
998 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
999 cur = NULL;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1000 for (i = 0; i < nelem; i++) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1001 cur = g_list_append(cur, (gpointer)Tcl_GetString(elems[i]));
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1002 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1003 gaim_prefs_set_string_list(Tcl_GetString(objv[2]), cur);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1004 g_list_free(cur);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1005 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1006 default:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1007 gaim_debug(GAIM_DEBUG_ERROR, "tcl", "tcl does not know about pref type %d\n", preftype);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1008 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1009 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1010 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1011 case CMD_PREFS_TYPE:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1012 if (objc != 3) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1013 Tcl_WrongNumArgs(interp, 1, objv, "path");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1014 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1015 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1016 preftype = gaim_prefs_get_type(Tcl_GetString(objv[2]));
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1017 switch (preftype) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1018 case GAIM_PREF_NONE:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1019 Tcl_SetStringObj(result, "none", -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1020 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1021 case GAIM_PREF_BOOLEAN:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1022 Tcl_SetStringObj(result, "boolean", -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1023 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1024 case GAIM_PREF_INT:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1025 Tcl_SetStringObj(result, "int", -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1026 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1027 case GAIM_PREF_STRING:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1028 Tcl_SetStringObj(result, "string", -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1029 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1030 case GAIM_PREF_STRING_LIST:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1031 Tcl_SetStringObj(result, "stringlist", -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1032 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1033 default:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1034 gaim_debug(GAIM_DEBUG_ERROR, "tcl", "tcl does not know about pref type %d\n", preftype);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1035 Tcl_SetStringObj(result, "unknown", -1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1036 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1037 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1038 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1039
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1040 return TCL_OK;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1041 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1042
13823
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1043 int tcl_cmd_presence(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1044 {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1045 const char *cmds[] = { "account", "active_status", "available",
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1046 "chat_user", "context", "conversation", "idle",
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1047 "login", "online", "status", "statuses", NULL };
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1048 enum { CMD_PRESENCE_ACCOUNT, CMD_PRESENCE_ACTIVE_STATUS,
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1049 CMD_PRESENCE_AVAILABLE, CMD_PRESENCE_CHAT_USER,
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1050 CMD_PRESENCE_CONTEXT, CMD_PRESENCE_CONVERSATION,
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1051 CMD_PRESENCE_IDLE, CMD_PRESENCE_LOGIN, CMD_PRESENCE_ONLINE,
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1052 CMD_PRESENCE_STATUS, CMD_PRESENCE_STATUSES } cmd;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1053 Tcl_Obj *result = Tcl_GetObjResult(interp);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1054 Tcl_Obj *list, *elem;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1055 GaimPresence *presence;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1056 const GList *cur;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1057 int error, idle, idle_time, login_time;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1058
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1059 if (objc < 2) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1060 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1061 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1062 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1063
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1064 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1065 return error;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1066
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1067 switch (cmd) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1068 case CMD_PRESENCE_ACCOUNT:
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1069 if (objc != 3) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1070 Tcl_WrongNumArgs(interp, 2, objv, "presence");
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1071 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1072 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1073 if ((presence = gaim_tcl_ref_get(interp, objv[2], GaimTclRefPresence)) == NULL)
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1074 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1075 Tcl_SetObjResult(interp, gaim_tcl_ref_new(GaimTclRefAccount,
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1076 gaim_presence_get_account(presence)));
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1077 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1078 case CMD_PRESENCE_ACTIVE_STATUS:
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1079 if (objc != 3 && objc != 4 && objc != 5) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1080 Tcl_WrongNumArgs(interp, 2, objv, "presence [?status_id? | ?-primitive primitive?]");
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1081 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1082 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1083 if ((presence = gaim_tcl_ref_get(interp, objv[2], GaimTclRefPresence)) == NULL)
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1084 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1085 if (objc == 3) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1086 Tcl_SetObjResult(interp,
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1087 gaim_tcl_ref_new(GaimTclRefStatus,
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1088 gaim_presence_get_active_status(presence)));
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1089 } else if (objc == 4) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1090 Tcl_SetBooleanObj(result,
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1091 gaim_presence_is_status_active(presence,
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1092 Tcl_GetString(objv[3])));
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1093 } else {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1094 GaimStatusPrimitive primitive;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1095 if (strcmp(Tcl_GetString(objv[3]), "-primitive")) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1096 Tcl_SetStringObj(result, "bad option \"", -1);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1097 Tcl_AppendObjToObj(result, objv[3]);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1098 Tcl_AppendToObj(result,
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1099 "\": should be -primitive", -1);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1100 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1101 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1102 primitive = gaim_primitive_get_type_from_id(Tcl_GetString(objv[4]));
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1103 if (primitive == GAIM_STATUS_UNSET) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1104 Tcl_SetStringObj(result, "invalid primitive ", -1);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1105 Tcl_AppendObjToObj(result, objv[4]);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1106 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1107 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1108 Tcl_SetBooleanObj(result, gaim_presence_is_status_primitive_active(presence, primitive));
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1109 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1110 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1111 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1112 case CMD_PRESENCE_AVAILABLE:
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1113 if (objc != 3) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1114 Tcl_WrongNumArgs(interp, 2, objv, "presence");
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1115 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1116 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1117 if ((presence = gaim_tcl_ref_get(interp, objv[2], GaimTclRefPresence)) == NULL)
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1118 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1119 Tcl_SetBooleanObj(result, gaim_presence_is_available(presence));
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1120 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1121 case CMD_PRESENCE_CHAT_USER:
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1122 if (objc != 3) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1123 Tcl_WrongNumArgs(interp, 2, objv, "presence");
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1124 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1125 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1126 if ((presence = gaim_tcl_ref_get(interp, objv[2], GaimTclRefPresence)) == NULL)
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1127 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1128 Tcl_SetStringObj(result, gaim_presence_get_chat_user(presence), -1);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1129 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1130 case CMD_PRESENCE_CONTEXT:
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1131 if (objc != 3) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1132 Tcl_WrongNumArgs(interp, 2, objv, "presence");
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1133 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1134 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1135 if ((presence = gaim_tcl_ref_get(interp, objv[2], GaimTclRefPresence)) == NULL)
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1136 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1137 switch (gaim_presence_get_context(presence)) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1138 case GAIM_PRESENCE_CONTEXT_UNSET:
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1139 Tcl_SetStringObj(result, "unset", -1);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1140 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1141 case GAIM_PRESENCE_CONTEXT_ACCOUNT:
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1142 Tcl_SetStringObj(result, "account", -1);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1143 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1144 case GAIM_PRESENCE_CONTEXT_CONV:
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1145 Tcl_SetStringObj(result, "conversation", -1);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1146 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1147 case GAIM_PRESENCE_CONTEXT_BUDDY:
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1148 Tcl_SetStringObj(result, "buddy", -1);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1149 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1150 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1151 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1152 case CMD_PRESENCE_CONVERSATION:
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1153 if (objc != 3) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1154 Tcl_WrongNumArgs(interp, 2, objv, "presence");
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1155 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1156 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1157 if ((presence = gaim_tcl_ref_get(interp, objv[2], GaimTclRefPresence)) == NULL)
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1158 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1159 Tcl_SetObjResult(interp, gaim_tcl_ref_new(GaimTclRefConversation,
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1160 gaim_presence_get_conversation(presence)));
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1161 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1162 case CMD_PRESENCE_IDLE:
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1163 if (objc < 3 || objc > 5) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1164 Tcl_WrongNumArgs(interp, 2, objv, "presence ?idle? ?time?");
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1165 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1166 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1167 if ((presence = gaim_tcl_ref_get(interp, objv[2], GaimTclRefPresence)) == NULL)
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1168 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1169 if (objc == 3) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1170 if (gaim_presence_is_idle(presence)) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1171 idle_time = gaim_presence_get_idle_time (presence);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1172 Tcl_SetIntObj(result, idle_time);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1173 } else {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1174 result = Tcl_NewListObj(0, NULL);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1175 Tcl_SetObjResult(interp, result);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1176 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1177 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1178 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1179 if ((error = Tcl_GetBooleanFromObj(interp, objv[3], &idle)) != TCL_OK)
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1180 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1181 if (objc == 4) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1182 gaim_presence_set_idle(presence, idle, time(NULL));
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1183 } else if (objc == 5) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1184 if ((error = Tcl_GetIntFromObj(interp,
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1185 objv[4],
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1186 &idle_time)) != TCL_OK)
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1187 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1188 gaim_presence_set_idle(presence, idle, idle_time);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1189 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1190 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1191 case CMD_PRESENCE_LOGIN:
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1192 if (objc != 3 && objc != 4) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1193 Tcl_WrongNumArgs(interp, 2, objv, "presence ?time?");
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1194 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1195 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1196 if ((presence = gaim_tcl_ref_get(interp, objv[2], GaimTclRefPresence)) == NULL)
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1197 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1198 if (objc == 3) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1199 Tcl_SetIntObj(result, gaim_presence_get_login_time(presence));
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1200 } else {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1201 if ((error == Tcl_GetIntFromObj(interp,
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1202 objv[3],
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1203 &login_time)) != TCL_OK)
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1204 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1205 gaim_presence_set_login_time(presence, login_time);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1206 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1207 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1208 case CMD_PRESENCE_ONLINE:
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1209 if (objc != 3) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1210 Tcl_WrongNumArgs(interp, 2, objv, "presence");
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1211 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1212 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1213 if ((presence = gaim_tcl_ref_get(interp, objv[2], GaimTclRefPresence)) == NULL)
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1214 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1215 Tcl_SetBooleanObj(result, gaim_presence_is_online(presence));
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1216 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1217 case CMD_PRESENCE_STATUS:
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1218 if (objc != 4) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1219 Tcl_WrongNumArgs(interp, 2, objv, "presence status_id");
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1220 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1221 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1222 if ((presence = gaim_tcl_ref_get(interp, objv[2], GaimTclRefPresence)) == NULL)
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1223 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1224 Tcl_SetObjResult(interp,
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1225 gaim_tcl_ref_new(GaimTclRefStatus,
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1226 gaim_presence_get_status(presence,
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1227 Tcl_GetString(objv[3]))));
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1228 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1229 case CMD_PRESENCE_STATUSES:
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1230 if (objc != 3) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1231 Tcl_WrongNumArgs(interp, 2, objv, "presence");
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1232 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1233 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1234 if ((presence = gaim_tcl_ref_get(interp, objv[2], GaimTclRefPresence)) == NULL)
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1235 return TCL_ERROR;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1236 list = Tcl_NewListObj(0, NULL);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1237 for (cur = gaim_presence_get_statuses(presence); cur != NULL;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1238 cur = g_list_next(cur)) {
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1239 elem = gaim_tcl_ref_new(GaimTclRefStatus, cur->data);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1240 Tcl_ListObjAppendElement(interp, list, elem);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1241 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1242 Tcl_SetObjResult(interp, list);
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1243 break;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1244 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1245
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1246 return TCL_OK;
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1247 }
b17175505b38 [gaim-migrate @ 16254]
Ethan Blanton <elb@pidgin.im>
parents: 13817
diff changeset
1248
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1249 int tcl_cmd_send_im(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1250 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1251 GaimConnection *gc;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1252 char *who, *text;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1253
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1254 if (objc != 4) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1255 Tcl_WrongNumArgs(interp, 1, objv, "gc who text");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1256 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1257 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1258
13817
ba01c6caad7d [gaim-migrate @ 16247]
Ethan Blanton <elb@pidgin.im>
parents: 13812
diff changeset
1259 if ((gc = tcl_validate_gc(objv[1], interp)) == NULL)
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1260 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1261
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1262 who = Tcl_GetString(objv[2]);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1263 text = Tcl_GetString(objv[3]);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1264
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6864
diff changeset
1265 serv_send_im(gc, who, text, 0);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1266
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1267 return TCL_OK;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1268 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1269
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1270 int tcl_cmd_signal(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1271 {
10339
246feba79f04 [gaim-migrate @ 11548]
Mark Doliner <markdoliner@pidgin.im>
parents: 10246
diff changeset
1272 const char *cmds[] = { "connect", "disconnect", NULL };
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1273 enum { CMD_SIGNAL_CONNECT, CMD_SIGNAL_DISCONNECT } cmd;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1274 struct tcl_signal_handler *handler;
10597
41d2db9fefd5 [gaim-migrate @ 12012]
Ethan Blanton <elb@pidgin.im>
parents: 10401
diff changeset
1275 Tcl_Obj *result = Tcl_GetObjResult(interp);
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1276 void *instance;
10597
41d2db9fefd5 [gaim-migrate @ 12012]
Ethan Blanton <elb@pidgin.im>
parents: 10401
diff changeset
1277 int error;
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1278
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1279 if (objc < 2) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1280 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1281 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1282 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1283
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1284 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1285 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1286
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1287 switch (cmd) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1288 case CMD_SIGNAL_CONNECT:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1289 if (objc != 6) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1290 Tcl_WrongNumArgs(interp, 2, objv, "instance signal args proc");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1291 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1292 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1293 handler = g_new0(struct tcl_signal_handler, 1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1294 if ((error = Tcl_GetIntFromObj(interp, objv[2], (int *)&handler->instance)) != TCL_OK) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1295 g_free(handler);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1296 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1297 }
10597
41d2db9fefd5 [gaim-migrate @ 12012]
Ethan Blanton <elb@pidgin.im>
parents: 10401
diff changeset
1298 handler->signal = objv[3];
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1299 Tcl_IncrRefCount(handler->signal);
10597
41d2db9fefd5 [gaim-migrate @ 12012]
Ethan Blanton <elb@pidgin.im>
parents: 10401
diff changeset
1300 handler->args = objv[4];
41d2db9fefd5 [gaim-migrate @ 12012]
Ethan Blanton <elb@pidgin.im>
parents: 10401
diff changeset
1301 handler->proc = objv[5];
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1302 handler->interp = interp;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1303 if (!tcl_signal_connect(handler)) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1304 tcl_signal_handler_free(handler);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1305 Tcl_SetIntObj(result, 1);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1306 } else {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1307 Tcl_SetIntObj(result, 0);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1308 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1309 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1310 case CMD_SIGNAL_DISCONNECT:
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1311 if (objc != 4) {
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1312 Tcl_WrongNumArgs(interp, 2, objv, "instance signal");
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1313 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1314 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1315 if ((error = Tcl_GetIntFromObj(interp, objv[2], (int *)&instance)) != TCL_OK)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1316 return error;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1317 tcl_signal_disconnect(instance, Tcl_GetString(objv[3]), interp);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1318 break;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1319 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1320
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1321 return TCL_OK;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1322 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1323
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1324 int tcl_cmd_status(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1325 {
13828
06d635b64c67 [gaim-migrate @ 16270]
Ethan Blanton <elb@pidgin.im>
parents: 13826
diff changeset
1326 const char *cmds[] = { "attr", "type", NULL };
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1327 enum { CMD_STATUS_ATTR, CMD_STATUS_TYPE } cmd;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1328 Tcl_Obj *result = Tcl_GetObjResult(interp);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1329 GaimStatus *status;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1330 GaimStatusType *status_type;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1331 GaimValue *value;
13826
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1332 const char *attr;
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1333 int error, v;
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1334
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1335 if (objc < 2) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1336 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1337 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1338 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1339
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1340 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1341 return error;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1342
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1343 switch (cmd) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1344 case CMD_STATUS_ATTR:
13826
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1345 if (objc != 4 && objc != 5) {
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1346 Tcl_WrongNumArgs(interp, 2, objv, "status attr_id ?value?");
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1347 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1348 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1349 if ((status = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatus)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1350 return TCL_ERROR;
13826
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1351 attr = Tcl_GetString(objv[3]);
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1352 value = gaim_status_get_attr_value(status, attr);
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1353 if (value == NULL) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1354 Tcl_SetStringObj(result, "no such attribute", -1);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1355 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1356 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1357 switch (gaim_value_get_type(value)) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1358 case GAIM_TYPE_BOOLEAN:
13826
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1359 if (objc == 4) {
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1360 Tcl_SetBooleanObj(result, gaim_value_get_boolean(value));
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1361 } else {
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1362 if ((error = Tcl_GetBooleanFromObj(interp, objv[4], &v)) != TCL_OK)
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1363 return error;
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1364 gaim_status_set_attr_boolean(status, attr, v);
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1365 }
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1366 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1367 case GAIM_TYPE_INT:
13826
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1368 if (objc == 4) {
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1369 Tcl_SetIntObj(result, gaim_value_get_int(value));
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1370 } else {
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1371 if ((error = Tcl_GetIntFromObj(interp, objv[4], &v)) != TCL_OK)
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1372 return error;
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1373 gaim_status_set_attr_int(status, attr, v );
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1374 }
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1375 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1376 case GAIM_TYPE_STRING:
13826
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1377 if (objc == 4)
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1378 Tcl_SetStringObj(result, gaim_value_get_string(value), -1);
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1379 else
f2171c7feeda [gaim-migrate @ 16268]
Ethan Blanton <elb@pidgin.im>
parents: 13823
diff changeset
1380 gaim_status_set_attr_string(status, attr, Tcl_GetString(objv[4]));
13812
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1381 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1382 default:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1383 Tcl_SetStringObj(result, "attribute has unknown type", -1);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1384 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1385 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1386 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1387 case CMD_STATUS_TYPE:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1388 if (objc != 3) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1389 Tcl_WrongNumArgs(interp, 2, objv, "status");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1390 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1391 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1392 if ((status = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatus)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1393 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1394 status_type = gaim_status_get_type(status);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1395 Tcl_SetObjResult(interp, gaim_tcl_ref_new(GaimTclRefStatusType,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1396 status_type));
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1397 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1398 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1399
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1400 return TCL_OK;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1401 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1402
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1403 int tcl_cmd_status_attr(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1404 {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1405 const char *cmds[] = { "id", "name", NULL };
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1406 enum { CMD_STATUS_ATTR_ID, CMD_STATUS_ATTR_NAME } cmd;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1407 Tcl_Obj *result = Tcl_GetObjResult(interp);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1408 GaimStatusAttr *attr;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1409 int error;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1410
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1411 if (objc < 2) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1412 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1413 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1414 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1415
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1416 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1417 return error;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1418
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1419 switch (cmd) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1420 case CMD_STATUS_ATTR_ID:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1421 if (objc != 3) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1422 Tcl_WrongNumArgs(interp, 2, objv, "attr");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1423 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1424 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1425 if ((attr = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusAttr)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1426 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1427 Tcl_SetStringObj(result, gaim_status_attr_get_id(attr), -1);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1428 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1429 case CMD_STATUS_ATTR_NAME:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1430 if (objc != 3) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1431 Tcl_WrongNumArgs(interp, 2, objv, "attr");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1432 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1433 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1434 if ((attr = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusAttr)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1435 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1436 Tcl_SetStringObj(result, gaim_status_attr_get_name(attr), -1);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1437 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1438 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1439
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1440 return TCL_OK;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1441 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1442
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1443 int tcl_cmd_status_type(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1444 {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1445 const char *cmds[] = { "attr", "attrs", "available", "exclusive", "id",
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1446 "independent", "name", "primary_attr",
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1447 "primitive", "saveable", "user_settable",
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1448 NULL };
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1449 enum { CMD_STATUS_TYPE_ATTR, CMD_STATUS_TYPE_ATTRS,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1450 CMD_STATUS_TYPE_AVAILABLE, CMD_STATUS_TYPE_EXCLUSIVE,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1451 CMD_STATUS_TYPE_ID, CMD_STATUS_TYPE_INDEPENDENT,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1452 CMD_STATUS_TYPE_NAME, CMD_STATUS_TYPE_PRIMARY_ATTR,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1453 CMD_STATUS_TYPE_PRIMITIVE, CMD_STATUS_TYPE_SAVEABLE,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1454 CMD_STATUS_TYPE_USER_SETTABLE } cmd;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1455 Tcl_Obj *result = Tcl_GetObjResult(interp);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1456 GaimStatusType *status_type;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1457 Tcl_Obj *list, *elem;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1458 const GList *cur;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1459 int error;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1460
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1461 if (objc < 2) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1462 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1463 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1464 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1465
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1466 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1467 return error;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1468
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1469 switch (cmd) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1470 case CMD_STATUS_TYPE_AVAILABLE:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1471 if (objc != 3) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1472 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1473 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1474 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1475 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1476 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1477 Tcl_SetBooleanObj(result, gaim_status_type_is_available(status_type));
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1478 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1479 case CMD_STATUS_TYPE_ATTR:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1480 if (objc != 4) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1481 Tcl_WrongNumArgs(interp, 2, objv, "statustype attr");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1482 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1483 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1484 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1485 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1486 Tcl_SetObjResult(interp,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1487 gaim_tcl_ref_new(GaimTclRefStatusAttr,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1488 gaim_status_type_get_attr(status_type,
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1489 Tcl_GetStringFromObj(objv[3], NULL))));
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1490 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1491 case CMD_STATUS_TYPE_ATTRS:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1492 if (objc != 3) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1493 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1494 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1495 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1496 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1497 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1498 list = Tcl_NewListObj(0, NULL);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1499 for (cur = gaim_status_type_get_attrs(status_type);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1500 cur != NULL; cur = g_list_next(cur)) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1501 elem = gaim_tcl_ref_new(GaimTclRefStatusAttr, cur->data);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1502 Tcl_ListObjAppendElement(interp, list, elem);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1503 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1504 Tcl_SetObjResult(interp, list);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1505 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1506 case CMD_STATUS_TYPE_EXCLUSIVE:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1507 if (objc != 3) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1508 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1509 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1510 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1511 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1512 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1513 Tcl_SetBooleanObj(result, gaim_status_type_is_exclusive(status_type));
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1514 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1515 case CMD_STATUS_TYPE_ID:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1516 if (objc != 3) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1517 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1518 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1519 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1520 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1521 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1522 Tcl_SetStringObj(result, gaim_status_type_get_id(status_type), -1);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1523 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1524 case CMD_STATUS_TYPE_INDEPENDENT:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1525 if (objc != 3) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1526 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1527 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1528 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1529 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1530 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1531 Tcl_SetBooleanObj(result, gaim_status_type_is_independent(status_type));
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1532 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1533 case CMD_STATUS_TYPE_NAME:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1534 if (objc != 3) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1535 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1536 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1537 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1538 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1539 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1540 Tcl_SetStringObj(result, gaim_status_type_get_name(status_type), -1);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1541 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1542 case CMD_STATUS_TYPE_PRIMITIVE:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1543 if (objc != 3) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1544 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1545 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1546 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1547 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1548 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1549 Tcl_SetStringObj(result, gaim_primitive_get_id_from_type(gaim_status_type_get_primitive(status_type)), -1);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1550 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1551 case CMD_STATUS_TYPE_PRIMARY_ATTR:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1552 if (objc != 3) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1553 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1554 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1555 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1556 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1557 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1558 Tcl_SetStringObj(result, gaim_status_type_get_primary_attr(status_type), -1);
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1559 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1560 case CMD_STATUS_TYPE_SAVEABLE:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1561 if (objc != 3) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1562 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1563 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1564 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1565 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1566 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1567 Tcl_SetBooleanObj(result, gaim_status_type_is_saveable(status_type));
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1568 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1569 case CMD_STATUS_TYPE_USER_SETTABLE:
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1570 if (objc != 3) {
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1571 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1572 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1573 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1574 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1575 return TCL_ERROR;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1576 Tcl_SetBooleanObj(result, gaim_status_type_is_user_settable(status_type));
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1577 break;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1578 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1579
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1580 return TCL_OK;
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1581 }
a10499942a3c [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13424
diff changeset
1582
6694
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1583 static gboolean unload_self(gpointer data)
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1584 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1585 GaimPlugin *plugin = data;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1586 gaim_plugin_unload(plugin);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1587 return FALSE;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1588 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1589
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1590 int tcl_cmd_unload(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1591 {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1592 GaimPlugin *plugin;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1593 if (objc != 1) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1594 Tcl_WrongNumArgs(interp, 1, objv, "");
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1595 return TCL_ERROR;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1596 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1597
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1598 if ((plugin = tcl_interp_get_plugin(interp)) == NULL) {
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1599 /* This isn't exactly OK, but heh. What do you do? */
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1600 return TCL_OK;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1601 }
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1602 /* We can't unload immediately, but we can unload at the first
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1603 * known safe opportunity. */
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1604 g_idle_add(unload_self, (gpointer)plugin);
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1605
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1606 return TCL_OK;
2354eced08e8 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1607 }

mercurial