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<EncryptionListEntry> encryption_list_entries = new ArrayList<EncryptionListEntry>();
|
||||||
internal ArrayList<AccountSettingsEntry> account_settings_entries = new ArrayList<AccountSettingsEntry>();
|
internal ArrayList<AccountSettingsEntry> account_settings_entries = new ArrayList<AccountSettingsEntry>();
|
||||||
internal ArrayList<ContactDetailsProvider> contact_details_entries = new ArrayList<ContactDetailsProvider>();
|
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) => {
|
internal Gee.Collection<ConversationTitlebarEntry> conversation_titlebar_entries = new Gee.TreeSet<ConversationTitlebarEntry>((a, b) => {
|
||||||
if (a.order < b.order) {
|
if (a.order < b.order) {
|
||||||
return -1;
|
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) {
|
public bool register_contact_titlebar_entry(ConversationTitlebarEntry entry) {
|
||||||
lock(conversation_titlebar_entries) {
|
lock(conversation_titlebar_entries) {
|
||||||
foreach(ConversationTitlebarEntry e in conversation_titlebar_entries) {
|
foreach(ConversationTitlebarEntry e in conversation_titlebar_entries) {
|
||||||
|
|
|
@ -52,30 +52,46 @@ public class View : Box {
|
||||||
|
|
||||||
private void send_text() {
|
private void send_text() {
|
||||||
string text = text_input.buffer.text;
|
string text = text_input.buffer.text;
|
||||||
|
text_input.buffer.text = "";
|
||||||
if (text.has_prefix("/")) {
|
if (text.has_prefix("/")) {
|
||||||
string[] token = text.split(" ", 2);
|
string[] token = text.split(" ", 2);
|
||||||
switch(token[0]) {
|
switch(token[0]) {
|
||||||
|
case "/me":
|
||||||
|
// Just send as is.
|
||||||
|
break;
|
||||||
|
case "/say":
|
||||||
|
if (token.length == 1) return;
|
||||||
|
text = token[1];
|
||||||
|
break;
|
||||||
case "/kick":
|
case "/kick":
|
||||||
stream_interactor.get_module(MucManager.IDENTITY).kick(conversation.account, conversation.counterpart, token[1]);
|
stream_interactor.get_module(MucManager.IDENTITY).kick(conversation.account, conversation.counterpart, token[1]);
|
||||||
break;
|
return;
|
||||||
case "/me":
|
|
||||||
stream_interactor.get_module(MessageProcessor.IDENTITY).send_message(text, conversation);
|
|
||||||
break;
|
|
||||||
case "/nick":
|
case "/nick":
|
||||||
stream_interactor.get_module(MucManager.IDENTITY).change_nick(conversation.account, conversation.counterpart, token[1]);
|
stream_interactor.get_module(MucManager.IDENTITY).change_nick(conversation.account, conversation.counterpart, token[1]);
|
||||||
break;
|
return;
|
||||||
case "/ping":
|
case "/ping":
|
||||||
Xmpp.Core.XmppStream? stream = stream_interactor.get_stream(conversation.account);
|
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);
|
stream.get_module(Xmpp.Xep.Ping.Module.IDENTITY).send_ping(stream, conversation.counterpart.to_string() + "/" + token[1], null);
|
||||||
break;
|
return;
|
||||||
case "/topic":
|
case "/topic":
|
||||||
stream_interactor.get_module(MucManager.IDENTITY).change_subject(conversation.account, conversation.counterpart, token[1]);
|
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;
|
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) {
|
private bool on_text_input_key_press(EventKey event) {
|
||||||
|
|
Loading…
Reference in a new issue