Compare commits
5 Commits
e36f7d5964
...
build/mult
| Author | SHA1 | Date | |
|---|---|---|---|
| 886372caac | |||
| 0b0b02d6e0 | |||
| d748ffc527 | |||
|
fac1e224bc
|
|||
|
6ad8a19053
|
@@ -5,6 +5,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
autoconf \
|
||||
autoconf-archive \
|
||||
automake \
|
||||
ca-certificates \
|
||||
expect \
|
||||
gcc \
|
||||
git \
|
||||
@@ -36,7 +37,7 @@ RUN mkdir -p /usr/src/{stabber,libstrophe,profanity}
|
||||
WORKDIR /usr/src
|
||||
|
||||
#RUN git clone https://github.com/boothj5/stabber
|
||||
RUN git clone -c http.sslverify=false https://github.com/strophe/libstrophe
|
||||
RUN git clone --depth 1 https://git.jabber.space/devs/libstrophe-gh.git libstrophe
|
||||
|
||||
#WORKDIR /usr/src/stabber
|
||||
#RUN ./bootstrap.sh
|
||||
@@ -47,7 +48,7 @@ RUN git clone -c http.sslverify=false https://github.com/strophe/libstrophe
|
||||
WORKDIR /usr/src/libstrophe
|
||||
RUN ./bootstrap.sh
|
||||
RUN ./configure --prefix=/usr
|
||||
RUN make
|
||||
RUN make -j$(nproc)
|
||||
RUN make install
|
||||
|
||||
WORKDIR /usr/src/profanity
|
||||
|
||||
@@ -9,6 +9,7 @@ RUN dnf install -y \
|
||||
autoconf-archive \
|
||||
automake \
|
||||
awk \
|
||||
ca-certificates \
|
||||
expect-devel \
|
||||
gcc \
|
||||
git \
|
||||
@@ -56,11 +57,11 @@ WORKDIR /usr/src
|
||||
|
||||
WORKDIR /usr/src
|
||||
RUN mkdir -p /usr/src/libstrophe
|
||||
RUN git clone -c http.sslverify=false https://github.com/strophe/libstrophe
|
||||
RUN git clone --depth 1 https://git.jabber.space/devs/libstrophe-gh.git libstrophe
|
||||
WORKDIR /usr/src/libstrophe
|
||||
RUN ./bootstrap.sh
|
||||
RUN ./configure --prefix=/usr
|
||||
RUN make
|
||||
RUN make -j$(nproc)
|
||||
RUN make install
|
||||
|
||||
RUN mkdir -p /usr/src/profanity
|
||||
|
||||
@@ -6,6 +6,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
autoconf \
|
||||
autoconf-archive \
|
||||
automake \
|
||||
ca-certificates \
|
||||
expect \
|
||||
gcc \
|
||||
git \
|
||||
@@ -37,7 +38,7 @@ RUN mkdir -p /usr/src/{stabber,libstrophe,profanity}
|
||||
WORKDIR /usr/src
|
||||
|
||||
#RUN git clone https://github.com/boothj5/stabber
|
||||
RUN git clone -c http.sslverify=false https://github.com/strophe/libstrophe
|
||||
RUN git clone --depth 1 https://git.jabber.space/devs/libstrophe-gh.git libstrophe
|
||||
|
||||
# TODO: Re-enable once libmicrohttpd-dev has been updated.
|
||||
#WORKDIR /usr/src/stabber
|
||||
@@ -49,7 +50,7 @@ RUN git clone -c http.sslverify=false https://github.com/strophe/libstrophe
|
||||
WORKDIR /usr/src/libstrophe
|
||||
RUN ./bootstrap.sh
|
||||
RUN ./configure --prefix=/usr
|
||||
RUN make
|
||||
RUN make -j$(nproc)
|
||||
RUN make install
|
||||
|
||||
WORKDIR /usr/src/profanity
|
||||
|
||||
@@ -20,13 +20,13 @@
|
||||
typedef char* PROF_WIN_TAG;
|
||||
|
||||
/** Function pointer for command callbacks, accepting an array of arguments. */
|
||||
typedef void (*CMD_CB)(char** args);
|
||||
typedef void(*CMD_CB)(char **args);
|
||||
|
||||
/** Function pointer for timed callbacks, accepting no arguments. */
|
||||
typedef void (*TIMED_CB)(void);
|
||||
typedef void(*TIMED_CB)(void);
|
||||
|
||||
/** Function pointer for window callbacks, accepting a window tag and input line. */
|
||||
typedef void (*WINDOW_CB)(PROF_WIN_TAG win, char* line);
|
||||
typedef void(*WINDOW_CB)(PROF_WIN_TAG win, char *line);
|
||||
|
||||
/** Highlights the console window in the status bar. */
|
||||
void prof_cons_alert(void);
|
||||
@@ -41,7 +41,7 @@ void prof_cons_alert(void);
|
||||
* prof_cons_show("This will appear in the console window");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_cons_show(const char* const message);
|
||||
int prof_cons_show(const char * const message);
|
||||
|
||||
/**
|
||||
* Shows a message in the console with a specified theme.
|
||||
@@ -57,7 +57,7 @@ int prof_cons_show(const char* const message);
|
||||
* prof_cons_show_themed("myplugin", "text", NULL, "Plugin themed message");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_cons_show_themed(const char* const group, const char* const item, const char* const def, const char* const message);
|
||||
int prof_cons_show_themed(const char *const group, const char *const item, const char *const def, const char *const message);
|
||||
|
||||
/**
|
||||
* Shows a message indicating a command was used incorrectly.
|
||||
@@ -69,7 +69,7 @@ int prof_cons_show_themed(const char* const group, const char* const item, const
|
||||
* prof_cons_bad_cmd_usage("/mycommand");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_cons_bad_cmd_usage(const char* const cmd);
|
||||
int prof_cons_bad_cmd_usage(const char *const cmd);
|
||||
|
||||
/**
|
||||
* Registers a new command with help information and callback.
|
||||
@@ -91,9 +91,9 @@ int prof_cons_bad_cmd_usage(const char* const cmd);
|
||||
* prof_register_command("/newcommand", 1, 2, synopsis, "Example command", args, examples, my_function);
|
||||
* @endcode
|
||||
*/
|
||||
void prof_register_command(const char* command_name, int min_args, int max_args,
|
||||
char** synopsis, const char* description, char* arguments[][2], char** examples,
|
||||
CMD_CB callback);
|
||||
void prof_register_command(const char *command_name, int min_args, int max_args,
|
||||
char **synopsis, const char *description, char *arguments[][2], char **examples,
|
||||
CMD_CB callback);
|
||||
|
||||
/**
|
||||
* Registers a function to be called periodically by CProof.
|
||||
@@ -118,7 +118,7 @@ void prof_register_timed(TIMED_CB callback, int interval_seconds);
|
||||
* prof_completer_add("/mycommand", items);
|
||||
* @endcode
|
||||
*/
|
||||
void prof_completer_add(const char* key, char** items);
|
||||
void prof_completer_add(const char *key, char **items);
|
||||
|
||||
/**
|
||||
* Removes autocomplete values for a command or argument.
|
||||
@@ -131,7 +131,7 @@ void prof_completer_add(const char* key, char** items);
|
||||
* prof_completer_remove("/mycommand", items);
|
||||
* @endcode
|
||||
*/
|
||||
void prof_completer_remove(const char* key, char** items);
|
||||
void prof_completer_remove(const char *key, char **items);
|
||||
|
||||
/**
|
||||
* Clears all autocomplete values for a command or argument.
|
||||
@@ -142,7 +142,7 @@ void prof_completer_remove(const char* key, char** items);
|
||||
* prof_completer_clear("/mycommand");
|
||||
* @endcode
|
||||
*/
|
||||
void prof_completer_clear(const char* key);
|
||||
void prof_completer_clear(const char *key);
|
||||
|
||||
/**
|
||||
* Adds filepath autocompletion for a command or argument.
|
||||
@@ -153,7 +153,7 @@ void prof_completer_clear(const char* key);
|
||||
* prof_filepath_completer_add("/filecmd");
|
||||
* @endcode
|
||||
*/
|
||||
void prof_filepath_completer_add(const char* prefix);
|
||||
void prof_filepath_completer_add(const char *prefix);
|
||||
|
||||
/**
|
||||
* Sends a desktop notification.
|
||||
@@ -166,7 +166,7 @@ void prof_filepath_completer_add(const char* prefix);
|
||||
* prof_notify("Example notification", 5000, "Example plugin");
|
||||
* @endcode
|
||||
*/
|
||||
void prof_notify(const char* message, int timeout_ms, const char* category);
|
||||
void prof_notify(const char *message, int timeout_ms, const char *category);
|
||||
|
||||
/**
|
||||
* Sends a line of input to CProof to execute.
|
||||
@@ -177,7 +177,7 @@ void prof_notify(const char* message, int timeout_ms, const char* category);
|
||||
* prof_send_line("/who online");
|
||||
* @endcode
|
||||
*/
|
||||
void prof_send_line(char* line);
|
||||
void prof_send_line(char *line);
|
||||
|
||||
/**
|
||||
* Gets the Jabber ID of the current chat recipient.
|
||||
@@ -185,17 +185,6 @@ void prof_send_line(char* line);
|
||||
*/
|
||||
char* prof_get_current_recipient(void);
|
||||
|
||||
/**
|
||||
* Gets the title of the current window as shown in the titlebar.
|
||||
*
|
||||
* Special cases:
|
||||
* - MUC configuration window: Includes "config" and an asterisk if modified (e.g., "room@example.com config *").
|
||||
* - vCard window: Includes the bare JID and an asterisk if modified (e.g., "vCard user@example.com *").
|
||||
*
|
||||
* @return A null-terminated string containing the window title. The caller must free the returned string.
|
||||
*/
|
||||
char* prof_get_current_window(void);
|
||||
|
||||
/**
|
||||
* Gets the Jabber ID of the current chat room.
|
||||
* @return The room Jabber ID (e.g., "metalchat@conference.example.com") or NULL if not in a room.
|
||||
@@ -219,14 +208,14 @@ char* prof_get_current_nick(void);
|
||||
* @param barejid The Jabber ID.
|
||||
* @return The nickname (e.g., "eddie") or the barejid if not in the roster.
|
||||
*/
|
||||
char* prof_get_name_from_roster(const char* barejid);
|
||||
char* prof_get_name_from_roster(const char *barejid);
|
||||
|
||||
/**
|
||||
* Gets the barejid for a nickname from the roster.
|
||||
* @param name The nickname.
|
||||
* @return The barejid (e.g., "eddie@server.tld") or NULL if not in the roster.
|
||||
*/
|
||||
char* prof_get_barejid_from_roster(const char* name);
|
||||
char* prof_get_barejid_from_roster(const char *name);
|
||||
|
||||
/**
|
||||
* Gets nicknames of all occupants in the current chat room.
|
||||
@@ -239,7 +228,7 @@ char** prof_get_current_occupants(void);
|
||||
* @param barejid The room’s Jabber ID.
|
||||
* @return The nickname.
|
||||
*/
|
||||
char* prof_get_room_nick(const char* barejid);
|
||||
char* prof_get_room_nick(const char *barejid);
|
||||
|
||||
/**
|
||||
* Logs a debug message to the CProof log.
|
||||
@@ -250,7 +239,7 @@ char* prof_get_room_nick(const char* barejid);
|
||||
* prof_log_debug("Debug message");
|
||||
* @endcode
|
||||
*/
|
||||
void prof_log_debug(const char* message);
|
||||
void prof_log_debug(const char *message);
|
||||
|
||||
/**
|
||||
* Logs an info message to the CProof log.
|
||||
@@ -261,7 +250,7 @@ void prof_log_debug(const char* message);
|
||||
* prof_log_info("Info message");
|
||||
* @endcode
|
||||
*/
|
||||
void prof_log_info(const char* message);
|
||||
void prof_log_info(const char *message);
|
||||
|
||||
/**
|
||||
* Logs a warning message to the CProof log.
|
||||
@@ -272,7 +261,7 @@ void prof_log_info(const char* message);
|
||||
* prof_log_warning("Warning message");
|
||||
* @endcode
|
||||
*/
|
||||
void prof_log_warning(const char* message);
|
||||
void prof_log_warning(const char *message);
|
||||
|
||||
/**
|
||||
* Logs an error message to the CProof log.
|
||||
@@ -283,7 +272,7 @@ void prof_log_warning(const char* message);
|
||||
* prof_log_error("Error message");
|
||||
* @endcode
|
||||
*/
|
||||
void prof_log_error(const char* message);
|
||||
void prof_log_error(const char *message);
|
||||
|
||||
/**
|
||||
* Creates a plugin window.
|
||||
@@ -332,7 +321,7 @@ int prof_win_focus(PROF_WIN_TAG win);
|
||||
* prof_win_show("My Plugin", "Message in plugin window");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_win_show(PROF_WIN_TAG win, char* message);
|
||||
int prof_win_show(PROF_WIN_TAG win, char *message);
|
||||
|
||||
/**
|
||||
* Shows a message in a plugin window with a specified theme.
|
||||
@@ -349,7 +338,7 @@ int prof_win_show(PROF_WIN_TAG win, char* message);
|
||||
* prof_win_show_themed("My Plugin", "myplugin", "text", NULL, "Themed message");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_win_show_themed(PROF_WIN_TAG tag, char* group, char* key, char* def, char* message);
|
||||
int prof_win_show_themed(PROF_WIN_TAG tag, char *group, char *key, char *def, char *message);
|
||||
|
||||
/**
|
||||
* Sends an XMPP stanza.
|
||||
@@ -361,7 +350,7 @@ int prof_win_show_themed(PROF_WIN_TAG tag, char* group, char* key, char* def, ch
|
||||
* prof_send_stanza("<iq to='juliet@capulet.lit' id='s2c1' type='get'><ping xmlns='urn:xmpp:ping'/></iq>");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_send_stanza(char* stanza);
|
||||
int prof_send_stanza(char *stanza);
|
||||
|
||||
/**
|
||||
* Gets a boolean setting.
|
||||
@@ -376,7 +365,7 @@ int prof_send_stanza(char* stanza);
|
||||
* prof_settings_boolean_get("myplugin", "notify", 0);
|
||||
* @endcode
|
||||
*/
|
||||
int prof_settings_boolean_get(char* group, char* key, int def);
|
||||
int prof_settings_boolean_get(char *group, char *key, int def);
|
||||
|
||||
/**
|
||||
* Sets a boolean setting.
|
||||
@@ -390,7 +379,7 @@ int prof_settings_boolean_get(char* group, char* key, int def);
|
||||
* prof_settings_boolean_set("myplugin", "activate", 1);
|
||||
* @endcode
|
||||
*/
|
||||
void prof_settings_boolean_set(char* group, char* key, int value);
|
||||
void prof_settings_boolean_set(char *group, char *key, int value);
|
||||
|
||||
/**
|
||||
* Gets a string setting.
|
||||
@@ -405,7 +394,7 @@ void prof_settings_boolean_set(char* group, char* key, int value);
|
||||
* prof_settings_string_get("myplugin", "prefix", "prefix-->");
|
||||
* @endcode
|
||||
*/
|
||||
char* prof_settings_string_get(char* group, char* key, char* def);
|
||||
char* prof_settings_string_get(char *group, char *key, char *def);
|
||||
|
||||
/**
|
||||
* Sets a string setting.
|
||||
@@ -419,7 +408,7 @@ char* prof_settings_string_get(char* group, char* key, char* def);
|
||||
* prof_settings_string_set("myplugin", "prefix", "myplugin, ");
|
||||
* @endcode
|
||||
*/
|
||||
void prof_settings_string_set(char* group, char* key, char* value);
|
||||
void prof_settings_string_set(char *group, char *key, char *value);
|
||||
|
||||
/**
|
||||
* Gets a string list setting, separated by semicolons.
|
||||
@@ -433,7 +422,7 @@ void prof_settings_string_set(char* group, char* key, char* value);
|
||||
* prof_settings_string_list_get("myplugin", "somelist");
|
||||
* @endcode
|
||||
*/
|
||||
char** prof_settings_string_list_get(char* group, char* key);
|
||||
char** prof_settings_string_list_get(char *group, char *key);
|
||||
|
||||
/**
|
||||
* Adds an item to a string list setting.
|
||||
@@ -448,7 +437,7 @@ char** prof_settings_string_list_get(char* group, char* key);
|
||||
* prof_settings_string_list_add("myplugin", "somelist", "anelement");
|
||||
* @endcode
|
||||
*/
|
||||
void prof_settings_string_list_add(char* group, char* key, char* value);
|
||||
void prof_settings_string_list_add(char *group, char *key, char *value);
|
||||
|
||||
/**
|
||||
* Removes an item from a string list setting.
|
||||
@@ -463,7 +452,7 @@ void prof_settings_string_list_add(char* group, char* key, char* value);
|
||||
* prof_settings_string_list_remove("myplugin", "somelist", "anelement");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_settings_string_list_remove(char* group, char* key, char* value);
|
||||
int prof_settings_string_list_remove(char *group, char *key, char *value);
|
||||
|
||||
/**
|
||||
* Clears all items from a string list setting.
|
||||
@@ -477,7 +466,7 @@ int prof_settings_string_list_remove(char* group, char* key, char* value);
|
||||
* prof_settings_string_list_clear("myplugin", "somelist");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_settings_string_list_clear(char* group, char* key);
|
||||
int prof_settings_string_list_clear(char *group, char *key);
|
||||
|
||||
/**
|
||||
* Gets an integer setting.
|
||||
@@ -492,7 +481,7 @@ int prof_settings_string_list_clear(char* group, char* key);
|
||||
* prof_settings_int_get("myplugin", "timeout", 10);
|
||||
* @endcode
|
||||
*/
|
||||
int prof_settings_int_get(char* group, char* key, int def);
|
||||
int prof_settings_int_get(char *group, char *key, int def);
|
||||
|
||||
/**
|
||||
* Sets an integer setting.
|
||||
@@ -506,7 +495,7 @@ int prof_settings_int_get(char* group, char* key, int def);
|
||||
* prof_settings_int_set("myplugin", "timeout", 100);
|
||||
* @endcode
|
||||
*/
|
||||
void prof_settings_int_set(char* group, char* key, int value);
|
||||
void prof_settings_int_set(char *group, char *key, int value);
|
||||
|
||||
/**
|
||||
* Triggers handling of an incoming message as if received by CProof.
|
||||
@@ -519,7 +508,7 @@ void prof_settings_int_set(char* group, char* key, int value);
|
||||
* prof_incoming_message("bob@server.org", "laptop", "Hello there");
|
||||
* @endcode
|
||||
*/
|
||||
void prof_incoming_message(char* barejid, char* resource, char* message);
|
||||
void prof_incoming_message(char *barejid, char *resource, char *message);
|
||||
|
||||
/**
|
||||
* Adds a service discovery feature to CProof’s supported features.
|
||||
@@ -531,7 +520,7 @@ void prof_incoming_message(char* barejid, char* resource, char* message);
|
||||
* prof_disco_add_feature("urn:xmpp:omemo:0:devicelist+notify");
|
||||
* @endcode
|
||||
*/
|
||||
void prof_disco_add_feature(char* feature);
|
||||
void prof_disco_add_feature(char *feature);
|
||||
|
||||
/**
|
||||
* Ends an encrypted session with a user.
|
||||
@@ -542,7 +531,7 @@ void prof_disco_add_feature(char* feature);
|
||||
* prof_encryption_reset("alice@server.org");
|
||||
* @endcode
|
||||
*/
|
||||
void prof_encryption_reset(char* barejid);
|
||||
void prof_encryption_reset(char *barejid);
|
||||
|
||||
/**
|
||||
* Sets the titlebar encryption indicator text for a recipient.
|
||||
@@ -555,7 +544,7 @@ void prof_encryption_reset(char* barejid);
|
||||
* prof_chat_set_titlebar_enctext("bob@example.com", "safe");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_chat_set_titlebar_enctext(char* barejid, char* enctext);
|
||||
int prof_chat_set_titlebar_enctext(char *barejid, char *enctext);
|
||||
|
||||
/**
|
||||
* Resets the titlebar encryption indicator for a recipient to CProof’s default.
|
||||
@@ -567,7 +556,7 @@ int prof_chat_set_titlebar_enctext(char* barejid, char* enctext);
|
||||
* prof_chat_unset_titlebar_enctext("bob@example.com");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_chat_unset_titlebar_enctext(char* barejid);
|
||||
int prof_chat_unset_titlebar_enctext(char *barejid);
|
||||
|
||||
/**
|
||||
* Sets the incoming message prefix character for a contact.
|
||||
@@ -580,7 +569,7 @@ int prof_chat_unset_titlebar_enctext(char* barejid);
|
||||
* prof_chat_set_incoming_char("kristine@example.com", "*");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_chat_set_incoming_char(char* barejid, char* ch);
|
||||
int prof_chat_set_incoming_char(char *barejid, char *ch);
|
||||
|
||||
/**
|
||||
* Resets the incoming message prefix character for a contact.
|
||||
@@ -592,7 +581,7 @@ int prof_chat_set_incoming_char(char* barejid, char* ch);
|
||||
* prof_chat_unset_incoming_char("kristine@example.com");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_chat_unset_incoming_char(char* barejid);
|
||||
int prof_chat_unset_incoming_char(char *barejid);
|
||||
|
||||
/**
|
||||
* Sets the outgoing message prefix character for a contact.
|
||||
@@ -605,7 +594,7 @@ int prof_chat_unset_incoming_char(char* barejid);
|
||||
* prof_chat_set_outgoing_char("david@example.com", "+");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_chat_set_outgoing_char(char* barejid, char* ch);
|
||||
int prof_chat_set_outgoing_char(char *barejid, char *ch);
|
||||
|
||||
/**
|
||||
* Resets the outgoing message prefix character for a contact.
|
||||
@@ -617,7 +606,7 @@ int prof_chat_set_outgoing_char(char* barejid, char* ch);
|
||||
* prof_chat_unset_outgoing_char("david@example.com");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_chat_unset_outgoing_char(char* barejid);
|
||||
int prof_chat_unset_outgoing_char(char *barejid);
|
||||
|
||||
/**
|
||||
* Sets the titlebar encryption indicator text for a room.
|
||||
@@ -630,7 +619,7 @@ int prof_chat_unset_outgoing_char(char* barejid);
|
||||
* prof_room_set_titlebar_enctext("generalchat@conference.service.com", "secret");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_room_set_titlebar_enctext(char* roomjid, char* enctext);
|
||||
int prof_room_set_titlebar_enctext(char *roomjid, char *enctext);
|
||||
|
||||
/**
|
||||
* Resets the titlebar encryption indicator for a room to CProof’s default.
|
||||
@@ -642,7 +631,7 @@ int prof_room_set_titlebar_enctext(char* roomjid, char* enctext);
|
||||
* prof_room_unset_titlebar_enctext("generalchat@conference.service.com");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_room_unset_titlebar_enctext(char* roomjid);
|
||||
int prof_room_unset_titlebar_enctext(char *roomjid);
|
||||
|
||||
/**
|
||||
* Sets the message prefix character for a room.
|
||||
@@ -655,7 +644,7 @@ int prof_room_unset_titlebar_enctext(char* roomjid);
|
||||
* prof_room_set_message_char("ohnoes@conference.example.com", "^");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_room_set_message_char(char* roomjid, char* ch);
|
||||
int prof_room_set_message_char(char *roomjid, char *ch);
|
||||
|
||||
/**
|
||||
* Resets the message prefix character for a room.
|
||||
@@ -667,7 +656,7 @@ int prof_room_set_message_char(char* roomjid, char* ch);
|
||||
* prof_room_unset_message_char("ohnoes@conference.example.com");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_room_unset_message_char(char* roomjid);
|
||||
int prof_room_unset_message_char(char *roomjid);
|
||||
|
||||
/**
|
||||
* Shows a message in a chat window.
|
||||
@@ -680,7 +669,7 @@ int prof_room_unset_message_char(char* roomjid);
|
||||
* prof_chat_show("bob@server.org", "From a plugin in the chat window");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_chat_show(char* barejid, char* message);
|
||||
int prof_chat_show(char *barejid, char *message);
|
||||
|
||||
/**
|
||||
* Shows a message in a chat window with a theme and prefix character.
|
||||
@@ -698,7 +687,7 @@ int prof_chat_show(char* barejid, char* message);
|
||||
* prof_chat_show_themed("bob@server.org", "myplugin", "text", NULL, "!", "Themed message");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_chat_show_themed(char* barejid, char* group, char* item, char* def, char* ch, char* message);
|
||||
int prof_chat_show_themed(char *barejid, char *group, char *item, char *def, char *ch, char *message);
|
||||
|
||||
/**
|
||||
* Shows a message in a chat room window.
|
||||
@@ -711,7 +700,7 @@ int prof_chat_show_themed(char* barejid, char* group, char* item, char* def, cha
|
||||
* prof_room_show("chat@conference.example.com", "From a plugin in the chat room");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_room_show(char* roomjid, char* message);
|
||||
int prof_room_show(char *roomjid, char *message);
|
||||
|
||||
/**
|
||||
* Shows a message in a chat room window with a theme and prefix character.
|
||||
@@ -729,4 +718,4 @@ int prof_room_show(char* roomjid, char* message);
|
||||
* prof_room_show_themed("chat@conference.example.com", "myplugin", "text", NULL, "!", "Themed message");
|
||||
* @endcode
|
||||
*/
|
||||
int prof_room_show_themed(char* roomjid, char* group, char* item, char* def, char* ch, char* message);
|
||||
int prof_room_show_themed(char *roomjid, char *group, char *item, char *def, char *ch, char *message);
|
||||
|
||||
@@ -830,22 +830,6 @@ def get_current_recipient() -> str | None:
|
||||
"""
|
||||
pass
|
||||
|
||||
def get_current_window() -> str:
|
||||
"""Retrieves the title of the current window as shown in the titlebar.
|
||||
|
||||
Returns the title of the currently active window, matching the titlebar display.
|
||||
Special cases:
|
||||
- For MUC configuration windows, includes "config" and an asterisk if modified (e.g., "room@example.com config \*").
|
||||
- For vCard windows, includes the bare JID and an asterisk if modified (e.g., "vCard user@example.com \*").
|
||||
|
||||
:return: The window title as a string.
|
||||
|
||||
Example::
|
||||
|
||||
title = prof.get_current_window()
|
||||
prof.cons_show(f"Current window: {title}")
|
||||
"""
|
||||
|
||||
def get_current_muc() -> str | None:
|
||||
"""Retrieves the Jabber ID of the current chat room.
|
||||
|
||||
|
||||
@@ -121,11 +121,11 @@ esac
|
||||
case "$ARCH" in
|
||||
linux*)
|
||||
echo
|
||||
echo "--> Building with ./configure ${tests[0]} --enable-valgrind $*"
|
||||
echo "--> Building with ./configure -C ${tests[0]} --enable-valgrind $*"
|
||||
echo
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
./configure ${tests[0]} --enable-valgrind $*
|
||||
./configure -C ${tests[0]} --enable-valgrind $*
|
||||
|
||||
$MAKE CC="${CC}"
|
||||
if grep '^ID=' /etc/os-release | grep -q -e debian; then
|
||||
@@ -140,11 +140,11 @@ esac
|
||||
for features in "${tests[@]}"
|
||||
do
|
||||
echo
|
||||
echo "--> Building with ./configure ${features} $*"
|
||||
echo "--> Building with ./configure -C ${features} $*"
|
||||
echo
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
./configure $features $*
|
||||
./configure -C $features $*
|
||||
|
||||
$MAKE CC="${CC}"
|
||||
$MAKE check
|
||||
|
||||
@@ -54,7 +54,6 @@
|
||||
#include "plugins/settings.h"
|
||||
#include "plugins/disco.h"
|
||||
#include "ui/ui.h"
|
||||
#include "ui/win_types.h"
|
||||
#include "ui/window_list.h"
|
||||
#include "xmpp/roster_list.h"
|
||||
|
||||
@@ -206,13 +205,6 @@ api_get_current_recipient(void)
|
||||
}
|
||||
}
|
||||
|
||||
gchar*
|
||||
api_get_current_window(void)
|
||||
{
|
||||
ProfWin* current = wins_get_current();
|
||||
return win_get_title(current);
|
||||
}
|
||||
|
||||
char*
|
||||
api_get_current_muc(void)
|
||||
{
|
||||
|
||||
@@ -46,7 +46,6 @@ void api_notify(const char* message, const char* category, int timeout_ms);
|
||||
void api_send_line(char* line);
|
||||
|
||||
char* api_get_current_recipient(void);
|
||||
gchar* api_get_current_window(void);
|
||||
char* api_get_current_muc(void);
|
||||
gboolean api_current_win_is_console(void);
|
||||
char* api_get_current_nick(void);
|
||||
|
||||
@@ -165,12 +165,6 @@ c_api_get_current_recipient(void)
|
||||
return api_get_current_recipient();
|
||||
}
|
||||
|
||||
static char*
|
||||
c_api_get_current_window(void)
|
||||
{
|
||||
return api_get_current_window();
|
||||
}
|
||||
|
||||
static char*
|
||||
c_api_get_current_muc(void)
|
||||
{
|
||||
@@ -483,7 +477,6 @@ c_api_init(void)
|
||||
prof_notify = c_api_notify;
|
||||
prof_send_line = c_api_send_line;
|
||||
prof_get_current_recipient = c_api_get_current_recipient;
|
||||
prof_get_current_window = c_api_get_current_window;
|
||||
prof_get_current_muc = c_api_get_current_muc;
|
||||
prof_current_win_is_console = c_api_current_win_is_console;
|
||||
prof_get_current_nick = c_api_get_current_nick;
|
||||
|
||||
@@ -62,7 +62,6 @@ void (*prof_notify)(const char* message, int timeout_ms, const char* category) =
|
||||
void (*prof_send_line)(char* line) = NULL;
|
||||
|
||||
char* (*prof_get_current_recipient)(void) = NULL;
|
||||
char* (*prof_get_current_window)(void) = NULL;
|
||||
char* (*prof_get_current_muc)(void) = NULL;
|
||||
int (*prof_current_win_is_console)(void) = NULL;
|
||||
char* (*prof_get_current_nick)(void) = NULL;
|
||||
|
||||
@@ -71,7 +71,6 @@ void (*prof_notify)(const char* message, int timeout_ms, const char* category);
|
||||
void (*prof_send_line)(char* line);
|
||||
|
||||
char* (*prof_get_current_recipient)(void);
|
||||
char* (*prof_get_current_window)(void);
|
||||
char* (*prof_get_current_muc)(void);
|
||||
int (*prof_current_win_is_console)(void);
|
||||
char* (*prof_get_current_nick)(void);
|
||||
|
||||
@@ -415,15 +415,6 @@ python_api_get_current_recipient(PyObject* self, PyObject* args)
|
||||
}
|
||||
}
|
||||
|
||||
static PyObject*
|
||||
python_api_get_current_window(PyObject* self, PyObject* args)
|
||||
{
|
||||
allow_python_threads();
|
||||
auto_gchar gchar* recipient = api_get_current_window();
|
||||
disable_python_threads();
|
||||
return Py_BuildValue("s", recipient);
|
||||
}
|
||||
|
||||
static PyObject*
|
||||
python_api_get_current_muc(PyObject* self, PyObject* args)
|
||||
{
|
||||
@@ -1539,7 +1530,6 @@ static PyMethodDef apiMethods[] = {
|
||||
{ "send_line", python_api_send_line, METH_VARARGS, "Send a line of input." },
|
||||
{ "notify", python_api_notify, METH_VARARGS, "Send desktop notification." },
|
||||
{ "get_current_recipient", python_api_get_current_recipient, METH_VARARGS, "Return the jid of the recipient of the current window." },
|
||||
{ "get_current_window", python_api_get_current_window, METH_VARARGS, "Return title of the current window." },
|
||||
{ "get_current_muc", python_api_get_current_muc, METH_VARARGS, "Return the jid of the room of the current window." },
|
||||
{ "get_current_nick", python_api_get_current_nick, METH_VARARGS, "Return nickname in current room." },
|
||||
{ "get_name_from_roster", python_api_get_name_from_roster, METH_VARARGS, "Return nickname in roster of barejid." },
|
||||
|
||||
@@ -1,40 +1,36 @@
|
||||
/*
|
||||
* buffer.c
|
||||
* vim: expandtab:ts=4:sts=4:sw=4
|
||||
*
|
||||
* Message buffer implementation for CProof.
|
||||
*
|
||||
* This module provides an in-memory buffer for managing active chat entries in the
|
||||
* console-based XMPP client. Separate from persistent SQLite storage, it holds
|
||||
* messages and metadata solely for UI rendering, ensuring responsive scrolling and
|
||||
* display without exceeding ncurses pad limits (10k lines). By tracking rendered
|
||||
* line counts per entry, it proactively trims content to prevent overflow, enabling
|
||||
* seamless integration with ncurses for position-aware rendering.
|
||||
*
|
||||
* Key features and operations:
|
||||
* - Append/prepend entries (messages) with automatic line-based cleanup.
|
||||
* - Track cumulative lines for overflow prevention and efficient buffer sizing.
|
||||
* - Remove entries by ID or index; mark delivery receipts as received.
|
||||
* - Retrieve entries by index or ID for rendering and history queries.
|
||||
* - Store metadata including timestamps, senders, themes, and ncurses y-positions.
|
||||
*
|
||||
* CProof. Fork of Profanity (since 2025).
|
||||
*
|
||||
* Copyright (C) 2012 - 2019 James Booth <boothj5@gmail.com>
|
||||
* Copyright (C) 2019 - 2025 Michael Vetter <jubalh@iodoru.org>
|
||||
* Copyright (C) 2025 CProof Developers
|
||||
*
|
||||
* This file is part of Profanity.
|
||||
*
|
||||
* Profanity is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Profanity is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Profanity. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* In addition, as a special exception, the copyright holders give permission to
|
||||
* link the code of portions of this program with the OpenSSL library under
|
||||
* certain conditions as described in each individual source file, and
|
||||
* distribute linked combinations including the two.
|
||||
*
|
||||
* You must obey the GNU General Public License in all respects for all of the
|
||||
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||
* may extend this exception to your version of the file(s), but you are not
|
||||
* obligated to do so. If you do not wish to do so, delete this exception
|
||||
* statement from your version. If you delete this exception statement from all
|
||||
* source files in the program, then also delete it here.
|
||||
* Licensed under the GNU General Public License, version 3,
|
||||
* with the OpenSSL exception. See LICENSE for details.
|
||||
*
|
||||
* vim: expandtab:ts=4:sts=4:sw=4
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "ui/window_list.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -54,15 +50,8 @@
|
||||
#include "ui/window.h"
|
||||
#include "ui/buffer.h"
|
||||
|
||||
#define MAX_BUFFER_SIZE 200
|
||||
#define STRDUP_OR_NULL(str) ((str) ? strdup(str) : NULL)
|
||||
|
||||
struct prof_buff_t
|
||||
{
|
||||
GSList* entries;
|
||||
int lines;
|
||||
};
|
||||
|
||||
static void _free_entry(ProfBuffEntry* entry);
|
||||
static ProfBuffEntry* _create_entry(const char* show_char, int pad_indent, GDateTime* time, int flags, theme_item_t theme_item, const char* const display_from, const char* const from_jid, const char* const message, DeliveryReceipt* receipt, const char* const id, int y_start_pos, int y_end_pos);
|
||||
static void _buffer_add(ProfBuff buffer, const char* show_char, int pad_indent, GDateTime* time, int flags, theme_item_t theme_item, const char* const display_from, const char* const from_jid, const char* const message, DeliveryReceipt* receipt, const char* const id, int y_start_pos, int y_end_pos, gboolean append);
|
||||
@@ -108,23 +97,24 @@ _buffer_add(ProfBuff buffer, const char* show_char, int pad_indent, GDateTime* t
|
||||
|
||||
buffer->lines += e->_lines;
|
||||
|
||||
while (g_slist_length(buffer->entries) >= MAX_BUFFER_SIZE) {
|
||||
// With 10% margin to ensure overflow prevention
|
||||
while (buffer->lines >= PAD_SIZE - (PAD_SIZE / 10) && g_slist_length(buffer->entries) > 1) {
|
||||
// Delete message from the opposite size to free buffer
|
||||
GSList* buffer_entry_to_delete = append ? buffer->entries : g_slist_last(buffer->entries);
|
||||
ProfBuffEntry* entry_to_delete = (ProfBuffEntry*)buffer_entry_to_delete->data;
|
||||
// log_debug("(Messages left in buffer: %d) DELETING: %s", g_slist_length(buffer->entries), entry_to_delete->id);
|
||||
buffer->lines -= entry_to_delete->_lines;
|
||||
_free_entry(entry_to_delete);
|
||||
buffer->entries = g_slist_delete_link(buffer->entries, buffer_entry_to_delete);
|
||||
}
|
||||
|
||||
if (from_jid && y_end_pos == y_start_pos) {
|
||||
log_warning("Ncurses Overflow! From: %s, position: %d, ID: %s, append: %s, used message buffer size: %d, message buffer size: %d, rendered lines buffer size: %d",
|
||||
from_jid, y_start_pos, id, append ? "TRUE" : "FALSE", g_slist_length(buffer->entries), MAX_BUFFER_SIZE, PAD_SIZE);
|
||||
// At this point we have a message that caused overflow of the render buffer.
|
||||
// Ideally, we want to clean other messages to rerender everything properly. To do so,
|
||||
// first we need to determine the size of the message that we are trying to display,
|
||||
// then we need to print the message.
|
||||
// However, _buffer_add is too late in the code to do this, therefore it has to be done in the win_print_old_history.
|
||||
// win_redraw will redraw with entries above removed,
|
||||
// it will also recalculate actual size of the message that caused overflow
|
||||
int old_lines = buffer->lines;
|
||||
win_redraw(wins_get_current());
|
||||
log_debug("Ncurses Overflow! From: %s, position: %d, ID: %s, append: %s, used message buffer size: %d, rendered lines: (old: %d/ actual: %d/ max: %d)",
|
||||
from_jid, y_start_pos, id, append ? "TRUE" : "FALSE", g_slist_length(buffer->entries), old_lines, buffer->lines, PAD_SIZE);
|
||||
}
|
||||
|
||||
buffer->entries = append ? g_slist_append(buffer->entries, e) : g_slist_prepend(buffer->entries, e);
|
||||
|
||||
@@ -68,6 +68,12 @@ typedef struct prof_buff_entry_t
|
||||
char* id;
|
||||
} ProfBuffEntry;
|
||||
|
||||
struct prof_buff_t
|
||||
{
|
||||
GSList* entries;
|
||||
int lines;
|
||||
};
|
||||
|
||||
typedef struct prof_buff_t* ProfBuff;
|
||||
|
||||
ProfBuff buffer_create();
|
||||
|
||||
@@ -2003,6 +2003,10 @@ win_redraw(ProfWin* window)
|
||||
_win_print_internal(window, e->show_char, e->pad_indent, e->time, e->flags, e->theme_item, e->display_from, e->message, e->receipt);
|
||||
}
|
||||
e->y_end_pos = getcury(window->layout->win);
|
||||
// Recalculate lines (might be incorrect in case of NCurses overflow)
|
||||
window->layout->buffer->lines -= e->_lines;
|
||||
e->_lines = e->y_end_pos - e->y_start_pos;
|
||||
window->layout->buffer->lines += e->_lines;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user