From e4ce000b326121ed185bb403abee3f2acdd5856e Mon Sep 17 00:00:00 2001 From: Gabor Adam Toth Date: Sun, 28 Feb 2010 17:44:02 +0100 Subject: [PATCH] added /place command for managing place settings like /set usage: /place [] key: e.g. topic, style, twitter, etc. --- world/net/library/signature.c | 19 +++++++++++++------ world/net/library/text.c | 10 ++++++++++ world/net/place/archetype.gen | 29 ++++++++++++++++++++++------- world/net/place/userthreads.c | 28 ++++++++++++++-------------- 4 files changed, 59 insertions(+), 27 deletions(-) diff --git a/world/net/library/signature.c b/world/net/library/signature.c index 7e9a709..99ad6e1 100644 --- a/world/net/library/signature.c +++ b/world/net/library/signature.c @@ -51,12 +51,19 @@ private volatile mapping _sigs = ([ "_request_nickname": ({ "_request_nick_local", 0, "_nick_local", "_INTERNAL_stuss" }), // the real thing, maybe? method inheritance could even lead to here // for all of the _request_set_something methods. good? bad? + "_request_place": ({ "_request_set", 0, "_key", "_value" }), "_request_set": ({ "_request_set", 0, "_key", "_value" }), // when called by _request_set(), value might be in _value "_request_set_masquerade": ({ "_request_masquerade", 0, "_flag_masquerade" }), "_request_set_owners": ({ "_request_owners", 0, "_list_owners" }), // _tab "_request_set_public": ({ "_request_public", 0, "_flag_public" }), "_request_set_style": ({ "_request_set_style", 0, "_uniform_style" }), + "_request_set_topic": ({ "_request_set_topic", 0, "_value" }), + "_request_topic": ({ "_request_set_topic", 0, "_value" }), + "_request_topi": ({ "_request_set_topic", 0, "_value" }), + "_request_top": ({ "_request_set_topic", 0, "_value" }), + "_request_to": ({ "_request_set_topic", 0, "_value" }), + "_request_t": ({ "_request_set_topic", 0, "_value" }), // "INTERNAL" METHODS // all of the following "fake" _request methods are just the psyced // way to handle command name variations and shortcuts. never use this @@ -92,15 +99,15 @@ private volatile mapping _sigs = ([ #ifdef _flag_enable_module_microblogging "_request_add": ({ "_request_add", 0, "_person" }), "_request_remove": ({ "_request_remove", 0, "_person" }), - "_request_priv": ({ "_request_privacy", 0, "_privacy" }), - "_request_privacy": ({ "_request_privacy", 0, "_privacy" }), + "_request_set_priv": ({ "_request_set_privacy", 0, "_value" }), + "_request_set_privacy": ({ "_request_set_privacy", 0, "_value" }), #ifdef TWITTER - "_request_tw": ({ "_request_twitter", 0, "_switch" }), - "_request_twitter": ({ "_request_twitter", 0, "_switch" }), + "_request_set_tw": ({ "_request_set_twitter", 0, "_value" }), + "_request_set_twitter": ({ "_request_set_twitter", 0, "_value" }), #endif #ifdef IDENTICA - "_request_ica": ({ "_request_identica", 0, "_switch" }), - "_request_identica": ({ "_request_identica", 0, "_switch" }), + "_request_set_ica": ({ "_request_set_identica", 0, "_value" }), + "_request_set_identica":({ "_request_set_identica", 0, "_value" }), #endif #endif #ifdef EXPERIMENTAL diff --git a/world/net/library/text.c b/world/net/library/text.c index 25e8b04..c1f3411 100644 --- a/world/net/library/text.c +++ b/world/net/library/text.c @@ -179,3 +179,13 @@ string x(string str, int n) { for (i = 0; i < n; i++) res += str; return res; } + +int is_true(string v) { + if (strlen(v) && regmatch(v, "^(?:on|yes|true|enabled|1)$")) return 1; + return 0; +} + +int is_false(string v) { + if (strlen(v) && regmatch(v, "^(?:off|no|false|disabled|0)$")) return 1; + return 0; +} diff --git a/world/net/place/archetype.gen b/world/net/place/archetype.gen index 4bb4935..60efc8d 100644 --- a/world/net/place/archetype.gen +++ b/world/net/place/archetype.gen @@ -462,6 +462,18 @@ showTopic(rcpt, verbose, mc) { ]) ); return 1; } + +_request_set_topic(source, mc, data, vars, b) { + string value = vars["_value"] || vars["_topic"]; + if (strlen(value)) { + if (value == "-") value = 0; + sTopic(value, source, vars["_nick"]); + } else { + showTopic(source, 1, OFFICIAL); + } + return 1; +} + #endif #if HAS_PORT(HTTP_PORT, HTTP_PATH) || HAS_PORT(HTTPS_PORT, HTTP_PATH) @@ -1838,6 +1850,7 @@ cmd(a, args, b, source, vars) { return 1; #endif #ifdef PLACE_TOPIC_COMMAND + // not used anymore, see _request_set_topic() instead case "topic": case "topi": case "top": @@ -2234,9 +2247,11 @@ _request_set(source, mc, data, vars, b) { PT(("set(%O, %O, %O, %O, %O) called\n", source, mc, data, vars, b)) if (k = vars["_key"]) // pass on to a subhandler - if (call_signature(source, "_request_set"+ k, data, vars, b)) + if (call_signature(source, "_request_set_"+ k, data, vars, b)) return 1; - return 0; + + sendmsg(source, "_warning_usage_place", "Usage: /place []"); + return 1; } #ifdef PLACE_OWNED @@ -2331,16 +2346,16 @@ _request_set_style(source, mc, data, vars, b) { vSet("_uniform_style", value); save(); } else if (value) { - sendmsg(source, + sendmsg(source, "_error_illegal_scheme", - "That is not a valid [_scheme] URL for a file.", + "That is not a valid [_scheme] URL for a file.", ([ "_scheme" : "http" ])); - return 1; + return 1; } sendmsg(source, "_status_place_uniform_style", - "Style file [_uniform_style] is in use here.", + "Style file [_uniform_style] is in use here.", ([ "_uniform_style" : - v("_uniform_style") || "-" ])); + v("_uniform_style") || "-" ])); return 1; } return 0; diff --git a/world/net/place/userthreads.c b/world/net/place/userthreads.c index 7c4d3d3..0c091a8 100644 --- a/world/net/place/userthreads.c +++ b/world/net/place/userthreads.c @@ -129,47 +129,47 @@ _request_remove(source, mc, data, vars, b) { // - public: anyone can enter _request_privacy(source, mc, data, vars, b) { P3((">> userthreads:_request_privace(%O, %O, %O, %O, %O)\n", source, mc, data, vars, b)) - string p = vars["_privacy"]; - if (p == "public" || p == "private") { - vSet("privacy", p); + string value = vars["_value"]; + if (value == "public" || value == "private") { + vSet("privacy", value); save(); } - sendmsg(source, "_status_privacy", "Privacy is: [_privacy].", (["_privacy": v("privacy")])); + sendmsg(source, "_info_set_place_privacy", "Privacy is: [_value].", (["_value": v("privacy")])); return 1; } #ifdef TWITTER -_request_twitter(source, mc, data, vars, b) { - string sw = vars["_switch"]; - if (sw == "on" || sw == "enabled" || sw == "1") { +_request_set_twitter(source, mc, data, vars, b) { + string value = vars["_value"]; + if (is_true(value)) { unless (twitter) twitter = clone_object(NET_PATH "twitter/client")->load(source); vSet("twitter", 1); save(); - } else if (sw == "off" || sw == "disabled" || sw == "0") { + } else if (is_false(value)) { if (twitter) twitter = 0; vSet("twitter", 0); save(); } - sendmsg(source, "_status_twitter", "Twitter submission is [_status].", (["_status": v("twitter") ? "enabled" : "disabled"])); + sendmsg(source, "_info_set_place_twitter", "Twitter submission is [_status].", (["_status": v("twitter") ? "enabled" : "disabled"])); return 1; } #endif #ifdef IDENTICA -_request_identica(source, mc, data, vars, b) { - string sw = vars["_switch"]; - if (sw == "on" || sw == "enabled" || sw == "1") { +_request_set_identica(source, mc, data, vars, b) { + string value = vars["_value"]; + if (is_true(value)) { unless (identica) identica = clone_object(NET_PATH "identica/client")->load(source); vSet("identica", 1); save(); - } else if (sw == "off" || sw == "disabled" || sw == "0") { + } else if (is_false(value)) { if (identica) identica = 0; vSet("identica", 0); save(); } - sendmsg(source, "_status_identica", "Identi.ca submission is [_status].", (["_status": v("identica") ? "enabled" : "disabled"])); + sendmsg(source, "_info_set_place_identica", "Identi.ca submission is [_status].", (["_status": v("identica") ? "enabled" : "disabled"])); return 1; } #endif