Merge branch 'hexchat-plugin-server-tags' of github.com:DasBrain/hexchat into hexchat-plugin-server-tags

This commit is contained in:
DasBrain 2021-05-24 08:00:06 +02:00
commit 084914ca54
42 changed files with 409 additions and 157 deletions

View File

@ -5,7 +5,7 @@ jobs:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v2
with:
fetch-depth: 1

74
.github/workflows/windows-build.yml vendored Normal file
View File

@ -0,0 +1,74 @@
name: Windows Build
on: [push, pull_request]
jobs:
build:
runs-on: windows-2019
strategy:
matrix:
platform: [x64, win32]
arch: [x64, x86]
exclude:
- platform: x64
arch: x86
- platform: win32
arch: x64
fail-fast: false
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- name: Install Dependencies
run: |
New-Item -Name "deps" -ItemType "Directory"
Invoke-WebRequest http://files.jrsoftware.org/is/5/innosetup-5.5.9-unicode.exe -OutFile deps\innosetup-unicode.exe
& deps\innosetup-unicode.exe /VERYSILENT | Out-Null
Invoke-WebRequest https://dl.hexchat.net/misc/idpsetup-1.5.1.exe -OutFile deps\idpsetup.exe
& deps\idpsetup.exe /VERYSILENT
Invoke-WebRequest https://dl.hexchat.net/gtk/gtk-${{ matrix.platform }}-2018-08-29.7z -OutFile deps\gtk-${{ matrix.arch }}.7z
& 7z.exe x deps\gtk-${{ matrix.arch }}.7z -oC:\gtk-build\gtk
Invoke-WebRequest https://dl.hexchat.net/gtk-win32/gendef-20111031.7z -OutFile deps\gendef.7z
& 7z.exe x deps\gendef.7z -oC:\gtk-build
Invoke-WebRequest https://dl.hexchat.net/gtk-win32/WinSparkle-20151011.7z -OutFile deps\WinSparkle.7z
& 7z.exe x deps\WinSparkle.7z -oC:\gtk-build\WinSparkle
Invoke-WebRequest https://dl.hexchat.net/misc/perl/perl-5.20.0-${{ matrix.arch }}.7z -OutFile deps\perl-${{ matrix.arch }}.7z
& 7z.exe x deps\perl-${{ matrix.arch }}.7z -oC:\gtk-build\perl-5.20\${{ matrix.platform }}
New-Item -Path "c:\gtk-build" -Name "python-2.7" -ItemType "Directory"
New-Item -Path "c:\gtk-build" -Name "python-3.6" -ItemType "Directory"
New-Item -Path "c:\gtk-build\python-2.7" -Name "${{ matrix.platform }}" -ItemType "SymbolicLink" -Value "C:/hostedtoolcache/windows/Python/2.7.18/${{ matrix.arch }}"
New-Item -Path "c:\gtk-build\python-3.6" -Name "${{ matrix.platform }}" -ItemType "SymbolicLink" -Value "C:/hostedtoolcache/windows/Python/3.6.8/${{ matrix.arch }}"
C:/hostedtoolcache/windows/Python/3.6.8/${{ matrix.arch }}/python.exe -m pip install cffi
C:/hostedtoolcache/windows/Python/2.7.18/${{ matrix.arch }}/python.exe -m pip install -qq cffi
shell: powershell
- name: Build
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat"
msbuild win32\hexchat.sln /m /verbosity:minimal /p:Configuration=Release /p:Platform=${{ matrix.platform }}
shell: cmd
- name: Preparing Artifacts
run: |
move ..\hexchat-build\${{ matrix.platform }}\HexChat*.exe .\
move ..\hexchat-build .\
shell: cmd
- uses: actions/upload-artifact@v2-preview
with:
name: Installer
path: HexChat*.exe
- uses: actions/upload-artifact@v2-preview
with:
name: Build
path: hexchat-build

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>DynamicLibrary</ConfigurationType>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>DynamicLibrary</ConfigurationType>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>DynamicLibrary</ConfigurationType>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>DynamicLibrary</ConfigurationType>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>DynamicLibrary</ConfigurationType>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>DynamicLibrary</ConfigurationType>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>DynamicLibrary</ConfigurationType>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>DynamicLibrary</ConfigurationType>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>DynamicLibrary</ConfigurationType>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">

View File

@ -58,6 +58,7 @@ typedef struct
static const channel_options chanopt[] =
{
{"alert_balloon", NULL, S_F(alert_balloon)},
{"alert_beep", "BEEP", S_F(alert_beep)},
{"alert_taskbar", NULL, S_F(alert_taskbar)},
{"alert_tray", "TRAY", S_F(alert_tray)},
@ -182,6 +183,7 @@ typedef struct
{
/* Per-Channel Alerts */
/* use a byte, because we need a pointer to each element */
guint8 alert_balloon;
guint8 alert_beep;
guint8 alert_taskbar;
guint8 alert_tray;

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>StaticLibrary</ConfigurationType>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">

View File

@ -493,6 +493,7 @@ session_new (server *serv, char *from, int type, int focus)
sess->logfd = -1;
sess->type = type;
sess->alert_balloon = SET_DEFAULT;
sess->alert_beep = SET_DEFAULT;
sess->alert_taskbar = SET_DEFAULT;
sess->alert_tray = SET_DEFAULT;

View File

@ -363,6 +363,7 @@ typedef struct session
{
/* Per-Channel Alerts */
/* use a byte, because we need a pointer to each element */
guint8 alert_balloon;
guint8 alert_beep;
guint8 alert_taskbar;
guint8 alert_tray;
@ -569,6 +570,7 @@ typedef struct server
unsigned int have_idmsg:1; /* freenode's IDENTIFY-MSG */
unsigned int have_accnotify:1; /* cap account-notify */
unsigned int have_extjoin:1; /* cap extended-join */
unsigned int have_account_tag:1; /* cap account-tag */
unsigned int have_server_time:1; /* cap server-time */
unsigned int have_sasl:1; /* SASL capability */
unsigned int have_except:1; /* ban exemptions +e */

View File

@ -1671,6 +1671,8 @@ inbound_toggle_caps (server *serv, const char *extensions_str, gboolean enable)
serv->have_server_time = enable;
else if (!strcmp (extension, "away-notify"))
serv->have_awaynotify = enable;
else if (!strcmp (extension, "account-tag"))
serv->have_account_tag = enable;
else if (!strcmp (extension, "sasl"))
{
serv->have_sasl = enable;
@ -1724,6 +1726,9 @@ static const char * const supported_caps[] = {
"userhost-in-names",
"cap-notify",
"chghost",
"setname",
"invite-notify",
"account-tag",
/* ZNC */
"znc.in/server-time-iso",

View File

@ -115,6 +115,34 @@ enum
HOOK_DELETED = 1 << 7 /* marked for deletion */
};
enum
{
CHANNEL_FLAG_CONNECTED = 1 << 0,
CHANNEL_FLAG_CONNECING = 1 << 1,
CHANNEL_FLAG_AWAY = 1 << 2,
CHANNEL_FLAG_END_OF_MOTD = 1 << 3,
CHANNEL_FLAG_HAS_WHOX = 1 << 4,
CHANNEL_FLAG_HAS_IDMSG = 1 << 5,
CHANNEL_FLAG_HIDE_JOIN_PARTS = 1 << 6,
CHANNEL_FLAG_HIDE_JOIN_PARTS_UNSET = 1 << 7,
CHANNEL_FLAG_BEEP = 1 << 8,
CHANNEL_FLAG_BEEP_UNSET = 1 << 9,
CHANNEL_FLAG_UNUSED = 1 << 10,
CHANNEL_FLAG_LOGGING = 1 << 11,
CHANNEL_FLAG_LOGGING_UNSET = 1 << 12,
CHANNEL_FLAG_SCROLLBACK = 1 << 13,
CHANNEL_FLAG_SCROLLBACK_UNSET = 1 << 14,
CHANNEL_FLAG_STRIP_COLORS = 1 << 15,
CHANNEL_FLAG_STRIP_COLORS_UNSET = 1 << 16,
CHANNEL_FLAG_TRAY = 1 << 17,
CHANNEL_FLAG_TRAY_UNSET = 1 << 18,
CHANNEL_FLAG_TASKBAR = 1 << 19,
CHANNEL_FLAG_TASKBAR_UNSET = 1 << 20,
CHANNEL_FLAG_BALLOON = 1 << 21,
CHANNEL_FLAG_BALLOON_UNSET = 1 << 22,
CHANNEL_FLAG_COUNT = 23
};
GSList *plugin_list = NULL; /* export for plugingui.c */
static GSList *hook_list = NULL;
@ -1522,7 +1550,11 @@ hexchat_list_int (hexchat_plugin *ph, hexchat_list *xlist, const char *name)
{
guint32 hash = str_hash (name);
gpointer data = ph->context;
int tmp = 0;
int channel_flag;
int channel_flags[CHANNEL_FLAG_COUNT];
int channel_flags_used = 0;
int type = LIST_CHANNELS;
/* a NULL xlist is a shortcut to current "channels" context */
@ -1583,48 +1615,38 @@ hexchat_list_int (hexchat_plugin *ph, hexchat_list *xlist, const char *name)
case 0xd1b: /* id */
return ((struct session *)data)->server->id;
case 0x5cfee87: /* flags */
/* used if alert_taskbar is unset */ /* 20 */
tmp <<= 1;
tmp |= ((struct session *)data)->alert_taskbar; /* 19 */
tmp <<= 1;
/* used if alert_tray is unset */ /* 18 */
tmp <<= 1;
tmp |= ((struct session *)data)->alert_tray; /* 17 */
tmp <<= 1;
/* used if text_strip is unset */ /* 16 */
tmp <<= 1;
tmp |= ((struct session *)data)->text_strip; /* 15 */
tmp <<= 1;
/* used if text_scrollback is unset */ /* 14 */
tmp <<= 1;
tmp |= ((struct session *)data)->text_scrollback; /* 13 */
tmp <<= 1;
/* used if text_logging is unset */ /* 12 */
tmp <<= 1;
tmp |= ((struct session *)data)->text_logging; /* 11 */
tmp <<= 1;
/* unused for historical reasons */ /* 10 */
tmp <<= 1;
/* used if alert_beep is unset */ /* 9 */
tmp <<= 1;
tmp |= ((struct session *)data)->alert_beep; /* 8 */
tmp <<= 1;
/* used if text_hidejoinpart is unset */ /* 7 */
tmp <<= 1;
tmp |= ((struct session *)data)->text_hidejoinpart; /* 6 */
tmp <<= 1;
tmp |= ((struct session *)data)->server->have_idmsg; /* 5 */
tmp <<= 1;
tmp |= ((struct session *)data)->server->have_whox; /* 4 */
tmp <<= 1;
tmp |= ((struct session *)data)->server->end_of_motd;/* 3 */
tmp <<= 1;
tmp |= ((struct session *)data)->server->is_away; /* 2 */
tmp <<= 1;
tmp |= ((struct session *)data)->server->connecting; /* 1 */
tmp <<= 1;
tmp |= ((struct session *)data)->server->connected; /* 0 */
return tmp;
channel_flags[0] = ((struct session *)data)->server->connected;
channel_flags[1] = ((struct session *)data)->server->connecting;
channel_flags[2] = ((struct session *)data)->server->is_away;
channel_flags[3] = ((struct session *)data)->server->end_of_motd;
channel_flags[4] = ((struct session *)data)->server->have_whox;
channel_flags[5] = ((struct session *)data)->server->have_idmsg;
channel_flags[6] = ((struct session *)data)->text_hidejoinpart;
channel_flags[7] = ((struct session *)data)->text_hidejoinpart == SET_DEFAULT;
channel_flags[8] = ((struct session *)data)->alert_beep;
channel_flags[9] = ((struct session *)data)->alert_beep == SET_DEFAULT;
channel_flags[10] = 0; /* unused for historical reasons */
channel_flags[11] = ((struct session *)data)->text_logging;
channel_flags[12] = ((struct session *)data)->text_logging == SET_DEFAULT;
channel_flags[13] = ((struct session *)data)->text_scrollback;
channel_flags[14] = ((struct session *)data)->text_scrollback == SET_DEFAULT;
channel_flags[15] = ((struct session *)data)->text_strip;
channel_flags[16] = ((struct session *)data)->text_strip == SET_DEFAULT;
channel_flags[17] = ((struct session *)data)->alert_tray;
channel_flags[18] = ((struct session *)data)->alert_tray == SET_DEFAULT;
channel_flags[19] = ((struct session *)data)->alert_taskbar;
channel_flags[20] = ((struct session *)data)->alert_taskbar == SET_DEFAULT;
channel_flags[21] = ((struct session *)data)->alert_balloon;
channel_flags[22] = ((struct session *)data)->alert_balloon == SET_DEFAULT;
/* Set flags */
for (channel_flag = 0; channel_flag < CHANNEL_FLAG_COUNT; ++channel_flag) {
if (channel_flags[channel_flag]) {
channel_flags_used |= 1 << channel_flag;
}
}
return channel_flags_used;
case 0x1a192: /* lag */
return ((struct session *)data)->server->lag;
case 0x1916144c: /* maxmodes */

View File

@ -1010,6 +1010,7 @@ process_named_msg (session *sess, char *type, char *word[], char *word_eol[],
const message_tags_data *tags_data)
{
server *serv = sess->server;
char *account;
char ip[128], nick[NICKLEN];
char *text, *ex;
int len = strlen (type);
@ -1028,6 +1029,14 @@ process_named_msg (session *sess, char *type, char *word[], char *word_eol[],
ex[0] = '!';
}
/** Update the account for this message's source. */
if (serv->have_account_tag)
{
account = tags_data->account && *tags_data->account ? tags_data->account : "*";
inbound_account (serv, nick, account, tags_data);
}
if (len == 4)
{
guint32 t;
@ -1157,16 +1166,22 @@ process_named_msg (session *sess, char *type, char *word[], char *word_eol[],
NULL, 0xff, tags_data);
return;
case WORDL('S', 'E', 'T', 'N'):
inbound_user_info (sess, NULL, NULL, NULL, NULL, nick, STRIP_COLON(word, word_eol, 3),
NULL, 0xff, tags_data);
return;
case WORDL('I','N','V','I'):
if (ignore_check (word[1], IG_INVI))
return;
if (word[4][0] == ':')
EMIT_SIGNAL_TIMESTAMP (XP_TE_INVITED, sess, word[4] + 1, nick,
serv->servername, NULL, 0,
text = STRIP_COLON(word, word_eol, 4);
if (serv->p_cmp (word[3], serv->nick))
EMIT_SIGNAL_TIMESTAMP (XP_TE_INVITEDOTHER, sess, text, nick,
word[3], serv->servername, 0,
tags_data->timestamp);
else
EMIT_SIGNAL_TIMESTAMP (XP_TE_INVITED, sess, word[4], nick,
EMIT_SIGNAL_TIMESTAMP (XP_TE_INVITED, sess, text, nick,
serv->servername, NULL, 0,
tags_data->timestamp);
@ -1244,10 +1259,13 @@ process_named_msg (session *sess, char *type, char *word[], char *word_eol[],
text++;
}
len = strlen (text);
if (text[0] == 1 && text[len - 1] == 1) /* ctcp */
if (text[0] == 1) /* ctcp */
{
char *new_pdibuf = NULL;
text[len - 1] = 0;
if (text[len - 1] == 1)
{
text[len - 1] = 0;
}
text++;
if (g_ascii_strncasecmp (text, "ACTION", 6) != 0)
flood_check (nick, ip, serv, sess, 0);
@ -1516,6 +1534,9 @@ handle_message_tags (server *serv, const char *tags_str,
*value = '\0';
value++;
if (serv->have_account_tag && !strcmp (key, "account"))
tags_data->account = g_strdup (value);
if (serv->have_server_time && !strcmp (key, "time"))
handle_message_tag_time (value, tags_data);
}
@ -1614,9 +1635,16 @@ irc_inline (server *serv, char *buf, int len)
}
xit:
message_tags_data_free (&tags_data);
g_free (pdibuf);
}
void
message_tags_data_free (message_tags_data *tags_data)
{
g_clear_pointer (&tags_data->account, g_free);
}
void
proto_fill_her_up (server *serv)
{

View File

@ -25,6 +25,7 @@
#define MESSAGE_TAGS_DATA_INIT \
{ \
NULL, /* account name */ \
(time_t)0, /* timestamp */ \
}
@ -36,9 +37,12 @@
*/
typedef struct
{
char *account;
time_t timestamp;
} message_tags_data;
void message_tags_data_free (message_tags_data *tags_data);
void proto_fill_her_up (server *serv);
#endif

View File

@ -1784,6 +1784,7 @@ server_set_defaults (server *serv)
serv->have_idmsg = FALSE;
serv->have_accnotify = FALSE;
serv->have_extjoin = FALSE;
serv->have_account_tag = FALSE;
serv->have_server_time = FALSE;
serv->have_sasl = FALSE;
serv->have_except = FALSE;

View File

@ -198,6 +198,7 @@ static const struct defaultserver def[] =
#ifdef USE_OPENSSL
{"hackint", 0, 0, 0, LOGIN_SASL, 0, TRUE},
{0, "irc.hackint.org"},
{0, "irc.eu.hackint.org"},
#endif
{"Hashmark", 0},
@ -235,11 +236,16 @@ static const struct defaultserver def[] =
{"Krstarica", 0},
{0, "irc.krstarica.com"},
#ifdef USE_OPENSSL
{"LibertaCasa", 0, 0, 0, LOGIN_SASL, 0, TRUE},
{0, "irc.liberta.casa"},
#endif
{"LibraIRC", 0},
/* Self signed */
{0, "irc.librairc.net"},
{"Libera Chat", 0, 0, 0, LOGIN_SASL, 0, TRUE},
{"Libera.Chat", 0, 0, 0, LOGIN_SASL, 0, TRUE},
{0, "irc.libera.chat"},
#ifdef USE_OPENSSL
@ -277,9 +283,12 @@ static const struct defaultserver def[] =
{0, "irc.ponychat.net"},
{"PTNet.org", 0},
/* Note that the network suggests ISO-8859-1 but most users ignore this */
{0, "irc.ptnet.org"},
{0, "uevora.ptnet.org"},
{0, "vianetworks.ptnet.org"},
{0, "claranet.ptnet.org"},
{0, "sonaquela.ptnet.org"},
{0, "uc.ptnet.org"},
{0, "ipg.ptnet.org"},
{"QuakeNet", 0, 0, 0, LOGIN_CHALLENGEAUTH},
{0, "irc.quakenet.org"},
@ -303,6 +312,9 @@ static const struct defaultserver def[] =
{"Serenity-IRC", 0},
{0, "irc.serenity-irc.net"},
{"SimosNap", 0, 0, 0, LOGIN_SASL, 0, TRUE},
{0, "irc.simosnap.com"},
{"SlashNET", 0},
/* Self signed */
{0, "irc.slashnet.org"},
@ -348,6 +360,14 @@ static const struct defaultserver def[] =
{"tilde.chat", 0, 0, 0, LOGIN_SASL, 0, TRUE},
{0, "irc.tilde.chat"},
#ifdef USE_OPENSSL
{"TripSit", 0, 0, 0, LOGIN_SASL, 0, TRUE},
{0, "irc.tripsit.me"},
{0, "newirc.tripsit.me"},
{0, "coconut.tripsit.me"},
{0, "innsbruck.tripsit.me"},
#endif
{"TURLINet", 0, 0, 0, 0, 0, TRUE},
/* Other servers use CP1251 and invalid certs */
{0, "irc.servx.ru"},
@ -365,6 +385,9 @@ static const struct defaultserver def[] =
{"Xertion", 0, 0, 0, LOGIN_SASL, 0, TRUE},
{0, "irc.xertion.org"},
{"DeltaPool", 0, 0, 0, LOGIN_SASL, 0, TRUE},
{0, "irc.deltapool.net"},
{0,0}
};
@ -935,7 +958,7 @@ servlist_load_defaults (void)
{
int i = 0, j = 0;
ircnet *net = NULL;
guint def_hash = g_str_hash ("freenode");
guint def_hash = g_str_hash ("Libera.Chat");
while (1)
{

View File

@ -1295,6 +1295,13 @@ static char * const pevt_invited_help[] = {
N_("Server Name"),
};
static char * const pevt_invitedother_help[] = {
N_("Channel Name"),
N_("Nick of person who sent the invite"),
N_("Nick of person who was invited"),
N_("Server Name"),
};
static char * const pevt_usersonchan_help[] = {
N_("Channel Name"),
N_("Users"),

View File

@ -496,6 +496,12 @@ pevt_invited_help
%C24*%O$tYou have been invited to %C22$1%O by %C18$2%O (%C29$3%O)
3
Invited Other
XP_TE_INVITEDOTHER
pevt_invitedother_help
%C24*%O$t%C26$3%C has been invited to %C22$1%O by %C18$2%O (%C29$4%O)
4
Join
XP_TE_JOIN
pevt_join_help

View File

@ -101,13 +101,15 @@ userlist_set_account (struct session *sess, char *nick, char *account)
user = userlist_find (sess, nick);
if (user)
{
g_free (user->account);
if (strcmp (account, "*") == 0)
user->account = NULL;
else
{
g_clear_pointer (&user->account, g_free);
} else if (g_strcmp0 (user->account, account))
{
g_free (user->account);
user->account = g_strdup (account);
}
/* gui doesnt currently reflect login status, maybe later
fe_userlist_rehash (sess, user); */
}
@ -130,8 +132,11 @@ userlist_add_hostname (struct session *sess, char *nick, char *hostname,
g_free (user->hostname);
user->hostname = g_strdup (hostname);
}
if (!user->realname && realname && *realname)
if (realname && *realname && g_strcmp0 (user->realname, realname) != 0)
{
g_free (user->realname);
user->realname = g_strdup (realname);
}
if (!user->servername && servername)
user->servername = g_strdup (servername);
if (!user->account && account && strcmp (account, "0") != 0)

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>Application</ConfigurationType>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">

View File

@ -247,7 +247,7 @@ joind_show_dialog (server *serv)
G_CALLBACK (joind_ok_cb), serv);
if (serv->network)
if (g_ascii_strcasecmp(((ircnet*)serv->network)->name, "freenode") == 0)
if (g_ascii_strcasecmp(((ircnet*)serv->network)->name, "Libera.Chat") == 0)
{
gtk_entry_set_text (GTK_ENTRY (entry1), "#hexchat");
}

View File

@ -1520,14 +1520,32 @@ static void
mg_create_alertmenu (session *sess, GtkWidget *menu)
{
GtkWidget *submenu;
int hex_balloon, hex_beep, hex_tray, hex_flash;
submenu = menu_quick_sub (_("_Extra Alerts"), menu, NULL, XCMENU_MNEMONIC, -1);
mg_perchan_menu_item (_("Beep on _Message"), submenu, &sess->alert_beep, prefs.hex_input_beep_chans);
switch (sess->type) {
case SESS_DIALOG:
hex_balloon = prefs.hex_input_balloon_priv;
hex_beep = prefs.hex_input_beep_priv;
hex_tray = prefs.hex_input_tray_priv;
hex_flash = prefs.hex_input_flash_priv;
break;
default:
hex_balloon = prefs.hex_input_balloon_chans;
hex_beep = prefs.hex_input_beep_chans;
hex_tray = prefs.hex_input_tray_chans;
hex_flash = prefs.hex_input_flash_chans;
}
mg_perchan_menu_item (_("Blink Tray _Icon"), submenu, &sess->alert_tray, prefs.hex_input_tray_chans);
submenu = menu_quick_sub(_("_Extra Alerts"), menu, NULL, XCMENU_MNEMONIC, -1);
mg_perchan_menu_item (_("Blink Task _Bar"), submenu, &sess->alert_taskbar, prefs.hex_input_flash_chans);
mg_perchan_menu_item(_("Show Notifications"), submenu, &sess->alert_balloon, hex_balloon);
mg_perchan_menu_item(_("Beep on _Message"), submenu, &sess->alert_beep, hex_beep);
mg_perchan_menu_item(_("Blink Tray _Icon"), submenu, &sess->alert_tray, hex_tray);
mg_perchan_menu_item(_("Blink Task _Bar"), submenu, &sess->alert_taskbar, hex_flash);
}
static void

View File

@ -1,62 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClCompile Include="notification-winrt.cpp">
<CompileAsWinRT>true</CompileAsWinRT>
</ClCompile>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{C53145CC-D021-40C9-B97C-0249AB9A43C9}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>notifications-winrt</RootNamespace>
<ProjectName>notifications-winrt</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\win32\hexchat.props" />
<PropertyGroup>
<TargetName>hcnotifications-winrt</TargetName>
<OutDir>$(HexChatRel)plugins\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY;_CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_MEMORY;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT;NDEBUG;_WINDOWS;_USRDLL;NOTIFICATIONS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalUsingDirectories>$(VCInstallDir)vcpackages;$(FrameworkSdkDir)References\CommonConfiguration\Neutral;%(AdditionalUsingDirectories)</AdditionalUsingDirectories>
</ClCompile>
<Link>
<AdditionalDependencies>$(DepLibs);mincore.lib;runtimeobject.lib;%(AdditionalDependencies)</AdditionalDependencies>
<MinimumRequiredVersion>6.03</MinimumRequiredVersion>
<AdditionalLibraryDirectories>$(DepsRoot)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY;_CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_MEMORY;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT;NDEBUG;_WINDOWS;_USRDLL;NOTIFICATIONS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalUsingDirectories>$(VCInstallDir)vcpackages;$(FrameworkSdkDir)References\CommonConfiguration\Neutral;%(AdditionalUsingDirectories)</AdditionalUsingDirectories>
</ClCompile>
<Link>
<AdditionalDependencies>$(DepLibs);mincore.lib;runtimeobject.lib;%(AdditionalDependencies)</AdditionalDependencies>
<MinimumRequiredVersion>6.03</MinimumRequiredVersion>
<AdditionalLibraryDirectories>$(DepsRoot)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
</Project>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClCompile Include="notification-winrt.cpp">
<CompileAsWinRT>true</CompileAsWinRT>
</ClCompile>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{C53145CC-D021-40C9-B97C-0249AB9A43C9}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>notifications-winrt</RootNamespace>
<ProjectName>notifications-winrt</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration">
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\win32\hexchat.props" />
<PropertyGroup>
<TargetName>hcnotifications-winrt</TargetName>
<OutDir>$(HexChatRel)plugins\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY;_CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_MEMORY;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT;NDEBUG;_WINDOWS;_USRDLL;NOTIFICATIONS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalUsingDirectories>$(VC_LibraryPath_VC_x86_Store)\references;$(WindowsSDK_UnionMetadataPath);$(VCInstallDir)vcpackages;$(FrameworkSdkDir)References\CommonConfiguration\Neutral;%(AdditionalUsingDirectories)</AdditionalUsingDirectories>
<CompileAsWinRT>true</CompileAsWinRT>
</ClCompile>
<Link>
<AdditionalDependencies>$(DepLibs);mincore.lib;runtimeobject.lib;%(AdditionalDependencies)</AdditionalDependencies>
<MinimumRequiredVersion>6.03</MinimumRequiredVersion>
<AdditionalLibraryDirectories>$(DepsRoot)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY;_CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_MEMORY;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT;NDEBUG;_WINDOWS;_USRDLL;NOTIFICATIONS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalUsingDirectories>$(VC_LibraryPath_VC_x86_Store)\references;$(WindowsSDK_UnionMetadataPath);$(VCInstallDir)vcpackages;$(FrameworkSdkDir)References\CommonConfiguration\Neutral;%(AdditionalUsingDirectories)</AdditionalUsingDirectories>
<CompileAsWinRT>true</CompileAsWinRT>
</ClCompile>
<Link>
<AdditionalDependencies>$(DepLibs);mincore.lib;runtimeobject.lib;%(AdditionalDependencies)</AdditionalDependencies>
<MinimumRequiredVersion>6.03</MinimumRequiredVersion>
<AdditionalLibraryDirectories>$(DepsRoot)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
</Project>

View File

@ -89,7 +89,9 @@ pixmap_load_from_file (char *filename)
static GdkPixbuf *
load_pixmap (const char *filename)
{
GdkPixbuf *pixbuf;
GdkPixbuf *pixbuf, *scaledpixbuf;
const char *scale;
int iscale;
gchar *path = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "icons" G_DIR_SEPARATOR_S "%s.png", get_xdir (), filename);
pixbuf = gdk_pixbuf_new_from_file (path, 0);
@ -102,6 +104,24 @@ load_pixmap (const char *filename)
g_free (path);
}
// Hack to avoid unbearably tiny icons on HiDPI screens.
scale = g_getenv ("GDK_SCALE");
if (scale)
{
iscale = atoi (scale);
if (iscale > 0)
{
scaledpixbuf = gdk_pixbuf_scale_simple (pixbuf, gdk_pixbuf_get_width (pixbuf) * iscale,
gdk_pixbuf_get_height (pixbuf) * iscale, GDK_INTERP_BILINEAR);
if (scaledpixbuf)
{
g_object_unref (pixbuf);
pixbuf = scaledpixbuf;
}
}
}
g_warn_if_fail (pixbuf != NULL);
return pixbuf;

View File

@ -25,6 +25,9 @@
static hexchat_plugin *ph;
const int CHANNEL_FLAG_BALLOON = 1 << 21;
const int CHANNEL_FLAG_BALLOON_UNSET = 1 << 22;
static gboolean
should_alert (void)
{
@ -117,10 +120,24 @@ static int
incoming_message_cb (char *word[], gpointer userdata)
{
int message;
int flags;
int alert = 0;
if (hexchat_get_prefs (ph, "input_balloon_chans", NULL, &message) == 3 && message && should_alert ())
{
show_notificationf (word[2], _("Channel message from: %s (%s)"), word[1], hexchat_get_info (ph, "channel"));
flags = hexchat_list_int(ph, NULL, "flags");
/* Let sure that can alert */
if (should_alert()) {
/* Follow the channel rules if set */
if (!(flags & CHANNEL_FLAG_BALLOON_UNSET)) {
alert = (flags & CHANNEL_FLAG_BALLOON);
} else {
/* Else follow global environment */
alert = (hexchat_get_prefs(ph, "input_balloon_chans", NULL, &message) == 3 && message);
}
}
if (alert) {
show_notificationf(word[2], _("Channel message from: %s (%s)"), word[1], hexchat_get_info(ph, "channel"));
}
return HEXCHAT_EAT_NONE;
}
@ -129,8 +146,23 @@ static int
incoming_priv_cb (char *word[], gpointer userdata)
{
int priv;
int flags;
int alert = 0;
if (hexchat_get_prefs (ph, "input_balloon_priv", NULL, &priv) == 3 && priv && should_alert ())
flags = hexchat_list_int(ph, NULL, "flags");
/* Let sure that can alert */
if (should_alert()) {
/* Follow the private rules if set */
if (!(flags & CHANNEL_FLAG_BALLOON_UNSET)) {
alert = (flags & CHANNEL_FLAG_BALLOON);
} else {
/* Else follow global environment */
alert = (hexchat_get_prefs(ph, "input_balloon_priv", NULL, &priv) == 3 && priv);
}
}
if (alert)
{
const char *network = hexchat_get_info (ph, "network");
if (!network)

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>Application</ConfigurationType>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">

View File

@ -19,7 +19,7 @@ namespace thememan.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {

View File

@ -12,7 +12,7 @@ namespace thememan.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

View File

@ -1,3 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/></startup></configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/></startup></configuration>

View File

@ -12,7 +12,7 @@
<AssemblyName>thememan</AssemblyName>
<FileAlignment>512</FileAlignment>
<IsWebBootstrapper>false</IsWebBootstrapper>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<PublishUrl>publish\</PublishUrl>

View File

@ -19,7 +19,7 @@
<PropertyGroup Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<Import Project="..\..\win32\hexchat.props" />

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>Application</ConfigurationType>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">

View File

@ -41,7 +41,7 @@
<HexChatLib>$(HexChatBuild)\$(PlatformName)\lib\</HexChatLib>
<HexChatPdb>$(HexChatBuild)\$(PlatformName)\pdb\</HexChatPdb>
<HexChatRel>$(HexChatBuild)\$(PlatformName)\rel\</HexChatRel>
<IsccPath>"$(MSBuildExtensionsPath32)\..\Inno Setup 5\iscc.exe"</IsccPath>
<IsccPath>"$(ProgramFiles)\Inno Setup 5\iscc.exe"</IsccPath>
</PropertyGroup>
<PropertyGroup>

View File

@ -31,9 +31,9 @@ Compression=lzma2/ultra64
SourceDir=..\rel
OutputDir=..
#if APPARCH == "x64"
OutputBaseFilename={#APPNAM} {#APPVER} x64
OutputBaseFilename={#APPNAM}-{#APPVER}_x64
#else
OutputBaseFilename={#APPNAM} {#APPVER} x86
OutputBaseFilename={#APPNAM}-{#APPVER}_x86
#endif
FlatComponentsList=no
PrivilegesRequired=none

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>Application</ConfigurationType>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v142</PlatformToolset>
<ConfigurationType>Application</ConfigurationType>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">