add plugin api for text commands
This commit is contained in:
parent
5dc460fc1a
commit
781d241b93
|
@ -6,6 +6,7 @@ public class Registry {
|
|||
internal ArrayList<EncryptionListEntry> encryption_list_entries = new ArrayList<EncryptionListEntry>();
|
||||
internal ArrayList<AccountSettingsEntry> account_settings_entries = new ArrayList<AccountSettingsEntry>();
|
||||
internal ArrayList<ContactDetailsProvider> contact_details_entries = new ArrayList<ContactDetailsProvider>();
|
||||
internal Map<string, TextCommand> text_commands = new HashMap<string, TextCommand>();
|
||||
internal Gee.Collection<ConversationTitlebarEntry> conversation_titlebar_entries = new Gee.TreeSet<ConversationTitlebarEntry>((a, b) => {
|
||||
if (a.order < b.order) {
|
||||
return -1;
|
||||
|
@ -49,6 +50,14 @@ public class Registry {
|
|||
}
|
||||
}
|
||||
|
||||
public bool register_text_command(TextCommand cmd) {
|
||||
lock(text_commands) {
|
||||
if (text_commands.has_key(cmd.cmd)) return false;
|
||||
text_commands[cmd.cmd] = cmd;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public bool register_contact_titlebar_entry(ConversationTitlebarEntry entry) {
|
||||
lock(conversation_titlebar_entries) {
|
||||
foreach(ConversationTitlebarEntry e in conversation_titlebar_entries) {
|
||||
|
|
|
@ -52,30 +52,46 @@ public class View : Box {
|
|||
|
||||
private void send_text() {
|
||||
string text = text_input.buffer.text;
|
||||
text_input.buffer.text = "";
|
||||
if (text.has_prefix("/")) {
|
||||
string[] token = text.split(" ", 2);
|
||||
switch(token[0]) {
|
||||
case "/me":
|
||||
// Just send as is.
|
||||
break;
|
||||
case "/say":
|
||||
if (token.length == 1) return;
|
||||
text = token[1];
|
||||
break;
|
||||
case "/kick":
|
||||
stream_interactor.get_module(MucManager.IDENTITY).kick(conversation.account, conversation.counterpart, token[1]);
|
||||
break;
|
||||
case "/me":
|
||||
stream_interactor.get_module(MessageProcessor.IDENTITY).send_message(text, conversation);
|
||||
break;
|
||||
return;
|
||||
case "/nick":
|
||||
stream_interactor.get_module(MucManager.IDENTITY).change_nick(conversation.account, conversation.counterpart, token[1]);
|
||||
break;
|
||||
return;
|
||||
case "/ping":
|
||||
Xmpp.Core.XmppStream? stream = stream_interactor.get_stream(conversation.account);
|
||||
stream.get_module(Xmpp.Xep.Ping.Module.IDENTITY).send_ping(stream, conversation.counterpart.to_string() + "/" + token[1], null);
|
||||
break;
|
||||
return;
|
||||
case "/topic":
|
||||
stream_interactor.get_module(MucManager.IDENTITY).change_subject(conversation.account, conversation.counterpart, token[1]);
|
||||
return;
|
||||
default:
|
||||
if (token[0].has_prefix("//")) {
|
||||
text = text.substring(1);
|
||||
} else {
|
||||
string cmd_name = token[0].substring(1);
|
||||
Dino.Application app = GLib.Application.get_default() as Dino.Application;
|
||||
if (app != null && app.plugin_registry.text_commands.has_key(cmd_name)) {
|
||||
string? new_text = app.plugin_registry.text_commands[cmd_name].handle_command(token[1], conversation);
|
||||
if (new_text == null) return;
|
||||
text = (!)new_text;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
stream_interactor.get_module(MessageProcessor.IDENTITY).send_message(text, conversation);
|
||||
}
|
||||
text_input.buffer.text = "";
|
||||
stream_interactor.get_module(MessageProcessor.IDENTITY).send_message(text, conversation);
|
||||
}
|
||||
|
||||
private bool on_text_input_key_press(EventKey event) {
|
||||
|
|
Loading…
Reference in a new issue