Commit Graph

153 Commits

Author SHA1 Message Date
Justin M. Keyes
799d9c3215
clipboard: Prefer xclip (#9302)
The order was swapped in #4150 to prefer `xsel` but there wasn't a clear
explanation.  Meanwhile, `xsel` has been neglected upstream.

Let's trying preferring `xclip` again, we've had a few reports of
problems with `xsel`.

closes #7237
ref #5853
ref #7449
2018-12-01 18:50:26 +01:00
Bjorn Neergaard
108566e7b6 clipboard.vim: check for win32yank.exe #9263
Win32 allows omitting the `.exe` extension, but WSL does not.
2018-11-21 12:24:40 +01:00
Marco Hinz
f1a787d292
health/python: warn if pynvim upgrade failed
Reference: https://github.com/neovim/neovim/wiki/Following-HEAD#20181118
2018-11-20 11:33:08 +01:00
Marco Hinz
443cd04d5b
provider/python: refactoring 2018-11-20 09:59:18 +01:00
Marco Hinz
3ea14d5366
health/python: 'neovim' module was renamed to 'pynvim' 2018-11-17 17:56:34 +01:00
ainola
05f9c7c2f7 clipboard: support Wayland (#9230)
Fixes #9213
2018-11-13 19:01:37 +01:00
Justin M. Keyes
b24209dcf5 provider/nodejs: handle missing stdout
ref https://github.com/neovim/neovim/issues/9001#issuecomment-434802234
2018-10-31 20:42:41 +01:00
Jan Edmund Lazo
b23759b4d7 provider/nodejs: fix npm,yarn detection
For each package manager,
1. Check if they are executable before starting a job.
2. Check if the job opts are set before checking the job status
   TODO: Validate the job id.

Prioritize npm because it's faster than yarn.
Reindent the code to 2-space indent.
2018-10-22 01:30:28 +02:00
Mahmoud Al-Qudsi
1cf50cbfd9 provider/nodejs: Simultaneously query npm and yarn #9054
ref #9001

Instead of serially querying npm and yarn for neovim, start both as a
job and then wait for a successful result from either.
2018-10-18 20:32:44 +02:00
Marco Hinz
d581398779 ruby: detect rbenv shims for other versions (#8733)
When rbenv is used for managing Ruby installations, just checking for an
executable called "neovim-ruby-host" is not enough. It has to be run as well.

If it does not return 0, then neovim-ruby-host is merely a shim for another Ruby
installation.

  $ rbenv versions
    2.5.0
  * 2.5.1 (set by /Users/mhi/.rbenv/version)

  $ rbenv whence neovim-ruby-host
  2.5.0

  $ which neovim-ruby-host
  /Users/mhi/.rbenv/shims/neovim-ruby-host

  $ neovim-ruby-host
  rbenv: neovim-ruby-host: command not found

  The `neovim-ruby-host' command exists in these Ruby versions:
    2.5.0

  $ echo $?
  127

Additionally, the detection logic was moved from provider#ruby#Detect() to
s:detect(), because the former is run in the sandbox which forbids calling
system().
2018-08-09 00:47:35 +02:00
Takuya Matsuyama
e889640048 provider/node: npm --loglevel silent (#8682)
closes #8674
npm log level may cause unexpected output.
2018-07-04 12:13:36 +02:00
Ahmed El Gabri
3cc3506965 checkhealth: node.js: also search yarn #8528
- "neovim" package may be installed with yarn. Check yarn if npm fails.
- Use filereadable() instead of glob(). closes #8552
2018-06-17 13:05:55 +02:00
chemzqm
338664e96c node/provider: support g:node_host_prog #8135 2018-03-15 04:55:48 +01:00
James McCoy
3af3515e74 Add provider#Poll() to handle starting and polling the provider 2018-02-16 14:08:12 -05:00
James McCoy
6fbb8d6739 provider: Safely access job.stderr in #Require
If `jobstart()` fails, then the subsequent `rpcrequest()` will throw due
to an invalid channel id.  This causes `job.stderr` not to exist, so we
throw another exception when trying to dump the job's stderr.

    Error detected while processing function remote#define#AutocmdBootstrap[1]..remote#host#Require[10]..provider#pythonx#Require:
    line 22:
    E716: Key not present in Dictionary: stderr

This obfuscates the actual problem.
2018-02-16 13:33:23 -05:00
James McCoy
48dc1f3f90 provider: ruby: Use stderr_buffered to collect stderr 2018-02-16 13:33:07 -05:00
Marco Hinz
dc53629587 macOS: Use pbpaste to detect a working clipboard (#7983)
`pbcopy` writes to the clipboard, it should not be used to sanity-check the clipboard.
2018-02-08 00:27:54 +01:00
Justin M. Keyes
6452831cf9 clipboard: macOS: fallback to tmux if pbcopy is broken #7940
On some versions of macOS, pbcopy doesn't work in tmux <2.6
https://superuser.com/q/231130
Fallback to tmux in that case.

Add a healthcheck for this scenario.
2018-01-31 11:37:05 +01:00
Justin M. Keyes
341102fe9f health.vim: remove :CheckHealth command
For back-compat, :CheckHealth runs :checkhealth. But don't define
:CheckHealth explicitly, it adds noise to wildmenu completion.

Completion of healthchecks doesn't yet work with :checkhealth, this is
a regression but it needs to be implemented for :checkhealth rather than
keeping :CheckHealth around.
2017-12-27 13:00:58 +01:00
Björn Linse
61ba3c5e31 provider: delete vimL stderr collector, now that it exists builtin 2017-12-23 14:32:25 +01:00
Justin M. Keyes
cca6d4b267
provider/nodejs: more robust version-check (#7738) 2017-12-18 01:48:30 +01:00
Justin M. Keyes
103ff26c0a provider/nodejs: check version in Detect() 2017-12-17 16:09:18 +01:00
Jan Edmund Lazo
a1adfdc7d5 ci: nodejs client acceptance-test #7706
ci: install nodejs 8 in Appveyor, Travis

provider: check node version for debug support
Resolve https://github.com/neovim/neovim/pull/7577#issuecomment-350590592 for Unix.

provider: test if nodejs in ci supports --inspect-brk

nodejs host for neovim requires nodejs 6+ to work properly.
nodejs 6.12+ or 7.6+ is required for debug support via `node --inspect-brk`.

provider: run cli.js of nodejs host directly

npm shims are useless because the user cannot set node to debug mode via
--inspect-brk. This is problematic on Windows which use batchfiles and
shell scripts to compensate for not supporting shebang.

The patch uses `npm root -g` to get the absolute path of the global npm
modules. If that fails, then the user did not install neovim npm package
globally. Use that absolute path to find `neovim/bin/cli.js`, which is
what the npm shim actually runs with node. glob() is for a simple file
check in case bin/ is removed because the npm shims are ignored now.
2017-12-17 16:09:18 +01:00
Jan Edmund Lazo
2d732a11b1 provider: fix batchfile extension for ruby gem (#7651)
ruby uses batchfiles with 'cmd' extension.
gem creates batchfiles with 'bat' extension.
`gem install rails` does the following in Windows (not Cygwin):

1. Run `gem.cmd install rails` on cmd.exe
2. gem.cmd runs `ruby.exe -x gem install rails`
3. `rails` gem is installed.
   `rails.bat` is created in the same directory
   where ruby.exe and gem.cmd reside.
2017-11-29 03:19:33 +01:00
Björn Linse
df019cebd5 Revert "provider: delete vimL stderr collector, now that it exists builtin"
This change exposed a memory issue with buffered channels, possibly
involving GC. Revert until it has been fixed.

This reverts commit 0de019b6a6.
2017-11-27 11:07:49 +01:00
Björn Linse
0de019b6a6 provider: delete vimL stderr collector, now that it exists builtin 2017-11-26 09:17:06 +01:00
Jan Edmund Lazo
e8af34dc63 win: provider: Detect(): return *.cmd path (#7577)
neovim-ruby-host is a ruby script.
neovim-node-host is a shell script.
Both don't work in cmd.exe so gem and npm provide batchfile shims.

Return the full path of these shims, cmd.exe knows better what to do with these files.
2017-11-17 23:52:51 +01:00
Billy Vong
eed10f7e23 use provider#stderr_collector 2017-10-31 08:35:29 -07:00
Billy Vong
7890157931 remote: add node.js as a remote plugin provider 2017-10-29 11:10:33 -07:00
Justin M. Keyes
d214df4e9b doc: replace ":CheckHealth" with ":checkhealth" 2017-10-17 01:51:21 +02:00
Justin M. Keyes
85f3084e21 clipboard: disallow recursion; show hint only once (#7203)
- Show hint only once per session.
- provider#clipboard#Call(): prevent recursion
- provider#clear_stderr(): use has_key(), because :silent! is still
  captured by :redir.

closes #7184
2017-08-22 20:31:54 +02:00
Justin M. Keyes
88165a798e clipboard: test g:clipboard validation, fix a bug
Also fix `:help foo` highlighting in health.vim
2017-08-20 22:17:03 +02:00
Justin M. Keyes
9882e25dc4 clipboard: avoid error flood during :redir
redir_write():
- This is a "batch" operation which was not yet covered by
  start_batch_changes()

adjust_clipboard_name():
- msg() and friends during :redir will, of course, cause redir_write()
  to try to capture that message, which causes recursion.
- EMSG() here is trouble: if it interrupts :redir it is a mess.
  Rather than deal with the mess, show a non-error message.

closes #7182
closes #7184
closes #7183
ref #6048
ref #7032
2017-08-20 19:49:42 +02:00
James McCoy
722806a115
provider: clipboard: Only report stderr if the job failed
Closes #7054
2017-07-24 20:10:40 -04:00
James McCoy
58d8d91ec1
provider: Extra pythonx's stderr handling to common functions 2017-07-24 20:10:28 -04:00
Andy Russell
26124b4800 provider/clipboard.vim: fix logic issue #7042
Closes #7039
2017-07-17 17:20:37 +02:00
Andy Russell
4dee942e73 provider/clipboard.vim: capture/display errors (#6684)
TODO: handle errors in the `get`. systemlist() should take an
options dictionary like jobstart(), which may specify a stderr handler.

References #6565
2017-07-15 20:51:51 +02:00
Justin M. Keyes
f0dafa89c2 provider/clipboard.vim: Handle missing g:clipboard keys 2017-06-28 09:42:03 +02:00
Justin M. Keyes
6016ac270f provider/clipboard.vim: allow configuration #6030
Closes #6029
2017-06-27 12:22:06 +02:00
Alex Genco
f400c6f05f runtime: Allow overriding ruby host with g:ruby_host_prog
This allows users who have per-project Ruby versions (e.g. with `rvm`)
to pin to a particular gem installation.

For example: `let g:ruby_host_prog = 'rvm system do neovim-ruby-host'`
2017-06-17 08:20:00 -07:00
Xu Cheng
6efe84af68 provider/clipboard: add tmux support (#6894) 2017-06-15 09:15:56 +02:00
Marco Hinz
2b3cb2c448
Make script_host.rb rubocop-clean
Fix the following issues according to rubocop:

    runtime/autoload/provider/script_host.rb:2:11: C: Prefer single-quoted strings when you don't need string interpolation or special symbols.
      require "neovim/ruby_provider"
              ^^^^^^^^^^^^^^^^^^^^^^
    runtime/autoload/provider/script_host.rb:5:5: C: Prefer single-quoted strings when you don't need string interpolation or special symbols.
        "Your neovim RubyGem is missing or out of date. " +
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    runtime/autoload/provider/script_host.rb:5:55: C: Use \ instead of + or << to concatenate those strings.
        "Your neovim RubyGem is missing or out of date. " +
    runtime/autoload/provider/script_host.rb:6:5: C: Prefer single-quoted strings when you don't need string interpolation or special symbols.
        "Install the latest version using `gem install neovim`."
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This commit assumes Ruby 2.0.0+.
2017-05-03 22:24:51 +02:00
Justin M. Keyes
440133e0d5 health.vim: Set 'iskeyword' to that of ft=help. 2017-04-19 04:03:08 +02:00
Justin M. Keyes
2f38ed11c9 providers: Disable if g:loaded_* exists.
The exists('g:loaded_foo') convention is rather common, and may be
relied upon in some cases. It's also very unlikely that a user or plugin
has any reason to set g:loaded_foo to zero, so the principle of least
surprise can be brushed aside here.

https://github.com/neovim/neovim/issues/6107#issuecomment-279532143
2017-02-14 00:02:50 +01:00
Justin M. Keyes
9451647d9b health.vim: Do not check intentionally disabled providers.
Closes #6107
2017-02-13 22:21:23 +01:00
Rui Abreu Ferreira
33cd06dfb7 Windows: Clipboard provider win32yank 2017-01-20 18:29:17 +00:00
Marco Hinz
15c85d8462 clipboard: only check for pbcopy on macOS (#5927)
Fixes #5926.
2017-01-11 00:50:07 +01:00
Marco Hinz
1fbee630a8 provider: add Python 3.6 (#5886) 2017-01-05 21:29:31 +01:00
Justin M. Keyes
695703ca97 provider/clipboard.vim: fallback if xsel is broken (#5868)
Old versions of `xsel` do not support some required features.
Fall back to `xclip` then.

Closes #5853
2017-01-04 15:10:31 +01:00
Marco Hinz
15259c4b84 clipboard: show error message only once and put in history (#5870) 2017-01-04 00:45:31 +01:00
Marco Hinz
20995c7960 Remove g:python{,3}_host_skip_check (#5738)
This option simplifies the configuration options:

1) `g:python{,3}_host_prog` is not set.

    Neovim tries its best to find a suitable interpreter. This means calling
    exepath(), potentially multiple times, and a system('python -c ...') with
    the first found interpreter, to get the Python version.

2) `g:python{,3}_host_prog` is set.

    Avoids everything of the above. No safety checks, no training wheels. Fast
    host startup time!
2016-12-09 15:08:18 +01:00
Marco Hinz
3a802e3c16 provider/clipboard.vim: never show a warning on sourcing
Never throw an error when provider/clipboard.vim is sourced for the first time.
Save the error instead and expose it via `provider#clipboard#Error()`, mimicking
provider/python.vim.
2016-11-02 12:06:57 +01:00
Marco Hinz
0a1b852cd1 provider/clipboard.vim: refactor 2016-11-02 12:04:43 +01:00
Björn Linse
2d60a15e25 job control: reuse common job code for rpc jobs
This makes stderr and exit callbacks work for rpc jobs
2016-08-20 12:55:35 +02:00
Björn Linse
6ea2bde065 clipboard: fix v:register when clipboard=unnamed,unnamedplus 2016-07-12 22:30:51 +02:00
Justin M. Keyes
c7d84c5550 Merge #4980 'Support legacy :ruby commands'. 2016-07-10 14:16:12 -04:00
Alex Genco
0a3c0205c5 Add :ruby, :rubyfile, and :rubydo ex commands 2016-07-02 21:45:48 -07:00
Justin M. Keyes
37f560aedf doc/python: cleanup
- Move info to providers.txt
- Remove "nvim-" prefix.
- Brevity, clarity, ...
2016-06-15 22:50:37 -04:00
Justin M. Keyes
c698ed0531 doc: cleanup 2016-06-15 19:31:11 -04:00
Justin M. Keyes
4bad05ba97 doc/clipboard: cleanup 2016-06-15 19:31:11 -04:00
Aleksa Sarai
96546fb696 runtime: clipboard: start daemons in /
This avoids the issue of nvim started daemons causing mountpoints to be
unmountable. This is currently the only place in runtime/ where this
calling convention occurred.

Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
2016-06-07 17:26:49 +10:00
Justin M. Keyes
5fed9f5626 Merge pull request #4830 from blueyed/proider-pythonx-handle-127
provider/pythonx: handle exit code 127 from pyenv
2016-05-28 21:05:08 -04:00
Daniel Hahler
1ea1626764 provider/pythonx: use robust comparison (via vint) 2016-05-28 17:16:24 +02:00
Daniel Hahler
dab5d1368a provider/pythonx: handle exit code 127 from pyenv
This also checks the major/min version only for expected return codes.

With pyenv, you might get the following (return code 127):

    pyenv: python3.4: command not found

    The `python3.4' command exists in these Python versions:
      3.4.3
      3.4.3/envs/tmp-3.4.3-eElS6Y
      tmp-3.4.3-eElS6Y
2016-05-28 17:10:16 +02:00
Joel D. Elkins
9b1e819c8c clipboard: support "doit" tool 2016-05-15 16:53:49 -05:00
Shougo Matsushita
b50afb4651 clipboard: support "lemonade" tool 2016-04-17 13:38:57 +09:00
Björn Linse
89bb5a8ab8 python: move script_host.py to python-client 2016-03-15 12:32:18 +01:00
Alex Genco
3cb9970acf Ruby remote plugin support 2016-03-10 19:01:44 -08:00
Shougo Matsushita
bb020df0f5 rplugin: Initialize remote plugins lazily. #4384 2016-03-10 10:34:57 -05:00
Shougo Matsushita
46bd3c0f77 clipboard: Check $DISPLAY. Prefer xsel. #4150 2016-02-05 09:51:56 -05:00
Björn Linse
49f0417988 clipboard: Detach clipboard helper, so contents is kept after nvim exit 2016-01-20 11:09:29 +01:00
Dan Strokirk
38435e8a05 python: Add missing I/O methods to RedirectStream
`RedirectStream` is used to redirect `stdout` and `stderr`, but are
missing certain I/O methods available on other file-like objects.
This causes external plugins (like `colorama`) to crash.

Inheriting from `io.IOBase` adds an abstract implementation of these
methods, which will at least keep the python code running.

Fixes #4045
2016-01-18 17:22:11 +01:00
Daniel Hahler
dcc71094d1 runtime/autoload/provider/python{,3}.vim: fix E168
Do not use `finish` inside of `provider#python{,3}#Call`, but `return`.
2015-11-03 16:52:26 +01:00
Florian Walch
e3540a430b provider/pythonx: Improve detection code and error messages.
"python -c" returns 1 in case of an error. Use a return code of 2 if
the Neovim module is not found to distinguish these cases.

Verify the interpreter version before checking for an installed Neovim
module. Show a new error message if the Python interpreter version
is below the minimum required version.

Always use "pkgutil" to determine if the Neovim module is installed.
In contrast to "importlib", which was used for Python 3,
"pkgutil.find_loader" is available for all Python versions [1,2].
"pkgutil.find_loader" internally uses "importlib" for Python >= 3.3 [2].
Also, the previously used "importlib.find_loader" is only available
since Python 3.3 (so checking the major Python version was not enough)
and deprecated since Python 3.4 [3].
Finally, conditioning on the major version in Vimscript was incorrect,
as checking the Neovim module for a certain Python major version does
not mean that the tested interpreters are actually of that version.
For example, we test the "python" executable, which is Python 2 on
Ubuntu and Python 3 on Arch Linux.

[1] https://docs.python.org/2/library/pkgutil.html#pkgutil.find_loader
[2] https://docs.python.org/3/library/pkgutil.html#pkgutil.find_loader
[3] https://docs.python.org/3/library/importlib.html#importlib.find_loader
2015-09-17 18:48:26 +02:00
Jakob Schnitzer
c478dd5ab4 python: remove current working directory from path
Before, running Nvim in a directory containing a Python module `neovim`,
or one that is imported by it or a plugin, will load that module and not
the system one. So Nvim might be tricked into running arbitrary scripts
from the current working directory.

Fixes #1665
Fixes #2530
2015-09-14 12:06:49 +02:00
sanmiguel
0ec6a9c3c3 provider/pythonx.vim: Use shell-agnostic construction. #3190 2015-08-21 00:33:29 -04:00
Justin M. Keyes
681ee8131c Merge pull request #2910 from blueyed/python-fix-path_hook
Python: fixes for sys.path_hooks handler
2015-08-17 19:21:19 -04:00
Björn Linse
d4ebbaa91a clipboard: support clipboard=unnamedplus,unnamed 2015-08-07 13:06:13 +02:00
Björn Linse
c7bfbd4fd9 python3: remove decoding logic, as this is now done in plugin host #3026
DecodeHook isn't needed since neovim/python-client#53
rpc methods won't pass bytes anymore, ref neovim/python-client#129
2015-07-18 22:39:28 +02:00
Daniel Hahler
07e538d589 python: VimPathFinder: remove unused load_module method
This method was not used, but `VimModuleLoader.load_module` is.
2015-07-09 13:45:25 +02:00
Daniel Hahler
5e32120236 python: path_hook: properly implement PEP302
The path hook used to load the module already in the `find_module` hook.

This caused different behaviour between Python 2.7 and 3.3, where the
former would call the `VimModuleLoader`, while Python 3.3 appears to
short-circuited this (because the module was loaded already).

This patch will now only find the module, but not load it in the
`find_module` hook.
2015-07-09 13:43:57 +02:00
Daniel Hahler
ad6dfa6669 python: VimModuleLoader: check sys.modules[fullname]
This is required by PEP302 for `reload()`ing modules.
2015-07-09 13:43:57 +02:00
Daniel Hahler
1cc37f32b8 python: VimPathFinder: use find_spec for Python 3.4
Fixes https://github.com/neovim/neovim/issues/2909
2015-07-09 13:43:29 +02:00
Björn Linse
3fcfd52422 clipboard: avoid redundant error message on clipboard_get failure .
Fixes #2712

Helped-By: Michael Reed <m.reed@mykolab.com>
2015-06-25 19:30:29 -04:00
Björn Linse
d133502e98 clipboard: keep track of ownership and cache clipboard data locally
Helped-By: Justin M. Keyes <justinkz@gmail.com>
2015-06-25 19:30:28 -04:00
Björn Linse
a0e89978bd clipboard: don't use &shell in clipboard provider 2015-06-25 19:16:59 -04:00
Florian Walch
e8c68aa7ee provider/pythonx: Show absolute path to executable in error message. 2015-06-09 10:55:25 +03:00
Florian Walch
cfa278c72e provider/pythonx: Merge s:check_version() and s:check_interpreter(). 2015-06-09 10:29:46 +03:00
Florian Walch
4dc3c84c5a provider/pythonx: Don't use Python 3 interpreter for +python.
The executable 'python' can refer to either Python 2 or Python 3. Add a
check to only accept Python 2 interpreters as providers for +python.

Also improve the error messages.

Resolves #2734.
2015-06-09 10:29:46 +03:00
Daniel Hahler
c148427c89 provider/pythonx: return error from Detect
Ref: https://github.com/blueyed/neovim/commit/9b653ce0#commitcomment-11195449
2015-06-09 10:29:46 +03:00
Daniel Hahler
2111f28fc5 provider/python: Call: fix usage of 'finish' in function
Do not call it again in case of an exception in `remote#host#Require`
(ref: https://github.com/neovim/neovim/pull/2549#issuecomment-102674350).
2015-06-09 10:29:46 +03:00
Daniel Hahler
866e587b88 provider/python: define Prog and Error functions always
`provider#pythonX#Error` and `provider#pythonX#Prog` are currently meant
for debugging only (the error message is not being used), and should
therefore be defined always, especially in case of errors.

Ref: https://github.com/neovim/neovim/pull/2549#issuecomment-98607580
2015-06-09 10:29:46 +03:00
Daniel Hahler
3b0ec6599c provider/pythonx: Detect: only return valid versions
The `check` return value of `s:check_version` was not being used, and it
was returned always.
2015-06-09 10:29:45 +03:00
Daniel Hahler
12f7229e7e provider/pythonx: test python3/2 first, do not test python3.2
python3/python2 will typically point at the default / most recent
interpreter.
2015-06-09 10:29:45 +03:00
Daniel Hahler
6fa10ab9cb provider/pythonx: add reference to ":help nvim-python" for error 2015-06-09 10:29:45 +03:00
Daniel Hahler
905f34cf30 provider/pythonx: fix grammar with error 2015-06-09 10:29:45 +03:00
Daniel Hahler
75db0c37a7 provider/pythonx: only call system("python") once
`s:check_interpreter` will query/return the version also, so that
`s:check_version` can just use that, without calling "python" again.
2015-06-09 10:29:45 +03:00
Shougo Matsushita
42de617974 Add if_python3 support
Reviewed-by: Michael Reed <m.reed@mykolab.com>, Daniel Hahler <github@thequod.de>
Helped-by: Daniel Hahler <github@thequod.de>
2015-04-21 06:20:23 +09:00
Björn Linse
63efb9b1f1 clipboard: handle linewise/charwise selections correctly 2014-12-08 22:01:00 +01:00
Björn Linse
c1854d2433 clipboard: support separate '+' and '*' clipboards 2014-12-08 21:38:35 +01:00