1
0
Fork 0

Compare commits

...

4 Commits

8 changed files with 249 additions and 40 deletions

179
ChangeLog
View File

@ -1,20 +1,171 @@
2024-04-07 cage
* configure.ac,
* tinmop.asd:
- tagging as rc1.
2024-04-06 cage
* doc/tinmop.man,
* doc/tinmop.org,
* src/command-line.lisp,
* src/program-events.lisp,
* src/ui-goodies.lisp:
- updated manpage.
- added short command line option to specify fediverse account (-F).
- [TUI] removed a recursive locking.
2024-04-04 cage
* etc/init.lisp,
* src/package.lisp,
* src/ui-goodies.lisp:
- added new command: 'thread-go-to-parent-post'.
- fixed command: 'thread-go-to-parent-post'.
2024-03-31 cage
* etc/init.lisp,
* po/de.po,
* po/es.po,
* po/fr.po,
* po/it.po,
* po/pl.po,
* po/tinmop.pot,
* src/program-events.lisp,
* src/scheduled-events.lisp:
- changed key for fediverse account switching.
- added notification when fetching announcements.
- fixed line wrapping of announcements window.
- updated italian translations.
- prevented crash when exceeding the character limit in a post.
2024-03-30 cage
* etc/init.lisp,
* po/de.po,
* po/es.po,
* po/fr.po,
* po/it.po,
* po/pl.po,
* po/tinmop.pot,
* src/command-line.lisp,
* src/complete.lisp,
* src/constants.lisp,
* src/main.lisp,
* src/package.lisp,
* src/software-configuration.lisp,
* src/ui-goodies.lisp:
- prevented trying to authorize a fediverse client when no fediverse
credentials has beed added to the configuration file.
- added command to switch fediverse account at runtime;
- removed hardcoded string constants.
- updated italian translations.
2024-03-29 cage
* doc/tinmop.man,
* doc/tinmop.org,
* etc/init.lisp,
* src/command-line.lisp,
* src/db-utils.lisp,
* src/main.lisp,
* src/package.lisp,
* src/ui-goodies.lisp:
- [TUI] added new command: 'thread-delete-subtree';
- removed legacy function.
- updated documentation.
- [fediverse] added command line switch to choose to use a specific
fediverse account (if specified in the configuration file);
- [TUI] anticipated the showing of the welcome script to appears
before the fediverse account authorization.
2024-03-24 cage
* po/it.po,
* src/constants.lisp,
* src/main.lisp,
* src/package.lisp,
* src/software-configuration.lisp:
- updated italian translation.
- reverted regression that prevented GUI to starts.
- instructed the program to generate a default database file name
when no valid user and server name has been found in the configuration
file.
2024-03-20 cage
* src/command-line.lisp:
- added short options to bash complations.
2024-03-19 cage
* Makefile.am,
* Makefile.in,
* configure,
* configure.ac,
* data/completion/tinmop:
- used autotools to install bash completion script.
- removed shebang from completion script, was wrong anyway.
2024-03-18 cage
* README.org,
* lisp-dependencies,
* src/command-line.lisp:
- updated README to mention that also libjpegturbo and TK must be
installed;
- [draft] added a function for bash completion.
2024-03-17 cage
* src/api-client.lisp,
* src/constants.lisp,
* src/db-utils.lisp,
* src/gui/client/client-configuration.lisp,
* src/main.lisp,
* src/package.lisp,
* src/resources-utils.lisp,
* src/software-configuration.lisp,
* src/thread-window.lisp:
- [fediverse] allowed to specify more than one account in the
configuration file, each couple of directive 'username' and 'server'
an be specified more that once.
- [TUI] added a check for configuration file to ensure equal number of
usernames and server name are specified.
- [TUI] fixed checks of configuration file.
- [fediverse] moved from a single database for a single account to a
databases for each account.
2024-03-12 cage
* ChangeLog,
* NEWS.org,
* data/scripts/generate-gemlog.lisp,
* po/de.po,
* po/es.po,
* po/fr.po,
* po/it.po,
* po/pl.po,
* po/tinmop.pot,
* src/message-rendering-utils.lisp:
* ChangeLog,
* NEWS.org,
* data/scripts/generate-gemlog.lisp,
* po/de.po,
* po/es.po,
* po/fr.po,
* po/it.po,
* po/pl.po,
* po/tinmop.pot,
* src/message-rendering-utils.lisp:
- prevented the poll's results to be printed before expiration.
- [script] added the option to submit the feed to and antenna
instance, when generating a gemlog;
- updated changelog.
- prevented the poll's results to be printed before expiration.
- [script] added the option to submit the feed to and antenna
instance, when generating a gemlog;
- updated gemlog.
- updated Changelog.
2024-03-03 cage

View File

@ -1,3 +1,18 @@
* 2024-xx-xx version 0.9.9.1414213562
- new features
- [fediverse] Multi account supported. Users can specify the account to use on the command line or switching at runtime.
- [TUI] added new commands:
- thread-go-to-parent-post
- thread-delete-subtree
- added a bash completion script
- prevented the poll's results to be printed before expiration
- [script] added the option to submit the feed to and antenna instance, when generating a gemlog;
- Bugfix
- [TUI] fixed checks of configuration file
- updated README to mention that also libjpegturbo and TK must be installed;
- [GUI] fixed managing of gemini responses when a titan request was performed (TOFU errors, TLS certificate password etc.)
- [TUI] fixed line wrapping of announcements window.
* 2024-03-02 version 0.9.9.141421356
- new features
- [GUI] added contextual menu to copy gemlogs links or mark all their posts as already read;
@ -11,7 +26,7 @@
- [TUI] added command to download a post's attachment ignoring the cached value (if such entry in the cache exists);
- [TUI] prevented results of non expired polls to be printed.
- Bugfix
- [GUI] fixed inlining og images;
- [GUI] fixed inlining of images;
- [GUI] fixed deletion of TLS client certificates;
- [TUI] [fediverse] fixed searching in reblogged statuses body, previously the search; procedure skipped the reblogged statuses.
- [TUI] fixed backspace key when the software asks for an input string;

20
configure vendored
View File

@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.71 for tinmop 0.9.9.141421356.
# Generated by GNU Autoconf 2.71 for tinmop 0.9.9.1414213562-rc1.
#
# Report bugs to <https://codeberg.org/cage/tinmop/>.
#
@ -611,8 +611,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='tinmop'
PACKAGE_TARNAME='tinmop'
PACKAGE_VERSION='0.9.9.141421356'
PACKAGE_STRING='tinmop 0.9.9.141421356'
PACKAGE_VERSION='0.9.9.1414213562-rc1'
PACKAGE_STRING='tinmop 0.9.9.1414213562-rc1'
PACKAGE_BUGREPORT='https://codeberg.org/cage/tinmop/'
PACKAGE_URL='https://www.autistici.org/interzona/tinmop.html'
@ -1322,7 +1322,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures tinmop 0.9.9.141421356 to adapt to many kinds of systems.
\`configure' configures tinmop 0.9.9.1414213562-rc1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1393,7 +1393,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of tinmop 0.9.9.141421356:";;
short | recursive ) echo "Configuration of tinmop 0.9.9.1414213562-rc1:";;
esac
cat <<\_ACEOF
@ -1498,7 +1498,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
tinmop configure 0.9.9.141421356
tinmop configure 0.9.9.1414213562-rc1
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@ -1702,7 +1702,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by tinmop $as_me 0.9.9.141421356, which was
It was created by tinmop $as_me 0.9.9.1414213562-rc1, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@ -2964,7 +2964,7 @@ fi
# Define the identity of the package.
PACKAGE='tinmop'
VERSION='0.9.9.141421356'
VERSION='0.9.9.1414213562-rc1'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@ -8521,7 +8521,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by tinmop $as_me 0.9.9.141421356, which was
This file was extended by tinmop $as_me 0.9.9.1414213562-rc1, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -8581,7 +8581,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
tinmop config.status 0.9.9.141421356
tinmop config.status 0.9.9.1414213562-rc1
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"

View File

@ -15,7 +15,7 @@ dnl You should have received a copy of the GNU General Public License
dnl along with this program.
dnl If not, see [[http://www.gnu.org/licenses/][http://www.gnu.org/licenses/]].
AC_INIT([tinmop],[0.9.9.141421356],[https://codeberg.org/cage/tinmop/],[tinmop],[https://www.autistici.org/interzona/tinmop.html])
AC_INIT([tinmop],[0.9.9.1414213562-rc1],[https://codeberg.org/cage/tinmop/],[tinmop],[https://www.autistici.org/interzona/tinmop.html])
AM_INIT_AUTOMAKE([-Wall foreign])

View File

@ -23,15 +23,46 @@
(define-constant +maximum-event-priority+ -2 :test #'=)
(defparameter *id-lock* (make-lock))
(defparameter *id-lock* (make-lock "id-event-lock"))
(defparameter *event-id* 0)
;; used only in batch mode from the command line
(defparameter *process-events-immediately* nil
"Used only in batch mode from the command line. Instead of pushing
the event on a priority queue that will be picked by a thread
process the event immediately")
"Should be used only in batch mode from the command line (but i have
broken this rule rule here and there!).
When non nil, instead of pushing the event on a priority queue that
will be picked (and ran) by another thread, runs the event
immediately. Be very careful when binding this variable to non nil
value: no code when binding is true can call 'push-event'.
for example
(let ((*process-events-immediately* t))
(push-event (make-instance 'function-event
;;;;; vvvvvv !recursive locking!
:payload (lambda () (push-event (make-instance 'an-event)))
:priority ,priority)))
will raise an error
instead:
;;;; vvvvv notice the value nil
(let ((*process-events-immediately* nil))
(push-event (make-instance 'function-event
:payload (lambda () (push-event (make-instance 'an-event)))
:priority ,priority)))
will not.
To clarify this is the implementation of 'push-event':
(defun push-event (event)
(wrapped-in-lock (*events-queue*)
(if *process-events-immediately*
(process-event event)
(push-element *events-queue* event))))")
(defparameter *stop-event-dispatching* nil)
@ -84,7 +115,8 @@
(priority object)
(notes object))))
(defgeneric process-event (object))
(defgeneric process-event (object)
(:documentation "Process a program event. NB: In the body of this method an event can not recursively push another event, this error can happens expcecially if *process-events-immediately* is bound to true."))
#+debug
(defmethod process-event :before (object)
@ -100,11 +132,11 @@
(defclass events-queue (priority-queue)
((lock
:initform (make-lock)
:initform (make-lock "event-queue-lock")
:initarg :lock
:accessor lock)
(blocking-lock
:initform (make-lock)
:initform (make-lock "event-blocking-queue-lock")
:initarg :blocking-lock
:accessor blocking-lock)
(condition-variable
@ -1251,10 +1283,14 @@
keybindings:*gemini-message-keymap*)
(gemini-viewer:maybe-initialize-metadata window)
(refresh-gemini-message-window links page-data ir-text nil)
(ui:open-gemini-toc)
(ui:open-gemini-message-link-window :give-focus nil :enqueue t)
(ui:focus-to-message-window)
(windows:draw window)))))
(let ((already-enqueued *process-events-immediately*))
(if already-enqueued
(process-event (make-instance 'gemini-toc-open))
(ui:open-gemini-toc))
(ui:open-gemini-message-link-window :give-focus nil
:enqueue (not already-enqueued))
(ui:focus-to-message-window)
(windows:draw window))))))
(defclass gemini-request-event (program-event)
((url

View File

@ -712,6 +712,9 @@ printed in the box column by column; in the example above the results are:
(not (iri:absolute-url-p word))))
words)))
(defmethod lines->uri ((object null))
object)
(defun collect-links (text &optional (schemes '("http" "https" "ftp" "gemini" "gopher")))
"Collect all hyperlinks in a text marked from a list of valid `schemes'"
(flet ((build-re-scheme ()

View File

@ -195,13 +195,17 @@
(let ((event (make-instance 'error-message-event
:priority priority
:payload message)))
(push-event event)))
(if *process-events-immediately*
(process-event event)
(push-event event))))
(defun info-message (message &optional (priority +standard-event-priority+))
(let ((event (make-instance 'info-message-event
:priority priority
:payload message)))
(push-event event)))
(if *process-events-immediately*
(process-event event)
(push-event event))))
(defun confirm-file-overwrite-dialog-immediate (filepath)
(let ((res (info-dialog-immediate (format nil

View File

@ -18,7 +18,7 @@
(defsystem :tinmop
:author "cage"
:license "GPLv3"
:version "0.9.9.141421356"
:version "0.9.9.1414213562-rc1"
:pathname "src"
:serial t
:bug-tracker "https://codeberg.org/cage/tinmop/issues"