annotate plugins/tcl/tcl_cmds.c @ 13810:a84523152a24

[gaim-migrate @ 16240] This is not a completed update, but it has useful bits and bug fixes and the completed update will take some more time. This adds support for some of the status API to Tcl, as well as improving the handling of several of the pointer types (by introducing a gaim reference object type and appropriate string roundtrip functions) and introducing some "type safety". committer: Tailor Script <tailor@pidgin.im>
author Ethan Blanton <elb@pidgin.im>
date Sat, 10 Jun 2006 18:01:11 +0000
parents ae682fa78d7f
children 724e4c08391a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1 /**
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
2 * @file tcl_cmds.c Commands for the Gaim Tcl plugin bindings
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
3 *
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
4 * gaim
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
5 *
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
6 * Copyright (C) 2003 Ethan Blanton <eblanton@cs.purdue.edu>
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
7 *
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
2d2f04c5c7d2 [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
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
11 * (at your option) any later version.
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
12 *
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
16 * GNU General Public License for more details.
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
17 *
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
21 */
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
22
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
23 #include <tcl.h>
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
24
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
25 #include "internal.h"
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
26 #include "conversation.h"
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
27 #include "connection.h"
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
28 #include "account.h"
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
29 #include "server.h"
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
30 #include "notify.h"
6700
57161e3abbb5 [gaim-migrate @ 7226]
Ethan Blanton <elb@pidgin.im>
parents: 6694
diff changeset
31 #include "blist.h"
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
32 #include "debug.h"
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
33 #include "prefs.h"
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
34 #include "core.h"
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
35
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
36 #include "tcl_gaim.h"
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
37
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
38 static GaimAccount *tcl_validate_account(Tcl_Obj *obj, Tcl_Interp *interp);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
39 static GaimConversation *tcl_validate_conversation(Tcl_Obj *obj, Tcl_Interp *interp);
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
40 static gboolean tcl_validate_gc(GaimConnection *gc);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
41
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
42 static GaimAccount *tcl_validate_account(Tcl_Obj *obj, Tcl_Interp *interp)
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
43 {
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
44 GaimAccount *account;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
45 GList *cur;
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
46
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
47 account = gaim_tcl_ref_get(interp, obj, GaimTclRefAccount);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
48
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
49 if (account == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
50 return NULL;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
51
6694
2d2f04c5c7d2 [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)) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
53 if (account == cur->data)
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
54 return account;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
55 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
56 if (interp != NULL)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
57 Tcl_SetStringObj(Tcl_GetObjResult(interp), "invalid account", -1);
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
58 return NULL;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
59 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
60
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
61 static GaimConversation *tcl_validate_conversation(Tcl_Obj *obj, Tcl_Interp *interp)
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
62 {
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
63 GaimConversation *convo;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
64 GList *cur;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
65
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
66 convo = gaim_tcl_ref_get(interp, obj, GaimTclRefConversation);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
67
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
68 if (convo == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
69 return NULL;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
70
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
71 for (cur = gaim_get_conversations(); cur != NULL; cur = g_list_next(cur)) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
72 if (convo == cur->data)
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
73 return convo;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
74 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
75 if (interp != NULL)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
76 Tcl_SetStringObj(Tcl_GetObjResult(interp), "invalid account", -1);
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
77 return NULL;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
78 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
79
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
80 static gboolean tcl_validate_gc(GaimConnection *gc)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
81 {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
82 GList *cur;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
83 for (cur = gaim_connections_get_all(); cur != NULL; cur = g_list_next(cur)) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
84 if (gc == cur->data)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
85 return TRUE;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
86 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
87 return FALSE;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
88 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
89
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
90 int tcl_cmd_account(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
91 {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
92 Tcl_Obj *result = Tcl_GetObjResult(interp), *list, *elem;
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
93 const char *cmds[] = { "active_status", "alias", "connect",
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
94 "connection", "disconnect", "enabled", "find",
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
95 "handle", "isconnected", "list", "protocol",
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
96 "status_type", "status_types", "username", NULL };
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
97 enum { CMD_ACCOUNT_ACTIVE_STATUS, CMD_ACCOUNT_ALIAS,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
98 CMD_ACCOUNT_CONNECT, CMD_ACCOUNT_CONNECTION,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
99 CMD_ACCOUNT_DISCONNECT, CMD_ACCOUNT_ENABLED, CMD_ACCOUNT_FIND,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
100 CMD_ACCOUNT_HANDLE, CMD_ACCOUNT_ISCONNECTED, CMD_ACCOUNT_LIST,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
101 CMD_ACCOUNT_PROTOCOL, CMD_ACCOUNT_STATUS_TYPE,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
102 CMD_ACCOUNT_STATUS_TYPES, CMD_ACCOUNT_USERNAME } cmd;
10339
3eb03f22e082 [gaim-migrate @ 11548]
Mark Doliner <mark@kingant.net>
parents: 10246
diff changeset
103 const char *listopts[] = { "-all", "-online", NULL };
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
104 enum { CMD_ACCOUNTLIST_ALL, CMD_ACCOUNTLIST_ONLINE } listopt;
8834
beb7be215db3 [gaim-migrate @ 9598]
Mark Doliner <mark@kingant.net>
parents: 7713
diff changeset
105 const char *alias;
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
106 const GList *cur;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
107 GaimAccount *account;
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
108 GaimStatusType *status_type;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
109 int error;
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
110 int b;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
111
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
112 if (objc < 2) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
113 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
114 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
115 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
116
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
117 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
118 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
119
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
120 switch (cmd) {
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
121 case CMD_ACCOUNT_ACTIVE_STATUS:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
122 if (objc != 3) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
123 Tcl_WrongNumArgs(interp, 2, objv, "account");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
124 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
125 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
126 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
127 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
128 Tcl_SetObjResult(interp,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
129 gaim_tcl_ref_new(GaimTclRefStatus,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
130 gaim_account_get_active_status(account)));
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
131 break;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
132 case CMD_ACCOUNT_ALIAS:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
133 if (objc != 3) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
134 Tcl_WrongNumArgs(interp, 2, objv, "account");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
135 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
136 }
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
137 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
138 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
139 alias = gaim_account_get_alias(account);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
140 Tcl_SetStringObj(result, alias ? (char *)alias : "", -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
141 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
142 case CMD_ACCOUNT_CONNECT:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
143 if (objc != 3) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
144 Tcl_WrongNumArgs(interp, 2, objv, "account");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
145 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
146 }
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
147 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
148 return TCL_ERROR;
10740
94cc67130789 [gaim-migrate @ 12342]
Mark Doliner <mark@kingant.net>
parents: 10738
diff changeset
149 if (!gaim_account_is_connected(account))
94cc67130789 [gaim-migrate @ 12342]
Mark Doliner <mark@kingant.net>
parents: 10738
diff changeset
150 gaim_account_connect(account);
94cc67130789 [gaim-migrate @ 12342]
Mark Doliner <mark@kingant.net>
parents: 10738
diff changeset
151 Tcl_SetIntObj(result, (int)gaim_account_get_connection(account));
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
152 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
153 case CMD_ACCOUNT_CONNECTION:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
154 if (objc != 3) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
155 Tcl_WrongNumArgs(interp, 2, objv, "account");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
156 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
157 }
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
158
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
159 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
160 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
161 Tcl_SetIntObj(result, (int)gaim_account_get_connection(account));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
162 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
163 case CMD_ACCOUNT_DISCONNECT:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
164 if (objc != 3) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
165 Tcl_WrongNumArgs(interp, 2, objv, "account");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
166 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
167 }
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
168 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
169 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
170 gaim_account_disconnect(account);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
171 break;
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
172 case CMD_ACCOUNT_ENABLED:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
173 if (objc != 3 && objc != 4) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
174 Tcl_WrongNumArgs(interp, 2, objv, "account ?enabled?");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
175 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
176 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
177 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
178 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
179 if (objc == 3) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
180 Tcl_SetBooleanObj(result,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
181 gaim_account_get_enabled(account,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
182 gaim_core_get_ui()));
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
183 } else {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
184 if ((error = Tcl_GetBooleanFromObj(interp, objv[3], &b)) != TCL_OK)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
185 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
186 gaim_account_set_enabled(account, gaim_core_get_ui(), b);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
187 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
188 break;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
189 case CMD_ACCOUNT_FIND:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
190 if (objc != 4) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
191 Tcl_WrongNumArgs(interp, 2, objv, "username protocol");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
192 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
193 }
7156
bb484e976aa8 [gaim-migrate @ 7723]
Nathan Walp <nwalp@pidgin.im>
parents: 7118
diff changeset
194 Tcl_SetIntObj(result, (int)gaim_accounts_find(Tcl_GetString(objv[2]),
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
195 Tcl_GetString(objv[3])));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
196 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
197 case CMD_ACCOUNT_HANDLE:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
198 if (objc != 2) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
199 Tcl_WrongNumArgs(interp, 2, objv, "");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
200 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
201 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
202 Tcl_SetIntObj(result, (int)gaim_accounts_get_handle());
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
203 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
204 case CMD_ACCOUNT_ISCONNECTED:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
205 if (objc != 3) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
206 Tcl_WrongNumArgs(interp, 2, objv, "account");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
207 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
208 }
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
209 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
210 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
211 Tcl_SetBooleanObj(result, gaim_account_is_connected(account));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
212 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
213 case CMD_ACCOUNT_LIST:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
214 listopt = CMD_ACCOUNTLIST_ALL;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
215 if (objc > 3) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
216 Tcl_WrongNumArgs(interp, 2, objv, "?option?");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
217 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
218 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
219 if (objc == 3) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
220 if ((error = Tcl_GetIndexFromObj(interp, objv[2], listopts, "option", 0, (int *)&listopt)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
221 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
222 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
223 list = Tcl_NewListObj(0, NULL);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
224 for (cur = gaim_accounts_get_all(); cur != NULL; cur = g_list_next(cur)) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
225 account = cur->data;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
226 if (listopt == CMD_ACCOUNTLIST_ONLINE && !gaim_account_is_connected(account))
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
227 continue;
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
228 elem = gaim_tcl_ref_new(GaimTclRefAccount, account);
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
229 Tcl_ListObjAppendElement(interp, list, elem);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
230 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
231 Tcl_SetObjResult(interp, list);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
232 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
233 case CMD_ACCOUNT_PROTOCOL:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
234 if (objc != 3) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
235 Tcl_WrongNumArgs(interp, 2, objv, "account");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
236 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
237 }
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
238 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
239 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
240 Tcl_SetStringObj(result, (char *)gaim_account_get_protocol_id(account), -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
241 break;
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
242 case CMD_ACCOUNT_STATUS_TYPE:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
243 if (objc != 4 && objc != 5) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
244 Tcl_WrongNumArgs(interp, 2, objv, "account ?statustype? ?-primitive primitive?");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
245 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
246 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
247 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
248 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
249 if (objc == 4) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
250 status_type = gaim_account_get_status_type(account,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
251 Tcl_GetString(objv[3]));
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
252 } else {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
253 GaimStatusPrimitive primitive;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
254 if (strcmp(Tcl_GetString(objv[3]), "-primitive")) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
255 Tcl_SetStringObj(result, "bad option \"", -1);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
256 Tcl_AppendObjToObj(result, objv[3]);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
257 Tcl_AppendToObj(result,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
258 "\": should be -primitive", -1);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
259 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
260 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
261 primitive = gaim_primitive_get_type_from_id(Tcl_GetString(objv[4]));
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
262 status_type = gaim_account_get_status_type_with_primitive(account,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
263 primitive);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
264 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
265 if (status_type == NULL) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
266 Tcl_SetStringObj(result, "status type not found", -1);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
267 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
268 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
269 Tcl_SetObjResult(interp,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
270 gaim_tcl_ref_new(GaimTclRefStatusType,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
271 status_type));
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
272 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
273 case CMD_ACCOUNT_STATUS_TYPES:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
274 if (objc != 3) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
275 Tcl_WrongNumArgs(interp, 2, objv, "account");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
276 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
277 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
278 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
279 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
280 list = Tcl_NewListObj(0, NULL);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
281 for (cur = gaim_account_get_status_types(account); cur != NULL;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
282 cur = g_list_next(cur)) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
283 Tcl_ListObjAppendElement(interp, list,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
284 gaim_tcl_ref_new(GaimTclRefStatusType,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
285 cur->data));
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
286 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
287 Tcl_SetObjResult(interp, list);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
288 break;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
289 case CMD_ACCOUNT_USERNAME:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
290 if (objc != 3) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
291 Tcl_WrongNumArgs(interp, 2, objv, "account");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
292 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
293 }
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
294 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
295 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
296 Tcl_SetStringObj(result, (char *)gaim_account_get_username(account), -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
297 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
298 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
299
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
300 return TCL_OK;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
301 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
302
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
303 static GaimBlistNode *tcl_list_to_buddy(Tcl_Interp *interp, int count, Tcl_Obj **elems)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
304 {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
305 GaimBlistNode *node = NULL;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
306 GaimAccount *account;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
307 char *name;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
308 char *type;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
309
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
310 if (count < 3) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
311 Tcl_SetStringObj(Tcl_GetObjResult(interp), "list too short", -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
312 return NULL;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
313 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
314
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
315 type = Tcl_GetString(elems[0]);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
316 name = Tcl_GetString(elems[1]);
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
317 if ((account = tcl_validate_account(elems[2], interp)) == NULL)
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
318 return NULL;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
319
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
320 if (!strcmp(type, "buddy")) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
321 node = (GaimBlistNode *)gaim_find_buddy(account, name);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
322 } else if (!strcmp(type, "group")) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
323 node = (GaimBlistNode *)gaim_blist_find_chat(account, name);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
324 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
325
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
326 return node;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
327 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
328
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
329 int tcl_cmd_buddy(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
330 {
6746
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
331 Tcl_Obj *list, *tclgroup, *tclgrouplist, *tclcontact, *tclcontactlist, *tclbud, **elems, *result;
10339
3eb03f22e082 [gaim-migrate @ 11548]
Mark Doliner <mark@kingant.net>
parents: 10246
diff changeset
332 const char *cmds[] = { "alias", "handle", "info", "list", NULL };
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
333 enum { CMD_BUDDY_ALIAS, CMD_BUDDY_HANDLE, CMD_BUDDY_INFO, CMD_BUDDY_LIST } cmd;
7100
abdc55ffadba [gaim-migrate @ 7665]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
334 GaimBuddyList *blist;
6746
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
335 GaimBlistNode *node, *gnode, *bnode;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
336 GaimAccount *account;
6746
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
337 GaimBuddy *bud;
7118
bf630f7dfdcd [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7100
diff changeset
338 GaimChat *cnode;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
339 int error, all = 0, count;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
340
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
341 if (objc < 2) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
342 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
343 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
344 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
345 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
346 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
347
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
348 result = Tcl_GetObjResult(interp);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
349
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
350 switch (cmd) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
351 case CMD_BUDDY_ALIAS:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
352 if (objc != 3) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
353 Tcl_WrongNumArgs(interp, 2, objv, "buddy");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
354 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
355 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
356 if ((error = Tcl_ListObjGetElements(interp, objv[2], &count, &elems)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
357 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
358 if ((node = tcl_list_to_buddy(interp, count, elems)) == NULL)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
359 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
360 if (node->type == GAIM_BLIST_CHAT_NODE)
7118
bf630f7dfdcd [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7100
diff changeset
361 Tcl_SetStringObj(result, ((GaimChat *)node)->alias, -1);
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
362 else if (node->type == GAIM_BLIST_BUDDY_NODE)
9620
c001be3c330e [gaim-migrate @ 10464]
Mark Doliner <mark@kingant.net>
parents: 8834
diff changeset
363 Tcl_SetStringObj(result, (char *)gaim_buddy_get_alias((GaimBuddy *)node), -1);
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
364 return TCL_OK;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
365 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
366 case CMD_BUDDY_HANDLE:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
367 if (objc != 2) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
368 Tcl_WrongNumArgs(interp, 2, objv, "");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
369 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
370 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
371 Tcl_SetIntObj(result, (int)gaim_blist_get_handle());
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
372 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
373 case CMD_BUDDY_INFO:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
374 if (objc != 3 && objc != 4) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
375 Tcl_WrongNumArgs(interp, 2, objv, "( buddy | account username )");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
376 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
377 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
378 if (objc == 3) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
379 if ((error = Tcl_ListObjGetElements(interp, objv[2], &count, &elems)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
380 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
381 if (count < 3) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
382 Tcl_SetStringObj(result, "buddy too short", -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
383 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
384 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
385 if (strcmp("buddy", Tcl_GetString(elems[0]))) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
386 Tcl_SetStringObj(result, "invalid buddy", -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
387 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
388 }
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
389 if ((account = tcl_validate_account(elems[2], interp)) == NULL)
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
390 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
391 serv_get_info(gaim_account_get_connection(account), Tcl_GetString(elems[1]));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
392 } else {
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
393 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
394 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
395 serv_get_info(gaim_account_get_connection(account), Tcl_GetString(objv[3]));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
396 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
397 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
398 case CMD_BUDDY_LIST:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
399 if (objc == 3) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
400 if (!strcmp("-all", Tcl_GetString(objv[2]))) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
401 all = 1;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
402 } else {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
403 Tcl_SetStringObj(result, "", -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
404 Tcl_AppendStringsToObj(result, "unknown option: ", Tcl_GetString(objv[2]), NULL);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
405 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
406 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
407 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
408 list = Tcl_NewListObj(0, NULL);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
409 blist = gaim_get_blist();
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
410 for (gnode = blist->root; gnode != NULL; gnode = gnode->next) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
411 tclgroup = Tcl_NewListObj(0, NULL);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
412 Tcl_ListObjAppendElement(interp, tclgroup, Tcl_NewStringObj("group", -1));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
413 Tcl_ListObjAppendElement(interp, tclgroup,
6700
57161e3abbb5 [gaim-migrate @ 7226]
Ethan Blanton <elb@pidgin.im>
parents: 6694
diff changeset
414 Tcl_NewStringObj(((GaimGroup *)gnode)->name, -1));
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
415 tclgrouplist = Tcl_NewListObj(0, NULL);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
416 for (node = gnode->child; node != NULL; node = node->next) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
417 switch (node->type) {
6746
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
418 case GAIM_BLIST_CONTACT_NODE:
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
419 tclcontact = Tcl_NewListObj(0, NULL);
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
420 Tcl_IncrRefCount(tclcontact);
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
421 Tcl_ListObjAppendElement(interp, tclcontact, Tcl_NewStringObj("contact", -1));
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
422 tclcontactlist = Tcl_NewListObj(0, NULL);
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
423 Tcl_IncrRefCount(tclcontactlist);
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
424 count = 0;
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
425 for (bnode = node->child; bnode != NULL; bnode = bnode ->next) {
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
426 if (bnode->type != GAIM_BLIST_BUDDY_NODE)
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
427 continue;
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
428 bud = (GaimBuddy *)bnode;
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
429 if (!all && !gaim_account_is_connected(bud->account))
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
430 continue;
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
431 count++;
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
432 tclbud = Tcl_NewListObj(0, NULL);
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
433 Tcl_ListObjAppendElement(interp, tclbud, Tcl_NewStringObj("buddy", -1));
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
434 Tcl_ListObjAppendElement(interp, tclbud, Tcl_NewStringObj(bud->name, -1));
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
435 Tcl_ListObjAppendElement(interp, tclbud, gaim_tcl_ref_new(GaimTclRefAccount, bud->account));
6746
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
436 Tcl_ListObjAppendElement(interp, tclcontactlist, tclbud);
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
437 }
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
438 if (count) {
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
439 Tcl_ListObjAppendElement(interp, tclcontact, tclcontactlist);
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
440 Tcl_ListObjAppendElement(interp, tclgrouplist, tclcontact);
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
441 }
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
442 Tcl_DecrRefCount(tclcontact);
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
443 Tcl_DecrRefCount(tclcontactlist);
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
444 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
445 case GAIM_BLIST_CHAT_NODE:
7118
bf630f7dfdcd [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7100
diff changeset
446 cnode = (GaimChat *)node;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
447 if (!all && !gaim_account_is_connected(cnode->account))
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
448 continue;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
449 tclbud = Tcl_NewListObj(0, NULL);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
450 Tcl_ListObjAppendElement(interp, tclbud, Tcl_NewStringObj("chat", -1));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
451 Tcl_ListObjAppendElement(interp, tclbud, Tcl_NewStringObj(cnode->alias, -1));
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
452 Tcl_ListObjAppendElement(interp, tclbud, gaim_tcl_ref_new(GaimTclRefAccount, cnode->account));
6746
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
453 Tcl_ListObjAppendElement(interp, tclgrouplist, tclbud);
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
454 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
455 default:
6746
c45c90c8ce8a [gaim-migrate @ 7278]
Ethan Blanton <elb@pidgin.im>
parents: 6737
diff changeset
456 gaim_debug(GAIM_DEBUG_WARNING, "tcl", "Unexpected buddy type %d", node->type);
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
457 continue;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
458 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
459 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
460 Tcl_ListObjAppendElement(interp, tclgroup, tclgrouplist);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
461 Tcl_ListObjAppendElement(interp, list, tclgroup);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
462 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
463 Tcl_SetObjResult(interp, list);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
464 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
465 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
466
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
467 return TCL_OK;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
468 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
469
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
470 int tcl_cmd_connection(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
471 {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
472 Tcl_Obj *result = Tcl_GetObjResult(interp), *list, *elem;
10339
3eb03f22e082 [gaim-migrate @ 11548]
Mark Doliner <mark@kingant.net>
parents: 10246
diff changeset
473 const char *cmds[] = { "account", "displayname", "handle", "list", NULL };
7713
1adc71ed6d45 [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
474 enum { CMD_CONN_ACCOUNT, CMD_CONN_DISPLAYNAME, CMD_CONN_HANDLE, CMD_CONN_LIST } cmd;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
475 int error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
476 GList *cur;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
477 GaimConnection *gc;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
478
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
479 if (objc < 2) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
480 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
481 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
482 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
483
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
484 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
485 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
486
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
487 switch (cmd) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
488 case CMD_CONN_ACCOUNT:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
489 if (objc != 3) {
6864
1dd0f3492ab1 [gaim-migrate @ 7410]
Luke Schierer <lschiere@pidgin.im>
parents: 6746
diff changeset
490 Tcl_WrongNumArgs(interp, 2, objv, "gc");
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
491 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
492 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
493 error = Tcl_GetIntFromObj(interp, objv[2], (int *)&gc);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
494 if (error || !tcl_validate_gc(gc)) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
495 Tcl_SetStringObj(result, "invalid gc", -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
496 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
497 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
498 Tcl_SetIntObj(result, (int)gaim_connection_get_account(gc));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
499 break;
7713
1adc71ed6d45 [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
500 case CMD_CONN_DISPLAYNAME:
1adc71ed6d45 [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
501 if (objc != 3) {
1adc71ed6d45 [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
502 Tcl_WrongNumArgs(interp, 2, objv, "gc");
1adc71ed6d45 [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
503 return TCL_ERROR;
1adc71ed6d45 [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
504 }
1adc71ed6d45 [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
505 error = Tcl_GetIntFromObj(interp, objv[2], (int *)&gc);
1adc71ed6d45 [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
506 if (error || !tcl_validate_gc(gc)) {
1adc71ed6d45 [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
507 Tcl_SetStringObj(result, "invalid gc", -1);
1adc71ed6d45 [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
508 return TCL_ERROR;
1adc71ed6d45 [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
509 }
1adc71ed6d45 [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
510 Tcl_SetStringObj(result, (char *)gaim_connection_get_display_name(gc), -1);
1adc71ed6d45 [gaim-migrate @ 8358]
Ethan Blanton <elb@pidgin.im>
parents: 7156
diff changeset
511 break;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
512 case CMD_CONN_HANDLE:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
513 if (objc != 2) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
514 Tcl_WrongNumArgs(interp, 2, objv, "");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
515 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
516 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
517 Tcl_SetIntObj(result, (int)gaim_connections_get_handle());
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
518 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
519 case CMD_CONN_LIST:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
520 if (objc != 2) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
521 Tcl_WrongNumArgs(interp, 2, objv, "");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
522 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
523 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
524 list = Tcl_NewListObj(0, NULL);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
525 for (cur = gaim_connections_get_all(); cur != NULL; cur = g_list_next(cur)) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
526 elem = Tcl_NewIntObj((int)cur->data);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
527 Tcl_ListObjAppendElement(interp, list, elem);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
528 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
529 Tcl_SetObjResult(interp, list);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
530 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
531 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
532
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
533 return TCL_OK;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
534 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
535
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
536 int tcl_cmd_conversation(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
537 {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
538 Tcl_Obj *list, *elem, *result = Tcl_GetObjResult(interp);
10339
3eb03f22e082 [gaim-migrate @ 11548]
Mark Doliner <mark@kingant.net>
parents: 10246
diff changeset
539 const char *cmds[] = { "find", "handle", "list", "new", "write", NULL };
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
540 enum { CMD_CONV_FIND, CMD_CONV_HANDLE, CMD_CONV_LIST, CMD_CONV_NEW, CMD_CONV_WRITE } cmd;
10339
3eb03f22e082 [gaim-migrate @ 11548]
Mark Doliner <mark@kingant.net>
parents: 10246
diff changeset
541 const char *styles[] = { "send", "recv", "system", NULL };
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
542 enum { CMD_CONV_WRITE_SEND, CMD_CONV_WRITE_RECV, CMD_CONV_WRITE_SYSTEM } style;
10339
3eb03f22e082 [gaim-migrate @ 11548]
Mark Doliner <mark@kingant.net>
parents: 10246
diff changeset
543 const char *newopts[] = { "-chat", "-im" };
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
544 enum { CMD_CONV_NEW_CHAT, CMD_CONV_NEW_IM } newopt;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
545 GaimConversation *convo;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
546 GaimAccount *account;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
547 GaimConversationType type;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
548 GList *cur;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
549 char *opt, *from, *what;
7156
bb484e976aa8 [gaim-migrate @ 7723]
Nathan Walp <nwalp@pidgin.im>
parents: 7118
diff changeset
550 int error, argsused, flags = 0;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
551
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
552 if (objc < 2) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
553 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
554 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
555 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
556
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
557 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
558 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
559
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
560 switch (cmd) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
561 case CMD_CONV_FIND:
10829
dae370949a39 [gaim-migrate @ 12495]
Ethan Blanton <elb@pidgin.im>
parents: 10820
diff changeset
562 if (objc != 4) {
dae370949a39 [gaim-migrate @ 12495]
Ethan Blanton <elb@pidgin.im>
parents: 10820
diff changeset
563 Tcl_WrongNumArgs(interp, 2, objv, "account name");
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
564 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
565 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
566 account = NULL;
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
567 if ((account = tcl_validate_account(objv[2], interp)) == NULL)
10829
dae370949a39 [gaim-migrate @ 12495]
Ethan Blanton <elb@pidgin.im>
parents: 10820
diff changeset
568 return TCL_ERROR;
11338
17142948653e [gaim-migrate @ 13551]
Mark Doliner <mark@kingant.net>
parents: 10829
diff changeset
569 convo = gaim_find_conversation_with_account(GAIM_CONV_TYPE_ANY,
10829
dae370949a39 [gaim-migrate @ 12495]
Ethan Blanton <elb@pidgin.im>
parents: 10820
diff changeset
570 Tcl_GetString(objv[3]),
dae370949a39 [gaim-migrate @ 12495]
Ethan Blanton <elb@pidgin.im>
parents: 10820
diff changeset
571 account);
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
572 Tcl_SetIntObj(result, (int)convo);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
573 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
574 case CMD_CONV_HANDLE:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
575 if (objc != 2) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
576 Tcl_WrongNumArgs(interp, 2, objv, "");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
577 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
578 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
579 Tcl_SetIntObj(result, (int)gaim_conversations_get_handle());
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
580 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
581 case CMD_CONV_LIST:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
582 list = Tcl_NewListObj(0, NULL);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
583 for (cur = gaim_get_conversations(); cur != NULL; cur = g_list_next(cur)) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
584 elem = Tcl_NewIntObj((int)cur->data);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
585 Tcl_ListObjAppendElement(interp, list, elem);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
586 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
587 Tcl_SetObjResult(interp, list);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
588 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
589 case CMD_CONV_NEW:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
590 if (objc < 4) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
591 Tcl_WrongNumArgs(interp, 2, objv, "?options? account name");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
592 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
593 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
594 argsused = 2;
11338
17142948653e [gaim-migrate @ 13551]
Mark Doliner <mark@kingant.net>
parents: 10829
diff changeset
595 type = GAIM_CONV_TYPE_IM;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
596 while (argsused < objc) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
597 opt = Tcl_GetString(objv[argsused]);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
598 if (*opt == '-') {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
599 if ((error = Tcl_GetIndexFromObj(interp, objv[argsused], newopts,
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
600 "option", 0, (int *)&newopt)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
601 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
602 argsused++;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
603 switch (newopt) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
604 case CMD_CONV_NEW_CHAT:
11338
17142948653e [gaim-migrate @ 13551]
Mark Doliner <mark@kingant.net>
parents: 10829
diff changeset
605 type = GAIM_CONV_TYPE_CHAT;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
606 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
607 case CMD_CONV_NEW_IM:
11338
17142948653e [gaim-migrate @ 13551]
Mark Doliner <mark@kingant.net>
parents: 10829
diff changeset
608 type = GAIM_CONV_TYPE_IM;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
609 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
610 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
611 } else {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
612 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
613 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
614 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
615 if (objc - argsused != 2) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
616 Tcl_WrongNumArgs(interp, 2, objv, "?options? account name");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
617 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
618 }
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
619 if ((account = tcl_validate_account(objv[argsused++], interp)) == NULL)
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
620 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
621 convo = gaim_conversation_new(type, account, Tcl_GetString(objv[argsused]));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
622 Tcl_SetIntObj(result, (int)convo);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
623 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
624 case CMD_CONV_WRITE:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
625 if (objc != 6) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
626 Tcl_WrongNumArgs(interp, 2, objv, "conversation style from what");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
627 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
628 }
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
629 if ((convo = tcl_validate_conversation(objv[2], interp)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
630 return TCL_ERROR;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
631 if ((error = Tcl_GetIndexFromObj(interp, objv[3], styles, "style", 0, (int *)&style)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
632 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
633 from = Tcl_GetString(objv[4]);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
634 what = Tcl_GetString(objv[5]);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
635
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
636 switch (style) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
637 case CMD_CONV_WRITE_SEND:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
638 flags = GAIM_MESSAGE_SEND;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
639 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
640 case CMD_CONV_WRITE_RECV:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
641 flags = GAIM_MESSAGE_RECV;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
642 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
643 case CMD_CONV_WRITE_SYSTEM:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
644 flags = GAIM_MESSAGE_SYSTEM;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
645 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
646 }
11338
17142948653e [gaim-migrate @ 13551]
Mark Doliner <mark@kingant.net>
parents: 10829
diff changeset
647 if (gaim_conversation_get_type(convo) == GAIM_CONV_TYPE_CHAT)
7118
bf630f7dfdcd [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7100
diff changeset
648 gaim_conv_chat_write(GAIM_CONV_CHAT(convo), from, what, flags, time(NULL));
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
649 else
7118
bf630f7dfdcd [gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents: 7100
diff changeset
650 gaim_conv_im_write(GAIM_CONV_IM(convo), from, what, flags, time(NULL));
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
651 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
652 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
653
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
654 return TCL_OK;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
655 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
656
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
657 int tcl_cmd_core(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
658 {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
659 Tcl_Obj *result = Tcl_GetObjResult(interp);
10339
3eb03f22e082 [gaim-migrate @ 11548]
Mark Doliner <mark@kingant.net>
parents: 10246
diff changeset
660 const char *cmds[] = { "handle", "quit", NULL };
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
661 enum { CMD_CORE_HANDLE, CMD_CORE_QUIT } cmd;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
662 int error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
663
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
664 if (objc < 2) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
665 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
666 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
667 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
668
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
669 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
670 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
671
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
672 switch (cmd) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
673 case CMD_CORE_HANDLE:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
674 if (objc != 2) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
675 Tcl_WrongNumArgs(interp, 2, objv, "");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
676 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
677 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
678 Tcl_SetIntObj(result, (int)gaim_get_core());
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
679 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
680 case CMD_CORE_QUIT:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
681 if (objc != 2) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
682 Tcl_WrongNumArgs(interp, 2, objv, "");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
683 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
684 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
685 gaim_core_quit();
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
686 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
687 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
688
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
689 return TCL_OK;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
690 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
691
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
692 int tcl_cmd_debug(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
693 {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
694 char *category, *message;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
695 int lev;
10339
3eb03f22e082 [gaim-migrate @ 11548]
Mark Doliner <mark@kingant.net>
parents: 10246
diff changeset
696 const char *levels[] = { "-misc", "-info", "-warning", "-error", NULL };
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
697 GaimDebugLevel levelind[] = { GAIM_DEBUG_MISC, GAIM_DEBUG_INFO, GAIM_DEBUG_WARNING, GAIM_DEBUG_ERROR };
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
698 int error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
699
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
700 if (objc != 4) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
701 Tcl_WrongNumArgs(interp, 1, objv, "level category message");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
702 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
703 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
704
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
705 error = Tcl_GetIndexFromObj(interp, objv[1], levels, "debug level", 0, &lev);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
706 if (error != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
707 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
708
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
709 category = Tcl_GetString(objv[2]);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
710 message = Tcl_GetString(objv[3]);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
711
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
712 gaim_debug(levelind[lev], category, "%s\n", message);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
713
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
714 return TCL_OK;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
715 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
716
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
717 int tcl_cmd_notify(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
718 {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
719 int error, type;
10339
3eb03f22e082 [gaim-migrate @ 11548]
Mark Doliner <mark@kingant.net>
parents: 10246
diff changeset
720 const char *opts[] = { "-error", "-warning", "-info", NULL };
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
721 GaimNotifyMsgType optind[] = { GAIM_NOTIFY_MSG_ERROR, GAIM_NOTIFY_MSG_WARNING, GAIM_NOTIFY_MSG_INFO };
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
722 char *title, *msg1, *msg2;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
723
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
724 if (objc < 4 || objc > 5) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
725 Tcl_WrongNumArgs(interp, 1, objv, "?type? title primary secondary");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
726 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
727 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
728
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
729 if (objc == 4) {
13423
ae682fa78d7f [gaim-migrate @ 15798]
Ethan Blanton <elb@pidgin.im>
parents: 11338
diff changeset
730 type = 1; /* Default to warning */
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
731 title = Tcl_GetString(objv[1]);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
732 msg1 = Tcl_GetString(objv[2]);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
733 msg2 = Tcl_GetString(objv[3]);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
734 } else {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
735 error = Tcl_GetIndexFromObj(interp, objv[1], opts, "message type", 0, &type);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
736 if (error != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
737 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
738 title = Tcl_GetString(objv[2]);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
739 msg1 = Tcl_GetString(objv[3]);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
740 msg2 = Tcl_GetString(objv[4]);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
741 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
742
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
743 gaim_notify_message(_tcl_plugin, optind[type], title, msg1, msg2, NULL, NULL);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
744
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
745 return TCL_OK;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
746 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
747
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
748 int tcl_cmd_prefs(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
749 {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
750 Tcl_Obj *result, *list, *elem, **elems;
10339
3eb03f22e082 [gaim-migrate @ 11548]
Mark Doliner <mark@kingant.net>
parents: 10246
diff changeset
751 const char *cmds[] = { "get", "set", "type", NULL };
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
752 enum { CMD_PREFS_GET, CMD_PREFS_SET, CMD_PREFS_TYPE } cmd;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
753 /* char *types[] = { "none", "boolean", "int", "string", "stringlist", NULL }; */
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
754 /* enum { TCL_PREFS_NONE, TCL_PREFS_BOOL, TCL_PREFS_INT, TCL_PREFS_STRING, TCL_PREFS_STRINGLIST } type; */
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
755 GaimPrefType preftype;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
756 GList *cur;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
757 int error, intval, nelem, i;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
758
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
759 if (objc < 2) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
760 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
761 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
762 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
763
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
764 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
765 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
766
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
767 result = Tcl_GetObjResult(interp);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
768 switch (cmd) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
769 case CMD_PREFS_GET:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
770 if (objc != 3) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
771 Tcl_WrongNumArgs(interp, 1, objv, "path");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
772 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
773 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
774 preftype = gaim_prefs_get_type(Tcl_GetString(objv[2]));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
775 switch (preftype) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
776 case GAIM_PREF_NONE:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
777 Tcl_SetStringObj(result, "pref type none", -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
778 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
779 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
780 case GAIM_PREF_BOOLEAN:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
781 Tcl_SetBooleanObj(result, gaim_prefs_get_bool(Tcl_GetString(objv[2])));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
782 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
783 case GAIM_PREF_INT:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
784 Tcl_SetIntObj(result, gaim_prefs_get_int(Tcl_GetString(objv[2])));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
785 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
786 case GAIM_PREF_STRING:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
787 Tcl_SetStringObj(result, (char *)gaim_prefs_get_string(Tcl_GetString(objv[2])), -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
788 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
789 case GAIM_PREF_STRING_LIST:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
790 cur = gaim_prefs_get_string_list(Tcl_GetString(objv[2]));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
791 list = Tcl_NewListObj(0, NULL);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
792 while (cur != NULL) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
793 elem = Tcl_NewStringObj((char *)cur->data, -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
794 Tcl_ListObjAppendElement(interp, list, elem);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
795 cur = g_list_next(cur);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
796 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
797 Tcl_SetObjResult(interp, list);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
798 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
799 default:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
800 gaim_debug(GAIM_DEBUG_ERROR, "tcl", "tcl does not know about pref type %d\n", preftype);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
801 Tcl_SetStringObj(result, "unknown pref type", -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
802 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
803 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
804 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
805 case CMD_PREFS_SET:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
806 if (objc != 4) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
807 Tcl_WrongNumArgs(interp, 1, objv, "path value");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
808 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
809 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
810 preftype = gaim_prefs_get_type(Tcl_GetString(objv[2]));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
811 switch (preftype) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
812 case GAIM_PREF_NONE:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
813 Tcl_SetStringObj(result, "bad path or pref type none", -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
814 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
815 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
816 case GAIM_PREF_BOOLEAN:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
817 if ((error = Tcl_GetBooleanFromObj(interp, objv[3], &intval)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
818 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
819 gaim_prefs_set_bool(Tcl_GetString(objv[2]), intval);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
820 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
821 case GAIM_PREF_INT:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
822 if ((error = Tcl_GetIntFromObj(interp, objv[3], &intval)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
823 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
824 gaim_prefs_set_int(Tcl_GetString(objv[2]), intval);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
825 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
826 case GAIM_PREF_STRING:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
827 gaim_prefs_set_string(Tcl_GetString(objv[2]), Tcl_GetString(objv[3]));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
828 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
829 case GAIM_PREF_STRING_LIST:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
830 if ((error = Tcl_ListObjGetElements(interp, objv[3], &nelem, &elems)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
831 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
832 cur = NULL;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
833 for (i = 0; i < nelem; i++) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
834 cur = g_list_append(cur, (gpointer)Tcl_GetString(elems[i]));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
835 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
836 gaim_prefs_set_string_list(Tcl_GetString(objv[2]), cur);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
837 g_list_free(cur);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
838 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
839 default:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
840 gaim_debug(GAIM_DEBUG_ERROR, "tcl", "tcl does not know about pref type %d\n", preftype);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
841 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
842 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
843 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
844 case CMD_PREFS_TYPE:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
845 if (objc != 3) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
846 Tcl_WrongNumArgs(interp, 1, objv, "path");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
847 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
848 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
849 preftype = gaim_prefs_get_type(Tcl_GetString(objv[2]));
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
850 switch (preftype) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
851 case GAIM_PREF_NONE:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
852 Tcl_SetStringObj(result, "none", -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
853 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
854 case GAIM_PREF_BOOLEAN:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
855 Tcl_SetStringObj(result, "boolean", -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
856 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
857 case GAIM_PREF_INT:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
858 Tcl_SetStringObj(result, "int", -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
859 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
860 case GAIM_PREF_STRING:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
861 Tcl_SetStringObj(result, "string", -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
862 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
863 case GAIM_PREF_STRING_LIST:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
864 Tcl_SetStringObj(result, "stringlist", -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
865 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
866 default:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
867 gaim_debug(GAIM_DEBUG_ERROR, "tcl", "tcl does not know about pref type %d\n", preftype);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
868 Tcl_SetStringObj(result, "unknown", -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
869 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
870 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
871 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
872
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
873 return TCL_OK;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
874 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
875
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
876 int tcl_cmd_send_im(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
877 {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
878 GaimConnection *gc;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
879 char *who, *text;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
880 int error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
881 Tcl_Obj *result;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
882
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
883 if (objc != 4) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
884 Tcl_WrongNumArgs(interp, 1, objv, "gc who text");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
885 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
886 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
887
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
888 if ((error = Tcl_GetIntFromObj(interp, objv[1], (int *)&gc)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
889 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
890 if (!tcl_validate_gc(gc)) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
891 result = Tcl_GetObjResult(interp);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
892 Tcl_SetStringObj(result, "invalid gc", -1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
893 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
894 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
895
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
896 who = Tcl_GetString(objv[2]);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
897 text = Tcl_GetString(objv[3]);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
898
6982
083d1e4a9c78 [gaim-migrate @ 7538]
Mark Doliner <mark@kingant.net>
parents: 6864
diff changeset
899 serv_send_im(gc, who, text, 0);
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
900
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
901 return TCL_OK;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
902 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
903
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
904 int tcl_cmd_signal(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
905 {
10339
3eb03f22e082 [gaim-migrate @ 11548]
Mark Doliner <mark@kingant.net>
parents: 10246
diff changeset
906 const char *cmds[] = { "connect", "disconnect", NULL };
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
907 enum { CMD_SIGNAL_CONNECT, CMD_SIGNAL_DISCONNECT } cmd;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
908 struct tcl_signal_handler *handler;
10597
0e886a234d92 [gaim-migrate @ 12012]
Ethan Blanton <elb@pidgin.im>
parents: 10401
diff changeset
909 Tcl_Obj *result = Tcl_GetObjResult(interp);
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
910 void *instance;
10597
0e886a234d92 [gaim-migrate @ 12012]
Ethan Blanton <elb@pidgin.im>
parents: 10401
diff changeset
911 int error;
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
912
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
913 if (objc < 2) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
914 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
915 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
916 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
917
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
918 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
919 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
920
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
921 switch (cmd) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
922 case CMD_SIGNAL_CONNECT:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
923 if (objc != 6) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
924 Tcl_WrongNumArgs(interp, 2, objv, "instance signal args proc");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
925 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
926 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
927 handler = g_new0(struct tcl_signal_handler, 1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
928 if ((error = Tcl_GetIntFromObj(interp, objv[2], (int *)&handler->instance)) != TCL_OK) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
929 g_free(handler);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
930 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
931 }
10597
0e886a234d92 [gaim-migrate @ 12012]
Ethan Blanton <elb@pidgin.im>
parents: 10401
diff changeset
932 handler->signal = objv[3];
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
933 Tcl_IncrRefCount(handler->signal);
10597
0e886a234d92 [gaim-migrate @ 12012]
Ethan Blanton <elb@pidgin.im>
parents: 10401
diff changeset
934 handler->args = objv[4];
0e886a234d92 [gaim-migrate @ 12012]
Ethan Blanton <elb@pidgin.im>
parents: 10401
diff changeset
935 handler->proc = objv[5];
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
936 handler->interp = interp;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
937 if (!tcl_signal_connect(handler)) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
938 tcl_signal_handler_free(handler);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
939 Tcl_SetIntObj(result, 1);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
940 } else {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
941 Tcl_SetIntObj(result, 0);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
942 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
943 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
944 case CMD_SIGNAL_DISCONNECT:
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
945 if (objc != 4) {
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
946 Tcl_WrongNumArgs(interp, 2, objv, "instance signal");
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
947 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
948 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
949 if ((error = Tcl_GetIntFromObj(interp, objv[2], (int *)&instance)) != TCL_OK)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
950 return error;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
951 tcl_signal_disconnect(instance, Tcl_GetString(objv[3]), interp);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
952 break;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
953 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
954
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
955 return TCL_OK;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
956 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
957
13810
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
958 int tcl_cmd_status(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
959 {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
960 const char *cmds[] = { "attr", "type" };
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
961 enum { CMD_STATUS_ATTR, CMD_STATUS_TYPE } cmd;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
962 Tcl_Obj *result = Tcl_GetObjResult(interp);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
963 GaimStatus *status;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
964 GaimStatusType *status_type;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
965 GaimValue *value;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
966 int error;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
967
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
968 if (objc < 2) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
969 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
970 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
971 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
972
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
973 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
974 return error;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
975
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
976 switch (cmd) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
977 case CMD_STATUS_ATTR:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
978 if (objc != 4) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
979 Tcl_WrongNumArgs(interp, 2, objv, "status attr_id");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
980 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
981 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
982 if ((status = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatus)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
983 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
984 value = gaim_status_get_attr_value(status, Tcl_GetString(objv[3]));
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
985 if (value == NULL) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
986 Tcl_SetStringObj(result, "no such attribute", -1);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
987 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
988 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
989 switch (gaim_value_get_type(value)) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
990 case GAIM_TYPE_BOOLEAN:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
991 Tcl_SetBooleanObj(result, gaim_value_get_boolean(value));
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
992 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
993 case GAIM_TYPE_INT:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
994 Tcl_SetIntObj(result, gaim_value_get_int(value));
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
995 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
996 case GAIM_TYPE_STRING:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
997 Tcl_SetStringObj(result, gaim_value_get_string(value), -1);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
998 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
999 default:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1000 Tcl_SetStringObj(result, "attribute has unknown type", -1);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1001 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1002 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1003 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1004 case CMD_STATUS_TYPE:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1005 if (objc != 3) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1006 Tcl_WrongNumArgs(interp, 2, objv, "status");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1007 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1008 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1009 if ((status = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatus)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1010 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1011 status_type = gaim_status_get_type(status);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1012 Tcl_SetObjResult(interp, gaim_tcl_ref_new(GaimTclRefStatusType,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1013 status_type));
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1014 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1015 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1016
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1017 return TCL_OK;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1018 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1019
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1020 int tcl_cmd_status_attr(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1021 {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1022 const char *cmds[] = { "id", "name", NULL };
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1023 enum { CMD_STATUS_ATTR_ID, CMD_STATUS_ATTR_NAME } cmd;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1024 Tcl_Obj *result = Tcl_GetObjResult(interp);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1025 GaimStatusAttr *attr;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1026 int error;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1027
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1028 if (objc < 2) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1029 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1030 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1031 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1032
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1033 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1034 return error;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1035
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1036 switch (cmd) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1037 case CMD_STATUS_ATTR_ID:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1038 if (objc != 3) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1039 Tcl_WrongNumArgs(interp, 2, objv, "attr");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1040 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1041 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1042 if ((attr = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusAttr)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1043 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1044 Tcl_SetStringObj(result, gaim_status_attr_get_id(attr), -1);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1045 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1046 case CMD_STATUS_ATTR_NAME:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1047 if (objc != 3) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1048 Tcl_WrongNumArgs(interp, 2, objv, "attr");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1049 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1050 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1051 if ((attr = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusAttr)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1052 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1053 Tcl_SetStringObj(result, gaim_status_attr_get_name(attr), -1);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1054 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1055 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1056
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1057 return TCL_OK;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1058 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1059
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1060 int tcl_cmd_status_type(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1061 {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1062 const char *cmds[] = { "attr", "attrs", "available", "exclusive", "id",
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1063 "independent", "name", "primary_attr",
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1064 "primitive", "saveable", "user_settable",
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1065 NULL };
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1066 enum { CMD_STATUS_TYPE_ATTR, CMD_STATUS_TYPE_ATTRS,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1067 CMD_STATUS_TYPE_AVAILABLE, CMD_STATUS_TYPE_EXCLUSIVE,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1068 CMD_STATUS_TYPE_ID, CMD_STATUS_TYPE_INDEPENDENT,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1069 CMD_STATUS_TYPE_NAME, CMD_STATUS_TYPE_PRIMARY_ATTR,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1070 CMD_STATUS_TYPE_PRIMITIVE, CMD_STATUS_TYPE_SAVEABLE,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1071 CMD_STATUS_TYPE_USER_SETTABLE } cmd;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1072 Tcl_Obj *result = Tcl_GetObjResult(interp);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1073 GaimStatusType *status_type;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1074 Tcl_Obj *list, *elem;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1075 const GList *cur;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1076 int error;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1077
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1078 if (objc < 2) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1079 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1080 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1081 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1082
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1083 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1084 return error;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1085
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1086 switch (cmd) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1087 case CMD_STATUS_TYPE_AVAILABLE:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1088 if (objc != 3) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1089 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1090 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1091 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1092 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1093 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1094 Tcl_SetBooleanObj(result, gaim_status_type_is_available(status_type));
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1095 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1096 case CMD_STATUS_TYPE_ATTR:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1097 if (objc != 4) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1098 Tcl_WrongNumArgs(interp, 2, objv, "statustype attr");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1099 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1100 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1101 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1102 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1103 Tcl_SetObjResult(interp,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1104 gaim_tcl_ref_new(GaimTclRefStatusAttr,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1105 gaim_status_type_get_attr(status_type,
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1106 Tcl_GetStringFromObj(objv[3], NULL))));
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1107 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1108 case CMD_STATUS_TYPE_ATTRS:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1109 if (objc != 3) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1110 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1111 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1112 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1113 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1114 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1115 list = Tcl_NewListObj(0, NULL);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1116 for (cur = gaim_status_type_get_attrs(status_type);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1117 cur != NULL; cur = g_list_next(cur)) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1118 elem = gaim_tcl_ref_new(GaimTclRefStatusAttr, cur->data);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1119 Tcl_ListObjAppendElement(interp, list, elem);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1120 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1121 Tcl_SetObjResult(interp, list);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1122 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1123 case CMD_STATUS_TYPE_EXCLUSIVE:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1124 if (objc != 3) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1125 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1126 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1127 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1128 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1129 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1130 Tcl_SetBooleanObj(result, gaim_status_type_is_exclusive(status_type));
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1131 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1132 case CMD_STATUS_TYPE_ID:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1133 if (objc != 3) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1134 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1135 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1136 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1137 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1138 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1139 Tcl_SetStringObj(result, gaim_status_type_get_id(status_type), -1);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1140 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1141 case CMD_STATUS_TYPE_INDEPENDENT:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1142 if (objc != 3) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1143 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1144 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1145 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1146 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1147 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1148 Tcl_SetBooleanObj(result, gaim_status_type_is_independent(status_type));
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1149 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1150 case CMD_STATUS_TYPE_NAME:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1151 if (objc != 3) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1152 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1153 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1154 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1155 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1156 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1157 Tcl_SetStringObj(result, gaim_status_type_get_name(status_type), -1);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1158 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1159 case CMD_STATUS_TYPE_PRIMITIVE:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1160 if (objc != 3) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1161 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1162 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1163 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1164 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1165 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1166 Tcl_SetStringObj(result, gaim_primitive_get_id_from_type(gaim_status_type_get_primitive(status_type)), -1);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1167 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1168 case CMD_STATUS_TYPE_PRIMARY_ATTR:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1169 if (objc != 3) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1170 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1171 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1172 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1173 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1174 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1175 Tcl_SetStringObj(result, gaim_status_type_get_primary_attr(status_type), -1);
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1176 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1177 case CMD_STATUS_TYPE_SAVEABLE:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1178 if (objc != 3) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1179 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1180 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1181 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1182 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1183 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1184 Tcl_SetBooleanObj(result, gaim_status_type_is_saveable(status_type));
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1185 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1186 case CMD_STATUS_TYPE_USER_SETTABLE:
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1187 if (objc != 3) {
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1188 Tcl_WrongNumArgs(interp, 2, objv, "statustype");
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1189 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1190 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1191 if ((status_type = gaim_tcl_ref_get(interp, objv[2], GaimTclRefStatusType)) == NULL)
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1192 return TCL_ERROR;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1193 Tcl_SetBooleanObj(result, gaim_status_type_is_user_settable(status_type));
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1194 break;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1195 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1196
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1197 return TCL_OK;
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1198 }
a84523152a24 [gaim-migrate @ 16240]
Ethan Blanton <elb@pidgin.im>
parents: 13423
diff changeset
1199
6694
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1200 static gboolean unload_self(gpointer data)
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1201 {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1202 GaimPlugin *plugin = data;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1203 gaim_plugin_unload(plugin);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1204 return FALSE;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1205 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1206
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1207 int tcl_cmd_unload(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1208 {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1209 GaimPlugin *plugin;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1210 if (objc != 1) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1211 Tcl_WrongNumArgs(interp, 1, objv, "");
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1212 return TCL_ERROR;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1213 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1214
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1215 if ((plugin = tcl_interp_get_plugin(interp)) == NULL) {
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1216 /* This isn't exactly OK, but heh. What do you do? */
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1217 return TCL_OK;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1218 }
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1219 /* We can't unload immediately, but we can unload at the first
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1220 * known safe opportunity. */
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1221 g_idle_add(unload_self, (gpointer)plugin);
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1222
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1223 return TCL_OK;
2d2f04c5c7d2 [gaim-migrate @ 7220]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1224 }