summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Kramlich <grim@reaperworld.com>2018-12-03 21:20:02 -0600
committerGary Kramlich <grim@reaperworld.com>2018-12-03 21:20:02 -0600
commit6d37a86e60993e61b3aa36b3e490e4b93def3632 (patch)
treef26d66b55fc923b259ece7eb3dfbd1284099144a
parent1084ea0322ae4aed492dd7abfa22db20eb069564 (diff)
downloadpidgin-6d37a86e60993e61b3aa36b3e490e4b93def3632.tar.gz
These didn't get deleted with the rebase
-rwxr-xr-xlibpurple/purple3-remote266
-rwxr-xr-xlibpurple/purple3-send31
-rwxr-xr-xlibpurple/purple3-send-async29
-rwxr-xr-xlibpurple/purple3-url-handler373
4 files changed, 0 insertions, 699 deletions
diff --git a/libpurple/purple3-remote b/libpurple/purple3-remote
deleted file mode 100755
index 1f392af129..0000000000
--- a/libpurple/purple3-remote
+++ /dev/null
@@ -1,266 +0,0 @@
-#!/usr/bin/env python
-
-from __future__ import absolute_import, division, print_function
-
-import codecs
-import re
-import sys
-try:
- from urllib.parse import unquote
-except ImportError:
- from urllib import unquote
-import xml.dom.minidom
-
-import dbus
-
-
-sys.stdin = codecs.getwriter('utf-8')(sys.stdin)
-sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
-
-xml.dom.minidom.Element.all = xml.dom.minidom.Element.getElementsByTagName
-
-obj = None
-try:
- obj = dbus.SessionBus().get_object("im.pidgin.purple.PurpleService",
- "/im/pidgin/purple/PurpleObject")
-except:
- pass
-
-purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
-
-
-class CheckedObject(object):
- def __init__(self, obj):
- self.obj = obj
-
- def __getattr__(self, attr):
- return CheckedAttribute(self, attr)
-
-
-class CheckedAttribute(object):
- def __init__(self, cobj, attr):
- self.cobj = cobj
- self.attr = attr
-
- def __call__(self, *args):
- result = self.cobj.obj.__getattr__(self.attr)(*args)
- if result == 0:
- raise Exception("Error: %s %s returned %s" %
- (self.attr, args, result))
- return result
-
-
-def show_help(requested=False):
- print("""This program uses D-Bus to communicate with purple.
-
-Usage:
-
- %s "command1" "command2" ...
-
-Each command is of one of the three types:
-
- [protocol:]commandname?param1=value1&param2=value2&...
- FunctionName?param1=value1&param2=value2&...
- FunctionName(value1,value2,...)
-
-The second and third form are provided for completeness but their use
-is not recommended; use purple-send or purple-send-async instead. The
-second form uses introspection to find out the parameter names and
-their types, therefore it is rather slow.
-
-Examples of commands:
-
- jabber:goim?screenname=testone@localhost&message=hi
- jabber:gochat?room=TestRoom&server=conference.localhost
- jabber:getinfo?screenname=testone@localhost
- jabber:addbuddy?screenname=my friend
-
- setstatus?status=away&message=don't disturb
- getstatus
- getstatusmessage
- quit
-
- PurpleAccountsFindConnected?name=&protocol=jabber
- PurpleAccountsFindConnected(,jabber)
-""" % (sys.argv[0], ))
- if (requested):
- sys.exit(0)
- else:
- sys.exit(1)
-
-
-cpurple = CheckedObject(purple)
-
-urlregexp = r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?"
-
-
-def extendlist(list, length, fill):
- if len(list) < length:
- return list + [fill] * (length - len(list))
- else:
- return list
-
-
-def convert(value):
- try:
- return int(value)
- except:
- return value
-
-
-def findaccount(accountname, protocolname):
- try:
- # prefer connected accounts
- account = cpurple.PurpleAccountsFindConnected(accountname,
- protocolname)
- return account
- except:
- # try to get any account and connect it
- account = cpurple.PurpleAccountsFindAny(accountname, protocolname)
- purple.PurpleAccountSetStatusVargs(account, "online", 1)
- purple.PurpleAccountConnect(account)
- return account
-
-
-def execute(uri):
- match = re.match(urlregexp, uri)
- protocol = match.group(2)
- if protocol == "xmpp":
- protocol = "jabber"
- if protocol is not None:
- protocol = "prpl-" + protocol
- command = match.group(5)
- paramstring = match.group(7)
- params = {}
- if paramstring is not None:
- for param in paramstring.split("&"):
- key, value = extendlist(param.split("=", 1), 2, "")
- params[key] = unquote(value)
-
- accountname = params.get("account", "")
-
- if command == "goim":
- account = findaccount(accountname, protocol)
- conversation = cpurple.PurpleConversationNew(1, account,
- params["screenname"])
- if "message" in params:
- im = cpurple.PurpleConversationGetImData(conversation)
- purple.PurpleConvImSend(im, params["message"])
- return None
-
- elif command == "gochat":
- account = findaccount(accountname, protocol)
- connection = cpurple.PurpleAccountGetConnection(account)
- return purple.PurpleServJoinChat(connection, params)
-
- elif command == "addbuddy":
- account = findaccount(accountname, protocol)
- return cpurple.PurpleBlistRequestAddBuddy(account,
- params["screenname"],
- params.get("group", ""),
- "")
-
- elif command == "setstatus":
- current = purple.PurpleSavedstatusGetCurrent()
-
- if "status" in params:
- status_id = params["status"]
- status_type = purple.PurplePrimitiveGetTypeFromId(status_id)
- else:
- status_type = purple.PurpleSavedstatusGetType(current)
- status_id = purple.PurplePrimitiveGetIdFromType(status_type)
-
- if "message" in params:
- message = params["message"]
- else:
- message = purple.PurpleSavedstatusGetMessage(current)
-
- if "account" in params:
- accounts = [cpurple.PurpleAccountsFindAny(accountname, protocol)]
-
- for account in accounts:
- status = purple.PurpleAccountGetStatus(account, status_id)
- type = purple.PurpleStatusGetType(status)
- purple.PurpleSavedstatusSetSubstatus(current, account, type,
- message)
- purple.PurpleSavedstatusActivateForAccount(current, account)
- else:
- saved = purple.PurpleSavedstatusNew("", status_type)
- purple.PurpleSavedstatusSetMessage(saved, message)
- purple.PurpleSavedstatusActivate(saved)
-
- return None
-
- elif command == "getstatus":
- current = purple.PurpleSavedstatusGetCurrent()
- status_type = purple.PurpleSavedstatusGetType(current)
- status_id = purple.PurplePrimitiveGetIdFromType(status_type)
- return status_id
-
- elif command == "getstatusmessage":
- current = purple.PurpleSavedstatusGetCurrent()
- return purple.PurpleSavedstatusGetMessage(current)
-
- elif command == "getinfo":
- account = findaccount(accountname, protocol)
- connection = cpurple.PurpleAccountGetConnection(account)
- return purple.ServGetInfo(connection, params["screenname"])
-
- elif command == "quit":
- return purple.PurpleCoreQuit()
-
- elif command == "uri":
- return None
-
- else:
- match = re.match(r"(\w+)\s*\(([^)]*)\)", command)
- if match is not None:
- name = match.group(1)
- argstr = match.group(2)
- if argstr == "":
- args = []
- else:
- args = argstr.split(",")
- fargs = []
- for arg in args:
- fargs.append(convert(arg.strip()))
- return purple.__getattr__(name)(*fargs)
- else:
- # Introspect the object to get parameter names and types. This is
- # slow because the entire introspection info must be downloaded.
- interface = dbus.Interface(obj,
- "org.freedesktop.DBus.Introspectable")
- data = interface.Introspect()
- introspect = xml.dom.minidom.parseString(data).documentElement
- for method in introspect.all("method"):
- if command == method.getAttribute("name"):
- methodparams = []
- for arg in method.all("arg"):
- if arg.getAttribute("direction") == "in":
- value = params[arg.getAttribute("name")]
- type = arg.getAttribute("type")
- if type == "s":
- methodparams.append(value)
- elif type == "i":
- methodparams.append(int(value))
- else:
- raise Exception(
- "Don't know how to handle type \"%s\"" % (
- type, ))
- return purple.__getattr__(command)(*methodparams)
- show_help()
-
-
-if len(sys.argv) == 1:
- show_help()
-elif sys.argv[1] == "--help" or sys.argv[1] == "-h":
- show_help(True)
-elif obj is None:
- print("No existing libpurple instance detected.")
- sys.exit(1)
-
-for arg in sys.argv[1:]:
- output = execute(arg)
-
- if output is not None:
- print(output)
diff --git a/libpurple/purple3-send b/libpurple/purple3-send
deleted file mode 100755
index 8eec0b0516..0000000000
--- a/libpurple/purple3-send
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-
-METHOD_NAME=$1
-
-if test -z "$METHOD_NAME"
-then
- cat <<EOF
-This program calls purple API functions using DBus and prints the return value.
-If you are not interested in the return value, use purple-send-async.
-
-Usage:
-
- $0 method-name type1:parameter1 type2:parameter2 ...
-
-This shell script just invokes dbus-send, see man dbus-send for how
-to specify the parameters.
-
-Examples:
-
- $0 PurpleAccountsFindConnected string: string:jabber
- $0 PurpleAccountsGetAll
- $0 PurpleCoreQuit
-
-Use dbus-viewer to get the list of supported functions and their parameters.
-EOF
- exit 1
-fi
-
-shift
-dbus-send --dest=im.pidgin.purple.PurpleService --print-reply --type=method_call /im/pidgin/purple/PurpleObject im.pidgin.purple.PurpleInterface.$METHOD_NAME "$@"
-
diff --git a/libpurple/purple3-send-async b/libpurple/purple3-send-async
deleted file mode 100755
index c2e1ab64f6..0000000000
--- a/libpurple/purple3-send-async
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-
-METHOD_NAME=$1
-
-if test -z "$METHOD_NAME"
-then
- cat <<EOF
-This program calls purple API functions using DBus. As opposed to purple-send,
-it does not print the return value.
-
-Usage:
-
- $0 method-name type1:parameter1 type2:parameter2 ...
-
-This shell script just invokes dbus-send, see man dbus-send for how
-to specify the parameters.
-
-Examples:
-
- $0 PurpleCoreQuit
-
-Use dbus-viewer to get the list of supported functions and their parameters.
-EOF
- exit 1
-fi
-
-shift
-dbus-send --dest=im.pidgin.purple.PurpleService --type=method_call /im/pidgin/purple/PurpleObject im.pidgin.purple.PurpleInterface.$METHOD_NAME "$@"
-
diff --git a/libpurple/purple3-url-handler b/libpurple/purple3-url-handler
deleted file mode 100755
index 227ea57075..0000000000
--- a/libpurple/purple3-url-handler
+++ /dev/null
@@ -1,373 +0,0 @@
-#!/usr/bin/env python
-
-from __future__ import absolute_import, division, print_function
-
-import dbus
-import re
-import sys
-import time
-try:
- from urllib.parse import unquote_plus
-except ImportError:
- from urllib import unquote_plus
-
-
-bus = dbus.SessionBus()
-obj = None
-try:
- obj = bus.get_object("im.pidgin.purple.PurpleService",
- "/im/pidgin/purple/PurpleObject")
-except dbus.DBusException as e:
- if e._dbus_error_name == "org.freedesktop.DBus.Error.ServiceUnknown":
- print("Error: no libpurple-powered client is running. "
- "Try starting Pidgin or Finch.")
- sys.exit(1)
-purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
-
-
-class CheckedObject(object):
- def __init__(self, obj):
- self.obj = obj
-
- def __getattr__(self, attr):
- return CheckedAttribute(self, attr)
-
-
-class CheckedAttribute(object):
- def __init__(self, cobj, attr):
- self.cobj = cobj
- self.attr = attr
-
- def __call__(self, *args):
- # Redirect stderr to suppress the printing of an " Introspect error"
- # message if nothing is listening on the bus. We print a friendly
- # error message ourselves.
- real_stderr = sys.stderr
- sys.stderr = None
- result = self.cobj.obj.__getattr__(self.attr)(*args)
- sys.stderr = real_stderr
-
-# This can be useful for debugging.
-# if result == 0:
-# print("Error:", self.attr, str(args), "returned", str(result))
-
- return result
-
-
-cpurple = CheckedObject(purple)
-
-
-def extendlist(list, length, fill):
- if len(list) < length:
- return list + [fill] * (length - len(list))
- else:
- return list
-
-
-def convert(value):
- try:
- return int(value)
- except:
- return value
-
-
-def account_not_found():
- print("No matching account found.")
- sys.exit(1)
-
-
-def bring_account_online(account):
- if not cpurple.PurpleAccountIsConnected(account):
- # The last argument is meant to be a GList * but the D-Bus binding
- # generator thing just wants a UInt32, which is pretty failing.
- # Happily, passing a 0 to mean an empty list turns out to work anyway.
- purple.PurpleAccountSetStatusList(account, "online", 1, 0)
- purple.PurpleAccountConnect(account)
-
-
-def findaccount(protocolname, accountname="", matcher=None):
- if matcher:
- for account in cpurple.PurpleAccountsGetAll():
- if protocolname != cpurple.PurpleAccountGetProtocolId(account):
- continue
- if (accountname != "" and
- accountname != cpurple.PurpleAccountGetUsername(account)):
- continue
- if matcher(account):
- bring_account_online(account)
- return account
- account_not_found()
-
- # prefer connected accounts
- account = cpurple.PurpleAccountsFindConnected(accountname, protocolname)
- if account != 0:
- return account
-
- # try to get any account and connect it
- account = cpurple.PurpleAccountsFindAny(accountname, protocolname)
- if account == 0:
- account_not_found()
-
- bring_account_online(account)
- return account
-
-
-def goim(account, screenname, message=None):
- # XXX: 1 == PURPLE_CONV_TYPE_IM
- conversation = cpurple.PurpleConversationNew(1, account, screenname)
- if message:
- purple.PurpleConvSendConfirm(conversation, message)
-
-
-def gochat(account, params, message=None):
- connection = cpurple.PurpleAccountGetConnection(account)
- purple.PurpleServJoinChat(connection, params)
-
- if message is not None:
- for i in range(20):
- # XXX: 2 == PURPLE_CONV_TYPE_CHAT
- conversation = purple.PurpleFindConversationWithAccount(
- 2,
- params.get("channel", params.get("room")),
- account)
- if conversation:
- purple.PurpleConvSendConfirm(conversation, message)
- break
- else:
- time.sleep(0.5)
-
-
-def addbuddy(account, screenname, group="", alias=""):
- cpurple.PurpleBlistRequestAddBuddy(account, screenname, group, alias)
-
-
-def aim(uri):
- protocol = "prpl-aim"
- match = re.match(r"^aim:([^?]*)(\?(.*))", uri)
- if not match:
- print("Invalid aim URI: %s" % (uri, ))
- return
-
- command = unquote_plus(match.group(1))
- paramstring = match.group(3)
- params = {}
- if paramstring:
- for param in paramstring.split("&"):
- key, value = extendlist(param.split("=", 1), 2, "")
- params[key] = unquote_plus(value)
- accountname = params.get("account", "")
- screenname = params.get("screenname", "")
-
- account = findaccount(protocol, accountname)
-
- if command.lower() == "goim":
- goim(account, screenname, params.get("message"))
- elif command.lower() == "gochat":
- gochat(account, params)
- elif command.lower() == "addbuddy":
- addbuddy(account, screenname, params.get("group", ""))
-
-
-def gg(uri):
- protocol = "prpl-gg"
- match = re.match(r"^gg:(.*)", uri)
- if not match:
- print("Invalid gg URI: %s" % (uri, ))
- return
-
- screenname = unquote_plus(match.group(1))
- account = findaccount(protocol)
- goim(account, screenname)
-
-
-def icq(uri):
- protocol = "prpl-icq"
- match = re.match(r"^icq:([^?]*)(\?(.*))", uri)
- if not match:
- print("Invalid icq URI: %s" % (uri, ))
- return
-
- command = unquote_plus(match.group(1))
- paramstring = match.group(3)
- params = {}
- if paramstring:
- for param in paramstring.split("&"):
- key, value = extendlist(param.split("=", 1), 2, "")
- params[key] = unquote_plus(value)
- accountname = params.get("account", "")
- screenname = params.get("screenname", "")
-
- account = findaccount(protocol, accountname)
-
- if command.lower() == "goim":
- goim(account, screenname, params.get("message"))
- elif command.lower() == "gochat":
- gochat(account, params)
- elif command.lower() == "addbuddy":
- addbuddy(account, screenname, params.get("group", ""))
-
-
-def irc(uri):
- protocol = "prpl-irc"
- match = re.match(r"^irc:(//([^/]*))?/?([^?]*)(\?(.*))?", uri)
- if not match:
- print("Invalid irc URI: %s" % (uri, ))
- return
-
- server = unquote_plus(match.group(2) or "")
- target = match.group(3) or ""
- query = match.group(5) or ""
-
- modifiers = {}
- if target:
- for modifier in target.split(",")[1:]:
- modifiers[modifier] = True
-
- paramstring = match.group(5)
- params = {}
- if paramstring:
- for param in paramstring.split("&"):
- key, value = extendlist(param.split("=", 1), 2, "")
- params[key] = unquote_plus(value)
-
- def correct_server(account):
- username = cpurple.PurpleAccountGetUsername(account)
- return (server == "" or
- "@" in username and server == username.split("@")[1])
-
- account = findaccount(protocol, matcher=correct_server)
-
- if target != "":
- if "isnick" in modifiers:
- goim(account, unquote_plus(target.split(",")[0]),
- params.get("msg"))
- else:
- channel = unquote_plus(target.split(",")[0])
- if channel[0] != "#":
- channel = "#" + channel
- gochat(account,
- {"server": server,
- "channel": channel,
- "password": params.get("key", "")},
- params.get("msg"))
-
-
-def sip(uri):
- protocol = "prpl-simple"
- match = re.match(r"^sip:(.*)", uri)
- if not match:
- print("Invalid sip URI: %s" % (uri, ))
- return
-
- screenname = unquote_plus(match.group(1))
- account = findaccount(protocol)
- goim(account, screenname)
-
-
-def xmpp(uri):
- protocol = "prpl-jabber"
- match = re.match(
- r"^xmpp:(//([^/?#]*)/?)?([^?#]*)(\?([^;#]*)(;([^#]*))?)?(#(.*))?",
- uri)
- if not match:
- print("Invalid xmpp URI: %s" % (uri, ))
- return
-
- tmp = match.group(2)
- if tmp:
- accountname = unquote_plus(tmp)
- else:
- accountname = ""
-
- screenname = unquote_plus(match.group(3))
-
- tmp = match.group(5)
- if tmp:
- command = unquote_plus(tmp)
- else:
- command = ""
-
- paramstring = match.group(7)
- params = {}
- if paramstring:
- for param in paramstring.split(";"):
- key, value = extendlist(param.split("=", 1), 2, "")
- params[key] = unquote_plus(value)
-
- account = findaccount(protocol, accountname)
-
- if command.lower() == "message":
- goim(account, screenname, params.get("body"))
- elif command.lower() == "join":
- room, server = screenname.split("@")
- gochat(account, {"room": room, "server": server})
- elif command.lower() == "roster":
- addbuddy(account, screenname, params.get("group", ""),
- params.get("name", ""))
- else:
- goim(account, screenname)
-
-
-def gtalk(uri):
- protocol = "prpl-jabber"
- match = re.match(r"^gtalk:([^?]*)(\?(.*))", uri)
- if not match:
- print("Invalid gtalk URI: %s" % (uri, ))
- return
-
- command = unquote_plus(match.group(1))
- paramstring = match.group(3)
- params = {}
- if paramstring:
- for param in paramstring.split("&"):
- key, value = extendlist(param.split("=", 1), 2, "")
- params[key] = unquote_plus(value)
- accountname = params.get("from_jid", "")
- jid = params.get("jid", "")
-
- account = findaccount(protocol, accountname)
-
- if command.lower() == "chat":
- goim(account, jid)
- elif command.lower() == "call":
- # XXX V&V prompt to establish call
- goim(account, jid)
-
-
-def main(argv=sys.argv):
- if len(argv) != 2 or argv[1] == "--help" or argv[1] == "-h":
- print("Usage: %s URI" % (argv[0], ))
- print("Example: %s \"xmpp:romeo@montague.net?message\"" % (argv[0], ))
-
- if len(argv) != 2:
- sys.exit(1)
- else:
- return 0
-
- uri = argv[1]
- type = uri.split(":")[0]
-
- try:
- if type == "aim":
- aim(uri)
- elif type == "gg":
- gg(uri)
- elif type == "icq":
- icq(uri)
- elif type == "irc":
- irc(uri)
- elif type == "sip":
- sip(uri)
- elif type == "xmpp":
- xmpp(uri)
- elif type == "gtalk":
- gtalk(uri)
- else:
- print("Unknown protocol: %s" % (type, ))
- except dbus.DBusException as e:
- print("Error: %s" % (str(e), ))
- sys.exit(1)
-
-
-if __name__ == "__main__":
- main()