change the args passed to *_command methods, also a bugged link_command
This commit is contained in:
parent
89b95c036f
commit
1c73778040
1 changed files with 88 additions and 29 deletions
117
src/gui.py
117
src/gui.py
|
@ -24,8 +24,10 @@ from time import sleep
|
|||
|
||||
import sys
|
||||
import os
|
||||
|
||||
import re
|
||||
import curses
|
||||
import webbrowser
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
import common
|
||||
|
@ -79,6 +81,7 @@ class Gui(object):
|
|||
'set': (self.command_set, _("Usage: /set <option> [value]\nSet: Sets the value to the option in your configuration file. You can, for example, change your default nickname by doing `/set default_nick toto` or your resource with `/set resource blabla`. You can also set an empty value (nothing) by providing no [value] after <option>.")),
|
||||
'kick': (self.command_kick, _("Usage: /kick <nick> [reason]\nKick: Kick the user with the specified nickname. You also can give an optional reason.")),
|
||||
'topic': (self.command_topic, _("Usage: /topic <subject> \nTopic: Change the subject of the room")),
|
||||
'link': (self.command_link, _("Usage: /link [option] [number]\nLink: Interact with a link in the conversation. Available options are 'open', 'copy'. Open just opens the link in the browser if it's http://, Copy just copy the link in the clipboard. An optional number can be provided, it indicates which link to interact with.")),
|
||||
'query': (self.command_query, _('Usage: /query <nick> [message]\nQuery: Open a private conversation with <nick>. This nick has to be present in the room you\'re currently in. If you specified a message after the nickname, it will immediately be sent to this user')),
|
||||
|
||||
'nick': (self.command_nick, _("Usage: /nick <nickname> \nNick: Change your nickname in the current room"))
|
||||
|
@ -565,10 +568,11 @@ class Gui(object):
|
|||
return
|
||||
if line.startswith('/') and not line.startswith('/me '):
|
||||
command = line.strip()[:].split()[0][1:]
|
||||
args = line.strip()[:].split()[1:]
|
||||
arg = line[1+len(command):]
|
||||
# example. on "/link 0 open", command = "link" and arg = "0 open"
|
||||
if command in self.commands.keys():
|
||||
func = self.commands[command][0]
|
||||
func(args)
|
||||
func(arg)
|
||||
return
|
||||
else:
|
||||
self.add_message_to_room(self.current_room(), _("Error: unknown command (%s)") % (command))
|
||||
|
@ -581,10 +585,11 @@ class Gui(object):
|
|||
self.window.input.refresh()
|
||||
doupdate()
|
||||
|
||||
def command_help(self, args):
|
||||
def command_help(self, arg):
|
||||
"""
|
||||
/help <command_name>
|
||||
"""
|
||||
args = arg.split()
|
||||
room = self.current_room()
|
||||
if len(args) == 0:
|
||||
msg = _('Available commands are: ')
|
||||
|
@ -598,10 +603,11 @@ class Gui(object):
|
|||
msg = _('Unknown command: %s') % args[0]
|
||||
self.add_message_to_room(room, msg)
|
||||
|
||||
def command_win(self, args):
|
||||
def command_win(self, arg):
|
||||
"""
|
||||
/win <number>
|
||||
"""
|
||||
args = arg.split()
|
||||
if len(args) != 1:
|
||||
self.command_help(['win'])
|
||||
return
|
||||
|
@ -623,10 +629,11 @@ class Gui(object):
|
|||
self.window.refresh(self.rooms)
|
||||
self.current_room().set_color_state(11)
|
||||
|
||||
def command_kick(self, args):
|
||||
def command_kick(self, arg):
|
||||
"""
|
||||
/kick <nick> [reason]
|
||||
"""
|
||||
args = arg.split()
|
||||
if len(args) < 1:
|
||||
self.command_help(['kick'])
|
||||
return
|
||||
|
@ -640,10 +647,11 @@ class Gui(object):
|
|||
roomname = self.current_room().name
|
||||
self.muc.eject_user(roomname, 'kick', nick, reason)
|
||||
|
||||
def command_join(self, args):
|
||||
def command_join(self, arg):
|
||||
"""
|
||||
/join [room][/nick] [password]
|
||||
"""
|
||||
args = arg.split()
|
||||
password = None
|
||||
if len(args) == 0:
|
||||
r = self.current_room()
|
||||
|
@ -691,10 +699,11 @@ class Gui(object):
|
|||
# r.own_nick = nick
|
||||
r.users = []
|
||||
|
||||
def command_bookmark(self, args):
|
||||
def command_bookmark(self, arg):
|
||||
"""
|
||||
/bookmark [room][/nick]
|
||||
"""
|
||||
args = arg.split()
|
||||
nick = None
|
||||
if len(args) == 0:
|
||||
room = self.current_room()
|
||||
|
@ -727,10 +736,11 @@ class Gui(object):
|
|||
config.set_and_save('rooms', bookmarks)
|
||||
self.add_message_to_room(self.current_room(), _('Your bookmarks are now: %s') % bookmarks)
|
||||
|
||||
def command_set(self, args):
|
||||
def command_set(self, arg):
|
||||
"""
|
||||
/set <option> [value]
|
||||
"""
|
||||
args = arg.split()
|
||||
if len(args) != 2 and len(args) != 1:
|
||||
self.command_help(['set'])
|
||||
return
|
||||
|
@ -744,10 +754,11 @@ class Gui(object):
|
|||
room = self.current_room()
|
||||
self.add_message_to_room(room, msg)
|
||||
|
||||
def command_show(self, args):
|
||||
def command_show(self, arg):
|
||||
"""
|
||||
/show <status> [msg]
|
||||
"""
|
||||
args = arg.split()
|
||||
possible_show = {'avail':None,
|
||||
'available':None,
|
||||
'ok':None,
|
||||
|
@ -773,10 +784,11 @@ class Gui(object):
|
|||
if room.joined:
|
||||
self.muc.change_show(room.name, room.own_nick, show, msg)
|
||||
|
||||
def command_ignore(self, args):
|
||||
def command_ignore(self, arg):
|
||||
"""
|
||||
/ignore <nick>
|
||||
"""
|
||||
args = arg.split()
|
||||
if len(args) != 1:
|
||||
self.command_help(['ignore'])
|
||||
return
|
||||
|
@ -792,10 +804,11 @@ class Gui(object):
|
|||
else:
|
||||
self.add_message_to_room(self.current_room(), _("%s is already ignored") % nick)
|
||||
|
||||
def command_unignore(self, args):
|
||||
def command_unignore(self, arg):
|
||||
"""
|
||||
/unignore <nick>
|
||||
"""
|
||||
args = arg.split()
|
||||
if len(args) != 1:
|
||||
self.command_help(['unignore'])
|
||||
return
|
||||
|
@ -811,31 +824,29 @@ class Gui(object):
|
|||
del self.ignores[roomname]
|
||||
self.add_message_to_room(self.current_room(), _("%s is now unignored") % nick)
|
||||
|
||||
def command_away(self, args):
|
||||
def command_away(self, arg):
|
||||
"""
|
||||
/away [msg]
|
||||
"""
|
||||
args.insert(0, 'away')
|
||||
self.command_show(args)
|
||||
self.command_show("away "+arg)
|
||||
|
||||
def command_busy(self, args):
|
||||
def command_busy(self, arg):
|
||||
"""
|
||||
/busy [msg]
|
||||
"""
|
||||
args.insert(0, 'busy')
|
||||
self.command_show(args)
|
||||
self.command_show("busy "+args)
|
||||
|
||||
def command_avail(self, args):
|
||||
def command_avail(self, arg):
|
||||
"""
|
||||
/avail [msg]
|
||||
"""
|
||||
args.insert(0, 'available')
|
||||
self.command_show(args)
|
||||
self.command_show("available "+args)
|
||||
|
||||
def command_part(self, args):
|
||||
def command_part(self, arg):
|
||||
"""
|
||||
/part [msg]
|
||||
"""
|
||||
args = arg.split()
|
||||
reason = None
|
||||
room = self.current_room()
|
||||
if room.name == 'Info':
|
||||
|
@ -849,7 +860,7 @@ class Gui(object):
|
|||
self.rooms.remove(self.current_room())
|
||||
self.window.refresh(self.rooms)
|
||||
|
||||
def command_unquery(self, args):
|
||||
def command_unquery(self, arg):
|
||||
"""
|
||||
/unquery
|
||||
"""
|
||||
|
@ -858,10 +869,11 @@ class Gui(object):
|
|||
self.rooms.remove(room)
|
||||
self.window.refresh(self.rooms)
|
||||
|
||||
def command_query(self, args):
|
||||
def command_query(self, arg):
|
||||
"""
|
||||
/query <nick> [message]
|
||||
"""
|
||||
args = arg.split()
|
||||
if len(args) < 1:
|
||||
return
|
||||
nick = args[0]
|
||||
|
@ -876,10 +888,11 @@ class Gui(object):
|
|||
self.muc.send_private_message(r.name, msg)
|
||||
self.add_message_to_room(r, msg.decode('utf-8'), None, r.own_nick)
|
||||
|
||||
def command_topic(self, args):
|
||||
def command_topic(self, arg):
|
||||
"""
|
||||
/topic [new topic]
|
||||
"""
|
||||
args = arg.split()
|
||||
room = self.current_room()
|
||||
if len(args) == 0:
|
||||
self.add_message_to_room(room, _("The subject of the room is: %s") % room.topic.decode('utf-8'))
|
||||
|
@ -889,10 +902,55 @@ class Gui(object):
|
|||
return
|
||||
self.muc.change_subject(room.name, subject)
|
||||
|
||||
def command_nick(self, args):
|
||||
def command_link(self, arg):
|
||||
"""
|
||||
/link <option> <nb>
|
||||
Opens the link in a browser, or join the room, or add the JID, or
|
||||
copy it in the clipboard
|
||||
"""
|
||||
args = arg.split()
|
||||
if len(args) > 2:
|
||||
self.add_message_to_room(self.current_room(),
|
||||
_("Link: This command takes at most 2 arguments"))
|
||||
return
|
||||
# set the default parameters
|
||||
option = "open"
|
||||
nb = 0
|
||||
# check the provided parameters
|
||||
if len(args) >= 1:
|
||||
try: # check if the argument is the number
|
||||
nb = int(args[0])
|
||||
except ValueError: # nope, it's the option
|
||||
option = args[0]
|
||||
if len(args) == 2:
|
||||
try:
|
||||
nb = int(args[0])
|
||||
except ValueError:
|
||||
self.add_message_to_room(self.current_room(),
|
||||
_("Link: 2nd parameter should be a number"))
|
||||
return
|
||||
# find the nb-th link in the current buffer
|
||||
i = 0
|
||||
link = None
|
||||
for msg in self.current_room().messages[:-200:-1]:
|
||||
matches = re.findall('"((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))"', msg.txt)
|
||||
for m in matches:
|
||||
if i == nb:
|
||||
url = m[0]
|
||||
self.link_open(url)
|
||||
return
|
||||
|
||||
def url_open(self, url):
|
||||
"""
|
||||
Use webbrowser to open the provided link
|
||||
"""
|
||||
webbrowser.open(url)
|
||||
|
||||
def command_nick(self, arg):
|
||||
"""
|
||||
/nick <nickname>
|
||||
"""
|
||||
args = arg.split()
|
||||
if len(args) != 1:
|
||||
return
|
||||
nick = args[0]
|
||||
|
@ -909,12 +967,12 @@ class Gui(object):
|
|||
self.add_message_to_room(room, msg)
|
||||
self.window.input.refresh()
|
||||
|
||||
def command_quit(self, args):
|
||||
def command_quit(self, arg):
|
||||
"""
|
||||
/quit
|
||||
"""
|
||||
if len(args):
|
||||
msg = ' '.join(args)
|
||||
if len(arg.strip()) != 0:
|
||||
msg = arg
|
||||
else:
|
||||
msg = None
|
||||
if msg:
|
||||
|
@ -922,3 +980,4 @@ class Gui(object):
|
|||
sleep(0.2) # :(
|
||||
self.reset_curses()
|
||||
sys.exit()
|
||||
|
||||
|
|
Loading…
Reference in a new issue