aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--protocols/skype/README2
-rw-r--r--protocols/skype/skype.c8
-rw-r--r--protocols/skype/skyped.py16
-rw-r--r--protocols/skype/t/groupchat-leave-bitlbee.mock11
-rw-r--r--protocols/skype/t/groupchat-leave-skyped.mock63
-rwxr-xr-xprotocols/skype/test.py3
6 files changed, 92 insertions, 11 deletions
diff --git a/protocols/skype/README b/protocols/skype/README
index 2e45727f..b9f22481 100644
--- a/protocols/skype/README
+++ b/protocols/skype/README
@@ -30,7 +30,7 @@ not..)
== Requirements
-* Skype >= 1.4.0.99. The latest version I've tested is 2.2.0.35.
+* Skype >= 1.4.0.99. The latest version I've tested is 4.1.0.20.
* BitlBee >= 3.0. The latest version I've tested is @BITLBEE_VERSION@. Use
old versions (see the NEWS file about which one) if you have older BitlBee
installed.
diff --git a/protocols/skype/skype.c b/protocols/skype/skype.c
index 58a1c415..f6c0a261 100644
--- a/protocols/skype/skype.c
+++ b/protocols/skype/skype.c
@@ -1014,7 +1014,7 @@ static void skype_parse_chat(struct im_connection *ic, char *line)
g_free(sd->adder);
sd->adder = NULL;
}
- } else if (!strncmp(info, "MEMBERS ", 8)) {
+ } else if (!strncmp(info, "MEMBERS ", 8) || !strncmp(info, "ACTIVEMEMBERS ", 14) ) {
info += 8;
gc = bee_chat_by_title(ic->bee, ic, id);
/* Hack! We set ->data to TRUE
@@ -1219,8 +1219,12 @@ gboolean skype_start_stream(struct im_connection *ic)
skype_printf(ic, "SET USERSTATUS ONLINE\n");
/* Auto join to bookmarked chats if requested.*/
- if (set_getbool(&ic->acc->set, "auto_join"))
+ if (set_getbool(&ic->acc->set, "auto_join")) {
skype_printf(ic, "SEARCH BOOKMARKEDCHATS\n");
+ skype_printf(ic, "SEARCH ACTIVECHATS\n");
+ skype_printf(ic, "SEARCH MISSEDCHATS\n");
+ skype_printf(ic, "SEARCH RECENTCHATS\n");
+ }
return st;
}
diff --git a/protocols/skype/skyped.py b/protocols/skype/skyped.py
index 88588d96..86b1e96a 100644
--- a/protocols/skype/skyped.py
+++ b/protocols/skype/skyped.py
@@ -128,7 +128,7 @@ def send(sock, txt, tries=10):
if hasgobject:
if not options.conn: return
try:
- sock.sendall(txt)
+ done = sock.sendall(txt)
except socket.error as s:
dprint("Warning, sending '%s' failed (%s)." % (txt, s))
options.conn.close()
@@ -138,7 +138,7 @@ def send(sock, txt, tries=10):
if not options.conn: break
if wait_for_lock(options.lock, 3, 10, "socket send"):
try:
- if options.conn: sock.sendall(txt)
+ if options.conn: done = sock.sendall(txt)
options.lock.release()
except socket.error as s:
options.lock.release()
@@ -253,13 +253,13 @@ def dprint(msg):
from time import strftime
global options
- now = strftime("%Y-%m-%d %H:%M:%S")
-
if options.debug:
+ import inspect
+ prefix = strftime("[%Y-%m-%d %H:%M:%S]") + " %s:%d" % inspect.stack()[1][1:3]
sanitized = msg
try:
- print now + ": " + msg
+ print prefix + ": " + msg
except Exception, s:
try:
sanitized = msg.encode("ascii", "backslashreplace")
@@ -268,11 +268,11 @@ def dprint(msg):
sanitized = "hex [" + msg.encode("hex") + "]"
except Error, s:
sanitized = "[unable to print debug message]"
- print now + "~=" + sanitized
+ print prefix + "~=" + sanitized
if options.log:
sock = open(options.log, "a")
- sock.write("%s skyped: %s\n" % (now, sanitized))
+ sock.write(prefix + ": " + sanitized)
sock.close()
sys.stdout.flush()
@@ -467,7 +467,7 @@ def main(args=None):
options.buf = None
if not os.path.exists(options.config):
- parser.error(( "Can't find configuration file at '%s'."
+ parser.error(( "Can't find configuration file at '%s'. "
"Use the -c option to specify an alternate one." )% options.config)
cfgpath = options.config
diff --git a/protocols/skype/t/groupchat-leave-bitlbee.mock b/protocols/skype/t/groupchat-leave-bitlbee.mock
new file mode 100644
index 00000000..36447cee
--- /dev/null
+++ b/protocols/skype/t/groupchat-leave-bitlbee.mock
@@ -0,0 +1,11 @@
+>> NOTICE AUTH
+<< NICK alice
+<< USER alice alice localhost :Alice
+>> PRIVMSG &bitlbee
+<< PRIVMSG &bitlbee :account add skype alice foo
+<< PRIVMSG &bitlbee :account skype set skypeconsole_receive true
+<< PRIVMSG &bitlbee :account skype on
+>> JOIN :##cecil/$bob;4d8cc9965791
+>> 353 alice = ##cecil/$bob;4d8cc9965791 :@alice bob cecil @root
+<< PART ##cecil/$bob;4d8cc9965791
+>> PRIVMSG &bitlbee :alice: CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS UNSUBSCRIBED
diff --git a/protocols/skype/t/groupchat-leave-skyped.mock b/protocols/skype/t/groupchat-leave-skyped.mock
new file mode 100644
index 00000000..86150d1c
--- /dev/null
+++ b/protocols/skype/t/groupchat-leave-skyped.mock
@@ -0,0 +1,63 @@
+>> SEARCH GROUPS CUSTOM
+<< GROUPS 48, 49
+>> SEARCH FRIENDS
+<< USERS echo123, bob, cecil
+>> SET USERSTATUS ONLINE
+<< USERSTATUS ONLINE
+>> SET USERSTATUS ONLINE
+<< USERSTATUS ONLINE
+>> GET USER echo123 ONLINESTATUS
+<< USER echo123 ONLINESTATUS ONLINE
+>> GET USER echo123 FULLNAME
+<< USER echo123 FULLNAME Echo / Sound Test Service
+>> GET USER bob ONLINESTATUS
+<< USER bob ONLINESTATUS OFFLINE
+>> GET USER bob FULLNAME
+<< USER bob FULLNAME Bob
+>> GET USER cecil ONLINESTATUS
+<< USER cecil ONLINESTATUS OFFLINE
+>> GET USER cecil FULLNAME
+<< USER cecil FULLNAME Cecil
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 NAME #cecil/$bob;4d8cc9965791c6b9
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS MULTI_SUBSCRIBED
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS MULTI_SUBSCRIBED
+<< CHATMEMBER 186 ROLE USER
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 MYROLE USER
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 MEMBERS bob cecil alice
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 FRIENDLYNAME bob, cecil
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVEMEMBERS bob alice
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 TIMESTAMP 1358276196
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER bob
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS MULTI_SUBSCRIBED
+<< CHATMESSAGE 188 STATUS RECEIVED
+>> GET CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER bob
+>> GET CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC
+>> GET CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER bob
+>> GET CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC
+>> GET CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 ADDER bob
+>> GET CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 TOPIC
+>> GET CHATMESSAGE 188 FROM_HANDLE
+<< CHATMESSAGE 188 FROM_HANDLE bob
+>> GET CHATMESSAGE 188 BODY
+<< CHATMESSAGE 188 BODY
+>> GET CHATMESSAGE 188 TYPE
+<< CHATMESSAGE 188 TYPE ADDEDMEMBERS
+>> GET CHATMESSAGE 188 CHATNAME
+<< CHATMESSAGE 188 CHATNAME #cecil/$bob;4d8cc9965791c6b9
+<< CHATMESSAGE 189 STATUS READ
+<< CHATMESSAGE 189 STATUS READ
+<< CHATMEMBER 186 IS_ACTIVE TRUE
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVEMEMBERS bob cecil alice
+<< CHATMESSAGE 190 STATUS SENT
+>> ALTER CHAT #cecil/$bob;4d8cc9965791c6b9 LEAVE
+<< ALTER CHAT LEAVE
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 MEMBERS bob cecil
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 ACTIVEMEMBERS bob cecil
+<< CHAT #cecil/$bob;4d8cc9965791c6b9 STATUS UNSUBSCRIBED
diff --git a/protocols/skype/test.py b/protocols/skype/test.py
index 632ae124..63652f76 100755
--- a/protocols/skype/test.py
+++ b/protocols/skype/test.py
@@ -109,6 +109,9 @@ class Test(unittest.TestCase):
def testGroupchatInvite(self):
self.mock("groupchat-invite")
+ def testGroupchatLeave(self):
+ self.mock("groupchat-leave")
+
def testCalledYes(self):
self.mock("called-yes")