Fri, 19 Aug 2022 00:27:38 -0500
Implement notifications in Finch
This includes an Notifications item in the action list that opens the
notifcations list. The notifications list shows the title of each notification
and allows the user to open the notification and interact with it.
Testing Done:
Created some accounts that couldn't connect to make their connection errors show up as notifications.
Reviewed at https://reviews.imfreedom.org/r/1602/
enable_consoleui = false if get_option('consoleui') libgnt_dep = dependency('gnt3', version : '>= 3.0.0', fallback : ['libgnt', 'libgnt_dep']) ####################################################################### # Check for ncurses and other things used by it # FIXME: This should be temporary until libgnt wraps the functionality. ####################################################################### ncurses_available = true ncurses_header = 'ncurses.h' # Some distros put the headers in ncursesw/, some don't. These are ordered to # pick the last available as most-specific version. ncursesw_header_paths = ['', 'ncursesw/'] ncurses = dependency('ncursesw', required : false) if ncurses.found() foreach location : ncursesw_header_paths f = location / 'ncurses.h' if compiler.has_header_symbol(f, 'get_wch', prefix : '#define _XOPEN_SOURCE_EXTENDED') ncurses_header = f endif endforeach else ncurses_available = false ncurses_inc = [] ncurses_libs = compiler.find_library('ncursesw', required : false) if ncurses_libs.found() foreach location : ncursesw_header_paths f = location / 'ncurses.h' if compiler.has_header_symbol(f, 'get_wch', prefix : '#define _XOPEN_SOURCE_EXTENDED') ncurses_available = true ncurses_header = f endif endforeach if ncurses_available ncurses = declare_dependency( include_directories : ncurses_inc, dependencies : ncurses_libs ) endif endif endif if not ncurses_available # ncursesw was not found. Look for plain old ncurses ncurses = dependency('ncurses', required : false) if ncurses.found() ncurses_available = true else ncurses_libs = compiler.find_library('ncurses', required : false) ncurses_available = ncurses_libs.found() ncurses = declare_dependency(dependencies : ncurses_libs) endif endif if not ncurses_available and host_machine.system() == 'windows' # Try pdcurses too. ncurses_header = 'curses.h' ncurses_libs = compiler.find_library('pdcurses', required : false) ncurses_available = compiler.has_header(ncurses_header) and ncurses_libs.found() ncurses = declare_dependency(dependencies : ncurses_libs) endif if not ncurses_available error('ncurses could not be found!') endif if libgnt_dep.found() and ncurses_available ncurses_header = '-DNCURSES_HEADER="@0@"'.format(ncurses_header) enable_consoleui = true else error(''' Finch will not be built. You need to install libgnt (or its requirements) and its development headers. ''') endif endif libfinch_SOURCES = [ 'finchnotifications.c', 'gntaccount.c', 'gntblist.c', 'gntconn.c', 'gntconv.c', 'gntdebug.c', 'gntidle.c', 'gntmedia.c', 'gntmenuutil.c', 'gntnotify.c', 'gntplugin.c', 'gntprefs.c', 'gntrequest.c', 'gntroomlist.c', 'gntstatus.c', 'gntui.c', 'gntxfer.c', package_revision, 'libfinch.c' ] libfinch_headers = [ 'finchnotifications.h', 'gntaccount.h', 'gntblist.h', 'gntconn.h', 'gntconv.h', 'gntdebug.h', 'gntidle.h', 'gntmedia.h', 'gntmenuutil.h', 'gntnotify.h', 'gntplugin.h', 'gntprefs.h', 'gntrequest.h', 'gntroomlist.h', 'gntstatus.h', 'gntui.h', 'gntxfer.h', 'libfinch.h' ] libfinch_enum_headers = [ 'gntconv.h', ] # the built lists are append to below libfinch_built_sources = [] libfinch_built_headers = [] libfinch_generated_sources = [] finch_SOURCES = [ 'finch.c' ] if IS_WIN32 winmm = compiler.find_library('winmm') finch_winres = configure_file( input : 'finch_winres.rc.in', output : 'finch_winres.rc', configuration : version_conf) finch_SOURCES += windows.compile_resources(finch_winres) libfinch_winres = configure_file( input : 'libfinch_winres.rc.in', output : 'libfinch_winres.rc', configuration : version_conf) libfinch_SOURCES += windows.compile_resources(libfinch_winres) else winmm = [] endif if enable_consoleui libfinch_enums = gnome.mkenums_simple('finchenums', sources: libfinch_enum_headers) libfinch_built_sources += libfinch_enums[0] libfinch_built_headers += libfinch_enums[1] FINCH_H_INCLUDES = [] foreach header : libfinch_headers + ['finchenums.h'] FINCH_H_INCLUDES += '#include <finch/@0@>'.format(header) endforeach finch_h_conf = configuration_data() finch_h_conf.set('FINCH_H_INCLUDES', '\n'.join(FINCH_H_INCLUDES)) finch_h = configure_file(input : 'finch.h.in', output : 'finch.h', configuration : finch_h_conf, install : true, install_dir : get_option('includedir') / 'finch-3') libfinch_built_headers += finch_h install_headers(libfinch_headers, subdir : 'finch-3') libfinch_inc = include_directories('.') libfinch = shared_library('finch3', libfinch_SOURCES + libfinch_built_headers + libfinch_built_sources, c_args : [ '-DSTANDALONE', '-DGNTSEAL_ENABLE', '-DFINCH_COMPILATION', ncurses_header, '-DG_LOG_USE_STRUCTURED', '-DG_LOG_DOMAIN="Finch"', ], include_directories : [toplevel_inc], version : PURPLE_LIB_VERSION, dependencies : [libpurple_dep, libgnt_dep, ncurses, glib, winmm], install : true) if enable_introspection introspection_sources = libfinch_headers libfinch_gir = gnome.generate_gir(libfinch, sources : introspection_sources, includes : ['GLib-2.0', 'GModule-2.0', 'GObject-2.0', libpurple_gir[0]], namespace : 'Finch', symbol_prefix : 'finch', header : 'finch.h', identifier_prefix : 'Finch', export_packages : 'finch-3', nsversion : '@0@.@1@'.format(purple_major_version, purple_minor_version), install : true, dependencies: [libgnt_dep, gplugin_dep, libpurple_dep], extra_args : ['-DFINCH_COMPILATION', '--quiet']) libfinch_generated_sources += libfinch_gir endif libfinch_dep = declare_dependency( include_directories : [toplevel_inc, libfinch_inc], link_with : libfinch, sources: libfinch_built_headers + libfinch_generated_sources, dependencies : [libpurple_dep, libgnt_dep, glib]) finch = executable('finch3', finch_SOURCES, c_args : [ '-DSTANDALONE', '-DGNTSEAL_ENABLE', '-DG_LOG_USE_STRUCTURED', '-DG_LOG_DOMAIN="Finch"', ], dependencies : [libpurple_dep, libgnt_dep, libfinch_dep], install : true) meson.override_dependency('finch-3', libfinch_dep) pkgconfig.generate( libfinch, name : 'Finch', description : 'Finch is an instant messenger application that uses libpurple for protocol support and ncurses (libgnt) for the UI.', version : meson.project_version(), filebase : 'finch-3', subdirs : 'finch-3', # NOTE: Don't use gnt from pkgconfig, as it might be a subproject. requires : ['gnt', libpurple], variables : ['plugindir=${libdir}/finch-@0@'.format(purple_major_version)]) subdir('plugins') endif # enable_consoleui