summaryrefslogtreecommitdiffstats
path: root/comm/chat/components/public/prplIProtocol.idl
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /comm/chat/components/public/prplIProtocol.idl
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'comm/chat/components/public/prplIProtocol.idl')
-rw-r--r--comm/chat/components/public/prplIProtocol.idl148
1 files changed, 148 insertions, 0 deletions
diff --git a/comm/chat/components/public/prplIProtocol.idl b/comm/chat/components/public/prplIProtocol.idl
new file mode 100644
index 0000000000..f6d30826f4
--- /dev/null
+++ b/comm/chat/components/public/prplIProtocol.idl
@@ -0,0 +1,148 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsISupports.idl"
+#include "imIAccount.idl"
+
+interface prplIPref;
+interface prplIUsernameSplit;
+
+/**
+ * This must be implemented for every protocol.
+ *
+ * See jsProtoHelper.jsm for a base class.
+ */
+[scriptable, uuid(7d302db0-3813-4c51-8372-c7eb5fc9f3d3)]
+interface prplIProtocol: nsISupports {
+ /**
+ * This method is used so that classes implementing several protocol
+ * plugins can know which protocol is desired for this instance.
+ *
+ * @param aId The prpl id.
+ */
+ void init(in AUTF8String aId);
+
+ /**
+ * A human readable (potentially localized) name for the protocol.
+ */
+ readonly attribute AUTF8String name;
+ /**
+ * A unique ID for the protocol, should start with the prefix 'prpl-'.
+ */
+ readonly attribute AUTF8String id;
+ /**
+ * A unique name for this protocol, it must consist of only lowercase letters
+ * & numbers.
+ *
+ * It can be used to check for duplicates and is the basis for the directory
+ * name for log storage.
+ */
+ readonly attribute AUTF8String normalizedName;
+
+ /**
+ * A chrome URI pointing to a folder that contains the icon files:
+ * icon.png icon32.png and icon48.png
+ */
+ readonly attribute AUTF8String iconBaseURI;
+
+ /**
+ * @returns an array of prplIPref
+ */
+ Array<prplIPref> getOptions();
+
+ /**
+ * String to put in front of the full account username identifier. Usually
+ * an empty string.
+ */
+ readonly attribute AUTF8String usernamePrefix;
+
+ /**
+ * @returns an array of prplIUsernameSplit
+ */
+ Array<prplIUsernameSplit> getUsernameSplit();
+
+ /**
+ * Split a username into its parts without separators (or prefix).
+ * Returns an empty array if the username can not be split.
+ */
+ Array<AUTF8String> splitUsername(in AUTF8String aName);
+
+ /**
+ * Descriptive text used in the account wizard to describe the username.
+ */
+ readonly attribute AUTF8String usernameEmptyText;
+
+ /**
+ * Use this function to avoid attempting to create duplicate accounts.
+ */
+ boolean accountExists(in AUTF8String aName);
+
+ // The following should all be flags that describe whether a protocol has a
+ // particular feature.
+
+ /**
+ * Whether chat rooms have topics.
+ */
+ readonly attribute boolean chatHasTopic;
+
+ /**
+ * True if passwords are unused for this protocol.
+ *
+ * Passwords are unused for some protocols, e.g. Bonjour.
+ */
+ readonly attribute boolean noPassword;
+
+ /**
+ * True if a password is not required for sign-in.
+ *
+ * Passwords in IRC are optional, and are needed for certain functionality.
+ */
+ readonly attribute boolean passwordOptional;
+
+ /**
+ * Indicates that slash commands are native to this protocol.
+ * Used as a hint that unknown commands should not be sent as messages.
+ */
+ readonly attribute boolean slashCommandsNative;
+
+ /**
+ * True if the protocol can provide end-to-end message encryption in
+ * conversations.
+ */
+ readonly attribute boolean canEncrypt;
+
+ /**
+ * Get the protocol specific part of an already initialized
+ * imIAccount instance.
+ */
+ prplIAccount getAccount(in imIAccount aImAccount);
+};
+
+/**
+ * The chat account wizards requests the sign-in information as a series of
+ * fields generated by a list of prplIUsernameSplit.
+ *
+ * The result of these is composed into a string and stored as the account name.
+ * It is the responsibity of the prplIAccount to re-parse this back to usable
+ * connection data.
+ *
+ * TODO Replace this with storing account data as separate fields.
+ */
+[scriptable, uuid(20c4971a-f7c2-4781-8e85-69fee7b83a3d)]
+interface prplIUsernameSplit: nsISupports {
+ /**
+ * The field name presented in the account wizard, e.g. server.
+ */
+ readonly attribute AUTF8String label;
+ /**
+ * The default value that is presented in the account wizard.
+ */
+ readonly attribute AUTF8String defaultValue;
+ /**
+ * The string used to compose the account name.
+ *
+ * E.g. an "@" would cause "@" to be appended before this field.
+ */
+ readonly attribute char separator;
+};