Mercurial > pidgin
comparison plugins/tcl/tcl_cmds.c @ 13826:475aed3aacfc
[gaim-migrate @ 16270]
Allow account status to be set (since setting status attrs does nothing)
committer: Tailor Script <tailor@pidgin.im>
author | Ethan Blanton <elb@pidgin.im> |
---|---|
date | Fri, 16 Jun 2006 16:17:20 +0000 |
parents | 3b8dc44ff25f |
children | 597beb5c9de1 |
comparison
equal
deleted
inserted
replaced
13825:140ffd4934a0 | 13826:475aed3aacfc |
---|---|
95 } | 95 } |
96 | 96 |
97 int tcl_cmd_account(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) | 97 int tcl_cmd_account(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) |
98 { | 98 { |
99 Tcl_Obj *result = Tcl_GetObjResult(interp), *list, *elem; | 99 Tcl_Obj *result = Tcl_GetObjResult(interp), *list, *elem; |
100 const char *cmds[] = { "active_status", "alias", "connect", | 100 const char *cmds[] = { "alias", "connect", "connection", "disconnect", |
101 "connection", "disconnect", "enabled", "find", | 101 "enabled", "find", "handle", "isconnected", |
102 "handle", "isconnected", "list", "presence", | 102 "list", "presence", "protocol", "status", |
103 "protocol", "status_type", "status_types", | 103 "status_type", "status_types", "username", |
104 "username", NULL }; | 104 NULL }; |
105 enum { CMD_ACCOUNT_ACTIVE_STATUS, CMD_ACCOUNT_ALIAS, | 105 enum { CMD_ACCOUNT_ALIAS, |
106 CMD_ACCOUNT_CONNECT, CMD_ACCOUNT_CONNECTION, | 106 CMD_ACCOUNT_CONNECT, CMD_ACCOUNT_CONNECTION, |
107 CMD_ACCOUNT_DISCONNECT, CMD_ACCOUNT_ENABLED, CMD_ACCOUNT_FIND, | 107 CMD_ACCOUNT_DISCONNECT, CMD_ACCOUNT_ENABLED, CMD_ACCOUNT_FIND, |
108 CMD_ACCOUNT_HANDLE, CMD_ACCOUNT_ISCONNECTED, CMD_ACCOUNT_LIST, | 108 CMD_ACCOUNT_HANDLE, CMD_ACCOUNT_ISCONNECTED, CMD_ACCOUNT_LIST, |
109 CMD_ACCOUNT_PRESENCE, | 109 CMD_ACCOUNT_PRESENCE, CMD_ACCOUNT_PROTOCOL, CMD_ACCOUNT_STATUS, |
110 CMD_ACCOUNT_PROTOCOL, CMD_ACCOUNT_STATUS_TYPE, | 110 CMD_ACCOUNT_STATUS_TYPE, CMD_ACCOUNT_STATUS_TYPES, |
111 CMD_ACCOUNT_STATUS_TYPES, CMD_ACCOUNT_USERNAME } cmd; | 111 CMD_ACCOUNT_USERNAME } cmd; |
112 const char *listopts[] = { "-all", "-online", NULL }; | 112 const char *listopts[] = { "-all", "-online", NULL }; |
113 enum { CMD_ACCOUNTLIST_ALL, CMD_ACCOUNTLIST_ONLINE } listopt; | 113 enum { CMD_ACCOUNTLIST_ALL, CMD_ACCOUNTLIST_ONLINE } listopt; |
114 const char *alias; | 114 const char *alias; |
115 const GList *cur; | 115 const GList *cur; |
116 GaimAccount *account; | 116 GaimAccount *account; |
117 GaimStatus *status; | |
117 GaimStatusType *status_type; | 118 GaimStatusType *status_type; |
119 GaimValue *value; | |
120 char *attr_id; | |
118 int error; | 121 int error; |
119 int b; | 122 int b, i; |
120 | 123 |
121 if (objc < 2) { | 124 if (objc < 2) { |
122 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?"); | 125 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?"); |
123 return TCL_ERROR; | 126 return TCL_ERROR; |
124 } | 127 } |
125 | 128 |
126 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK) | 129 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK) |
127 return error; | 130 return error; |
128 | 131 |
129 switch (cmd) { | 132 switch (cmd) { |
130 case CMD_ACCOUNT_ACTIVE_STATUS: | |
131 if (objc != 3) { | |
132 Tcl_WrongNumArgs(interp, 2, objv, "account"); | |
133 return TCL_ERROR; | |
134 } | |
135 if ((account = tcl_validate_account(objv[2], interp)) == NULL) | |
136 return TCL_ERROR; | |
137 Tcl_SetObjResult(interp, | |
138 gaim_tcl_ref_new(GaimTclRefStatus, | |
139 gaim_account_get_active_status(account))); | |
140 break; | |
141 case CMD_ACCOUNT_ALIAS: | 133 case CMD_ACCOUNT_ALIAS: |
142 if (objc != 3) { | 134 if (objc != 3) { |
143 Tcl_WrongNumArgs(interp, 2, objv, "account"); | 135 Tcl_WrongNumArgs(interp, 2, objv, "account"); |
144 return TCL_ERROR; | 136 return TCL_ERROR; |
145 } | 137 } |
261 return TCL_ERROR; | 253 return TCL_ERROR; |
262 } | 254 } |
263 if ((account = tcl_validate_account(objv[2], interp)) == NULL) | 255 if ((account = tcl_validate_account(objv[2], interp)) == NULL) |
264 return TCL_ERROR; | 256 return TCL_ERROR; |
265 Tcl_SetStringObj(result, (char *)gaim_account_get_protocol_id(account), -1); | 257 Tcl_SetStringObj(result, (char *)gaim_account_get_protocol_id(account), -1); |
258 break; | |
259 case CMD_ACCOUNT_STATUS: | |
260 if (objc < 3) { | |
261 Tcl_WrongNumArgs(interp, 2, objv, "account ?status_id name value ...?"); | |
262 return TCL_ERROR; | |
263 } | |
264 if ((account = tcl_validate_account(objv[2], interp)) == NULL) | |
265 return TCL_ERROR; | |
266 if (objc == 3) { | |
267 Tcl_SetObjResult(interp, | |
268 gaim_tcl_ref_new(GaimTclRefStatus, | |
269 gaim_account_get_active_status(account))); | |
270 } else { | |
271 GList *l = NULL; | |
272 if (objc % 2) { | |
273 Tcl_SetStringObj(result, "name without value setting status", -1); | |
274 return TCL_ERROR; | |
275 } | |
276 status = gaim_account_get_status(account, Tcl_GetString(objv[3])); | |
277 if (status == NULL) { | |
278 Tcl_SetStringObj(result, "invalid status for account", -1); | |
279 return TCL_ERROR; | |
280 } | |
281 for (i = 4; i < objc; i += 2) { | |
282 attr_id = Tcl_GetString(objv[i]); | |
283 value = gaim_status_get_attr_value(status, attr_id); | |
284 if (value == NULL) { | |
285 Tcl_SetStringObj(result, "invalid attribute for account", -1); | |
286 return TCL_ERROR; | |
287 } | |
288 switch (gaim_value_get_type(value)) { | |
289 case GAIM_TYPE_BOOLEAN: | |
290 error = Tcl_GetBooleanFromObj(interp, objv[i + 1], &b); | |
291 if (error != TCL_OK) | |
292 return error; | |
293 l = g_list_append(l, attr_id); | |
294 l = g_list_append(l, GINT_TO_POINTER(b)); | |
295 break; | |
296 case GAIM_TYPE_INT: | |
297 error = Tcl_GetIntFromObj(interp, objv[i + 1], &b); | |
298 if (error != TCL_OK) | |
299 return error; | |
300 l = g_list_append(l, attr_id); | |
301 l = g_list_append(l, GINT_TO_POINTER(b)); | |
302 break; | |
303 case GAIM_TYPE_STRING: | |
304 l = g_list_append(l, attr_id); | |
305 l = g_list_append(l, Tcl_GetString(objv[i + 1])); | |
306 break; | |
307 default: | |
308 Tcl_SetStringObj(result, "unknown GaimValue type", -1); | |
309 return TCL_ERROR; | |
310 } | |
311 } | |
312 gaim_account_set_status_list(account, Tcl_GetString(objv[3]), TRUE, l); | |
313 g_list_free(l); | |
314 } | |
266 break; | 315 break; |
267 case CMD_ACCOUNT_STATUS_TYPE: | 316 case CMD_ACCOUNT_STATUS_TYPE: |
268 if (objc != 4 && objc != 5) { | 317 if (objc != 4 && objc != 5) { |
269 Tcl_WrongNumArgs(interp, 2, objv, "account ?statustype? ?-primitive primitive?"); | 318 Tcl_WrongNumArgs(interp, 2, objv, "account ?statustype? ?-primitive primitive?"); |
270 return TCL_ERROR; | 319 return TCL_ERROR; |
1175 return TCL_OK; | 1224 return TCL_OK; |
1176 } | 1225 } |
1177 | 1226 |
1178 int tcl_cmd_status(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) | 1227 int tcl_cmd_status(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) |
1179 { | 1228 { |
1180 const char *cmds[] = { "attr", "type" }; | 1229 const char *cmds[] = { "attr", "type", NULL }; |
1181 enum { CMD_STATUS_ATTR, CMD_STATUS_TYPE } cmd; | 1230 enum { CMD_STATUS_ATTR, CMD_STATUS_TYPE } cmd; |
1182 Tcl_Obj *result = Tcl_GetObjResult(interp); | 1231 Tcl_Obj *result = Tcl_GetObjResult(interp); |
1183 GaimStatus *status; | 1232 GaimStatus *status; |
1184 GaimStatusType *status_type; | 1233 GaimStatusType *status_type; |
1185 GaimValue *value; | 1234 GaimValue *value; |