Commit Graph

358 Commits

Author SHA1 Message Date
Michael Carlberg
ccbb38798d fix(bar): Action x values should not be volatile 2016-12-20 07:46:51 +01:00
Michael Carlberg
1cccd100bb fix(bar): Remove double click 2016-12-20 07:46:30 +01:00
Michael Carlberg
a89c4ef2dd refactor: Move all event handling to the controller 2016-12-20 05:16:04 +01:00
Michael Carlberg
8ed4de1dda fix: Use enum_hash for unordered_map 2016-12-20 02:29:18 +01:00
Michael Carlberg
b417c9f812 feat(github): New module
Module used to query the GitHub API for information.
Currently only supports notification count.

Ref #84
2016-12-19 22:12:31 +01:00
Michael Carlberg
f50f43af02 refactor: Cleanup 2016-12-16 10:23:54 +01:00
Michael Carlberg
a7005be82c feat: Fade if unfocused and handle double clicks 2016-12-16 06:44:55 +01:00
Michael Carlberg
140a3a6327 fix(config): Avoid double value lookup 2016-12-15 20:57:03 +01:00
Michael Carlberg
b2e8428550 wip(refactor): Improve parsing and font glyph caching 2016-12-15 17:28:58 +01:00
Michael Carlberg
9f9f438fae refactor: Remove last usage of boost::optional
Since it's the only thing boost was used for at the moment
we drop it to be able to get rid of a dependency.
2016-12-15 17:13:16 +01:00
Michael Carlberg
a0d485f79d refactor: Initialize data 2016-12-15 09:30:31 +01:00
Michael Carlberg
f9062d031c refactor(clang-tidy): Apply fixes 2016-12-15 03:30:41 +01:00
Michael Carlberg
52a6dfb42c refactor(config): Use defined fallback for environment refs 2016-12-14 20:14:31 +01:00
Michael Carlberg
4c36d65cbe fix(eventloop): Acquire lock guard 2016-12-14 19:04:33 +01:00
Michael Carlberg
8c3f40db5b refactor(eventloop): Use config wrapper 2016-12-14 11:01:44 +01:00
Michael Carlberg
eca870774f fix: Handle single input events 2016-12-14 11:01:44 +01:00
Michael Carlberg
c2caf4d7a6 fix(parser): Apply clang-tidy fixes 2016-12-14 11:01:44 +01:00
Michael Carlberg
80a00bd596 refactor(config): Cleanup and minor tweaks 2016-12-14 11:01:44 +01:00
Michael Carlberg
5d5542169b refactor(command_line): Cleanup 2016-12-14 11:01:44 +01:00
Michael Carlberg
683ce7acc6 refactor(logger): Cleanup 2016-12-14 11:01:44 +01:00
Michael Carlberg
540bcb9fd0 refactor(config): Load on instantiation 2016-12-14 11:01:44 +01:00
Michael Carlberg
4fca0c89b4 refactor: Object construction 2016-12-14 11:01:44 +01:00
Michael Carlberg
1a2a6e5fab refactor: Construction methods 2016-12-14 11:01:44 +01:00
Michael Carlberg
08be86fbe1 wip(refactor): Improve signal and event handling 2016-12-14 11:01:44 +01:00
Michael Carlberg
d45fd76dcd refactor(config): Drop boost::property_tree 2016-12-14 10:57:45 +01:00
Michael Carlberg
ec39859093 feat: Window click handlers
New parameters for defining fallback click handlers
that will be triggered for the whole window unless
a module action is matched.

Parameters added to all [bar/foo] sections:

- `click-left = ...`
- `click-middle= ...`
- `click-right= ...`
- `scroll-up= ...`
- `scroll-down= ...`

Ref #226
2016-12-05 13:17:15 +01:00
Michael Carlberg
3854515521 fix: Wrap format pre/suffix within cmd 2016-12-05 05:32:10 +01:00
Michael Carlberg
7f5117b7cc fix(tray): Improve pseudo-transparency handling
- Make sure previously drawn content is cleared
- Redraw tray clients on XCB_EXPOSE
- Prevent void parts of the root pixmap being copied

Ref #187
2016-12-05 03:56:04 +01:00
Michael Carlberg
9eee27544d fix(renderer): Improve precision when shifting action blocks
Fixes #220
2016-12-04 13:50:30 +01:00
Michael Carlberg
44da14755d refactor(clang-tidy): Apply fixes 2016-12-04 04:11:47 +01:00
Michael Carlberg
9f16e3fff7 refactor: Rename dock to override-redirect 2016-12-03 23:21:40 +01:00
Michael Carlberg
d6a0c84e0b refactor(tray): Update using eventloop 2016-12-03 23:01:21 +01:00
Michael Carlberg
df85a6492e refactor(eventloop): Typed events 2016-12-03 23:00:41 +01:00
Michael Carlberg
bb0cfcf033 fix(tray): Visibility change 2016-12-03 20:26:29 +01:00
Michael Carlberg
a3f2e8aa51 fix: Reconfigure position after mapping
Ref #212
2016-12-03 18:38:35 +01:00
Michael Carlberg
6b51234f23 fix(screen): Only reload if changed 2016-12-03 16:44:37 +01:00
Michael Carlberg
086e498388 fix: Replace process on reload 2016-12-03 15:46:48 +01:00
Michael Carlberg
c6540a8950 refactor: Signaling 2016-12-01 08:56:16 +01:00
Michael Carlberg
0c6937edae feat(config): Inheritance
Add support for basic inheritance. The parser will
look for `inherit = base/section` and copy all undefined
values from the base section.

Ref #84
2016-12-01 07:57:30 +01:00
Michael Carlberg
d34263d850 fix(progressbar): Generate less data
Build the format sub-strings (%fill%, %indicator%, %empty%)
before adding it to the builder to avoid having it generate
alot of duplicate content (tags, etc)
2016-11-30 22:17:55 +01:00
Michael Carlberg
6db66896bd refactor(bspwm): Cleanup states 2016-11-30 21:12:47 +01:00
Franklin Delehelle
466e9e212f feat(bspwm): Separate focused/unfocused states
Closes #201
2016-11-30 21:04:22 +01:00
Michael Carlberg
608519363d feat(xkeyboard): New module
New module that uses the X keyboard extension
to show keyboard layout and indicators.

Ref #84, #200
2016-11-30 10:08:44 +01:00
Michael Carlberg
4852f2817c feat: Reload on XCB_RANDR_SCREEN_CHANGE_NOTIFY 2016-11-27 01:14:02 +01:00
Michael Carlberg
9f4638f42c refactor: Cleanup 2016-11-26 06:13:20 +01:00
Michael Carlberg
c2acdff7d4 feat(eventloop): Delayed enqueue
A new worker that will block the queue channel
until the delayed event has been processed.

This is used to limit the amount of X button events
within defined time frame and we can't block
the main X thread.
2016-11-25 21:58:51 +01:00
Michael Carlberg
ff9be848c7 refactor(clang-tidy): Apply fixes 2016-11-25 21:58:49 +01:00
Michael Carlberg
6f2b437be3 fix(renderer): Destroy window on deconstruct 2016-11-25 14:17:56 +01:00
Michael Carlberg
8db3e79919 refactor(clang-format): Apply fixes 2016-11-25 14:17:41 +01:00
Michael Carlberg
9fdc22843b refactor: Cleanup rendering 2016-11-25 04:42:27 +01:00
Michael Carlberg
84d58e7619 refactor: Cleanup handling of syntax tags 2016-11-25 04:34:24 +01:00
Michael Carlberg
ad510eb768 fix(builder): Default to non-lazy mode
Ref #181
2016-11-22 23:31:08 +01:00
Michael Carlberg
4794ef653c refactor(renderer): Separate methods 2016-11-22 23:18:47 +01:00
Michael Carlberg
c6e861083b fix: Avoid unnecessary color change
Ref #181
2016-11-22 22:45:12 +01:00
Michael Carlberg
09e0ea1932 config: Print deprecation warnings 2016-11-22 03:01:50 +01:00
Michael Carlberg
0c64b64ff8 refactor: Cleanup 2016-11-22 01:22:47 +01:00
Michael Carlberg
83ef8bcd0c fix(build): Size type 2016-11-21 16:32:56 +01:00
Michael Carlberg
ebf1bd1129 feat: Support different under-/overline
Make it possible to set different size
and color values for the two properties.

`overline-size = 2`
`overline-color = #f00`
`underline-size = 5`
`underline-size = #00f`
2016-11-21 16:16:06 +01:00
Michael Carlberg
25e33b6aab refactor: Separate render component 2016-11-21 16:16:02 +01:00
Michael Carlberg
002eb08b20 fix(build): Explicit type for list initialization 2016-11-20 23:29:42 +01:00
Michael Carlberg
c6d85b2b92 refactor: Optimize build 2016-11-20 23:04:31 +01:00
Michael Carlberg
40fcabd644 fix(config): Proper dereference of ${self.key} 2016-11-19 19:18:28 +01:00
Michael Carlberg
88c8bbd940 refactor: Fwd declare drawtypes
Ref #164
2016-11-19 15:49:06 +01:00
Michael Carlberg
fd57ab0f3d fix: project rename 2016-11-19 06:26:07 +01:00
Michael Carlberg
2fd88c4f60 feat(ipc): New message type "action:"
Adds a new message type, prefixed "action:"
that will perform the same task as mouse actions.

This could be used to control menu modules:

  echo action:menu-open-1 > /tmp/lemonbuddy_mqueue.<pid>
  echo action:menu-close > /tmp/lemonbuddy_mqueue.<pid>

Ref #84
2016-11-18 18:37:53 +01:00
Michael Carlberg
1b5979ba10 feat(config): Default reference values
- Add fallback values to env/xrdb references:

  ${env:UNEXISTING:fallback value}
  ${xrdb:UNEXISTING:fallback value}

- Replace ${BAR.key} with ${root.key} and display
  deprecation warning if the former is used
2016-11-18 18:04:24 +01:00
Michael Carlberg
70a5f1d41e fix: Bottom strut relative to screen 2016-11-15 02:28:42 +01:00
Michael Carlberg
ffe76b0556 fix(tray): Avoid tray redraw on bar update 2016-11-15 01:00:51 +01:00
Michael Carlberg
e3065d0e6c feat(ipc): New ipc module
Add a new module that allow users to configure hooks
on received ipc messages. The hook will execute the defined
shell script and the output of the script will be used
as the module content.

Ref #84
2016-11-14 09:26:40 +01:00
Michael Carlberg
4b0e648cb8 refactor: Cleanup 2016-11-14 00:46:50 +01:00
Michael Carlberg
489f3ce480 wip: Inter-process messaging 2016-11-13 19:05:30 +01:00
Michael Carlberg
c480f6fd1e refactor: Move strut handling to window class 2016-11-13 16:10:20 +01:00
Michael Carlberg
4224d838a8 refactor(bar): Strut values based on EMWH spec 2016-11-13 13:25:57 +01:00
Michael Carlberg
23996fdcdc refactor: Tray transparency and code cleaning
- Make pseudo-transparency work as intended, fixes #158
- Fill tray pixmap in case a root pixmap is not found
- Split up bar bootstrap routine
- Formatting (clang-format)
2016-11-12 13:09:50 +01:00
Michael Carlberg
869c5fe718 refactor: Code cleanup 2016-11-04 19:21:56 +01:00
Michael Carlberg
ae501d6ae1 fix(tray): Support for pseudo transparency
Copy contents from the root pixmap onto the background

Fixes #125
2016-11-04 19:01:51 +01:00
Michael Carlberg
e7cb345cec wip: Separate source from definitions 2016-11-03 12:54:32 +01:00
Michael Carlberg
de3e0458a6 fix(tray): Catch restack failure 2016-10-31 05:37:51 +01:00
Michael Carlberg
738fc2a216 feat: Offset window position using % 2016-10-31 05:13:59 +01:00
Michael Carlberg
fe03570b5a fix(tray): Target correct atom 2016-10-31 02:36:43 +01:00
Michael Carlberg
94298741b6 tray: Align center and extend configuration
- The tray can now be centered in the bar
- Set window atoms:
  * _NET_SYSTEM_TRAY_COLORS
  * _NET_SYSTEM_TRAY_VISUAL
- New parameters added:
  * tray-background: Define background color
  * tray-offset-x: X position offset
  * tray-offset-y: Y position offset
  * tray-padding: Add spacing on the side of each icon
  * tray-maxsize: Size limit for tray icons, default: 16
  * tray-scale: Icon zoom, default: 1.0
  * tray-detached: The bar will ignore tray updates
2016-10-31 01:41:15 +01:00
Michael Carlberg
dd7967dede fix(controller): Check for connection error in eventloop 2016-10-31 01:25:45 +01:00
Michael Carlberg
55c9bf27ba fix(controller): Uninstall sigmask on blocked term signal 2016-10-30 18:48:15 +01:00
Michael Carlberg
2f7ec4ceee fix: Alpha channel out of line 2016-10-30 08:04:59 +01:00
Michael Carlberg
c9af239516 fix: Widen color channels 2016-10-30 07:46:28 +01:00
Michael Carlberg
efba06dc2d fix(xft): Allocate xft color by value
- Solves the issue with transparency using Xft.
- X11 fonts are still affected by the alpha issue.

Closes jaagr/lemonbuddy#119
2016-10-30 02:37:56 +01:00
Michael Carlberg
41ba9beeee fix(fontmanager): Make sure font contains characters 2016-10-29 21:27:51 +02:00
Michael Carlberg
c3969e85ef fix(fontmanager): Add safety check 2016-10-29 21:06:56 +02:00
Michael Carlberg
1075144b00 refactor(eventloop): Use concurrent queue for events
Events are now enqueued using a thread safe concurrent queue
which makes the previous eventloop locking redundant.
2016-10-29 06:48:51 +02:00
Michael Carlberg
17921823e0 fix(controller): Change verbosity of shutdown logging 2016-10-28 18:58:55 +02:00
Michael Carlberg
fa7e3d4430 fix(script): Terminate running commands
Make sure the previous command has ended before
executing a new command.

This also fixes the execution block that was
caused by the tailing the command output of
action commands.

Fixes jaagr/lemonbuddy#131
2016-10-28 18:54:08 +02:00
Michael Carlberg
2cc6ef662a fix(config): ${self.key} references the current section 2016-10-28 13:36:53 +02:00
Michael Carlberg
2661e87d83 fix(tray): Synchrounous unmap of empty tray window 2016-10-26 15:17:33 +02:00
Michael Carlberg
a1c018193a fix(tray): Catch errors caused from invalid X windows 2016-10-26 13:42:40 +02:00
Michael Carlberg
4167c8c11c fix(bar): Allow true transparency
Fixes jaagr/lemonbuddy#119
2016-10-26 02:24:10 +02:00
Michael Carlberg
204ab89921 fix(bar): Use premultiplied rgb color for X fonts
Closes jaagr/lemonbuddy#119
2016-10-26 01:50:37 +02:00
Michael Carlberg
fb7a59c6d9 fix(bar): Properly flush xcb connection
Closes jaagr/lemonbuddy#114
2016-10-25 23:58:29 +02:00
Michael Carlberg
91a9bb6d95 refactor(tray): Better support for conflicting managers
Listen for destroy event on the new manager window when
systray selection is lost. If the window gets destroyed
we can re-activate the manager.
2016-10-25 22:59:02 +02:00
Michael Carlberg
2529ec0520 fix(logger): Add pragmas to silence GCC error 2016-10-25 22:47:31 +02:00
Michael Carlberg
eac65cdabb fix(cmake): Make specific c++lib linking optional
- Do not enforce linking against libc++
- Fix various linter warnings
2016-10-25 20:47:53 +02:00
Michael Carlberg
83ae9f6435 fix(xbacklight): Allow larger property values
Not all backlight values are within 8 bit range
so do not truncate property values
2016-10-25 16:40:01 +02:00
Michael Carlberg
9496e9aa22 feat(logger): trace_x() for verbose trace logging 2016-10-25 13:10:34 +02:00
Michael Carlberg
7a1193c698 fix: Increase SIGKILL termination timer 2016-10-25 08:45:21 +02:00
Michael Carlberg
d2187f44e0 refactor(drawtypes): Cleanup and fixes 2016-10-25 07:10:05 +02:00
Michael Carlberg
7905f37462 refactor(di): Move configure_T() to anonymous ns 2016-10-25 01:55:59 +02:00
Michael Carlberg
bcf9249dc7 refactor: Use plain std::function callbacks
Replace fastdelegate with plain std::function's because
of incomplete clang support
2016-10-25 01:51:57 +02:00
Michael Carlberg
56b4657c3f feat: New module xbacklight
Better implementation for showing backlight information.
This one is using the XRandR extension instead of
reading from the raw file handlers.
2016-10-19 14:46:44 +02:00
Michael Carlberg
3c0cc72c55 fix(config): Test type and not value 2016-10-19 10:06:29 +02:00
Michael Carlberg
94ded75756 feat(config): Reference values defined in Xresources
Add config tag to reference a value defined in the Xresource db

`parameter = ${xrdb:var_name}`
2016-10-19 09:16:09 +02:00
Michael Carlberg
d879d6d42e fix: Throttle X input events
- Limit the amount of allowed input events
- Yield on lock failure
- Cleanup
2016-10-19 06:03:01 +02:00
Michael Carlberg
68f72d69cc refactor: Drop tokenized labels
Handle placeholder tokens inside each label
instead of cloning into a new instance each time
2016-10-19 01:31:17 +02:00
Michael Carlberg
7e960a3966 fix(script): Rerun tail script when done
- Improve handling of command life time proc
- Restart tail command on successful completion
- Should fix jaagr/lemonbuddy#105
2016-10-19 01:31:05 +02:00
Michael Carlberg
01c5dcb6b7 fix: Guarded module teardown 2016-10-18 17:55:34 +02:00
Michael Carlberg
f09858a1ed fix(controller): Checked request to update root window event mask 2016-10-18 17:53:10 +02:00
Michael Carlberg
5323167b1e fix(xrandr): Ignore harmless extension errors
Closes jaagr/lemonbuddy#106
2016-10-18 17:31:58 +02:00
Michael Carlberg
65b921ecd9 fix: Less verbose debug logging for %{A} 2016-10-18 12:22:14 +02:00
Michael Carlberg
de0c3eb46a fix(parser): Support default button index for actions
Defining an action without a button index caused a segfault since
the parser was treating it as the close of a previously opened action
block. This makes the parser use button LEFT as a fallback.

Also ensure that an action block has been opened before
attempting to close the block.

Fixes jaagr/lemonbuddy#104
2016-10-17 05:55:03 +02:00
Michael Carlberg
c1acf6c05f fix: Clear the pixmap properly when shifting content
Closes jaagr/lemonbuddy#100
2016-10-16 12:27:30 +02:00
Michael Carlberg
17e16d18a9 fix(i3): Make tray copy the bar' visibility state
This adds a fallback routine where the tray window will
get notified whenever the bar window changes its visibility
state. Required in case of failure to restack the tray container
above the bar window in the window stack.

Fixes jaagr/lemonbuddy#95
2016-10-15 20:10:40 +02:00
Michael Carlberg
0128168c51 fix: Update _NET_WM_* atoms for the bar window 2016-10-15 20:07:05 +02:00
Michael Carlberg
1445b95af8 refactor: Moved global signals to separate namespace 2016-10-15 19:45:17 +02:00
Michael Carlberg
20991a3465 fix(tray): Handle error when trying to restack window 2016-10-15 14:51:37 +02:00
Michael Carlberg
178b656d08 fix(tray): Catch error while processing docking requests 2016-10-15 14:00:33 +02:00
Michael Carlberg
bcd1774370 fix(tray): Put tray above bar in the window stack
Closes jaagr/lemonbuddy#94
2016-10-15 13:59:25 +02:00
Michael Carlberg
dc82d0ed57 refactor(script): Make the module behave as intended
Tail script now block execution until there's data
available on the script's output stream.

Running commands are also being terminated properly.
2016-10-15 13:15:56 +02:00
Michael Carlberg
ce93a63cb8 fix: Terminate if there are no configured modules 2016-10-15 13:10:08 +02:00
Michael Carlberg
98b5bae096 fix: Offset initial module update to avoid throttling 2016-10-15 13:09:22 +02:00
Michael Carlberg
0bac9c3f89 fix(tray): Deactivate the tray before removing the bar 2016-10-15 03:58:53 +02:00
Michael Carlberg
1ab0724347 fix(tray): Join notify thread after setting activate state 2016-10-15 03:33:35 +02:00
Michael Carlberg
6b0109e8dd fix(tray): Make sure stray clients are notified
If the tray is being activated while clients are in
the process of getting dismissed by another MANAGER
they will not receive the new MANAGER broadcast.

Delayed broadcasts are sent to make sure they're notified.
2016-10-15 03:20:19 +02:00
Michael Carlberg
048f09abc3 fix(logger): Use correct fd when testing if it's a tty 2016-10-15 02:40:05 +02:00
Michael Carlberg
fcd30c5320 fix: Revert to old offset behaviour
The offset-x should not affect the width
of the bar window

Closes jaagr/lemonbuddy#79
2016-10-14 10:38:06 +02:00
Michael Carlberg
789345291b fix(date): Use configured locale if defined
Fixes jaagr/lemonbuddy#74
2016-10-12 16:49:53 +02:00
Michael Carlberg
343d1a2ff2 fix(tray): Respond to client XCB_RESIZE_REQUEST 2016-10-12 10:50:14 +02:00
Michael Carlberg
1d7d45c4cd fix(i3): Conditionally load i3_utils 2016-10-12 06:19:26 +02:00
Michael Carlberg
2af0d0845d fix(docs): Updated README and configs
Use dash instead of underscore as parameter name separator
Will break alot of configs but people like to work!
2016-10-12 05:19:31 +02:00
Michael Carlberg
774dec5d17 refactor(i3): Rewrite of the i3 module 2016-10-12 03:57:22 +02:00
Michael Carlberg
eb38fb85ac fix: Make the application work properly using i3wm 2016-10-11 23:42:01 +02:00
Michael Carlberg
e1b6238564 feat: Restack-to-root
Fixes the issue where the bar window is being
drawn on top of fullscreen window's
2016-10-11 18:55:41 +02:00
Michael Carlberg
44ca3bef2c fix(controller): Try to acquire lock for 50ms on module update
Allow short bursts since we want to handle all events
when starting the modules.
2016-10-11 16:10:26 +02:00
Michael Carlberg
b7f9cb2820 fix(ci): Forward decl. error 2016-10-11 15:31:52 +02:00
Michael Carlberg
fb6e5ea378 fix(logger): Ignore GCC warning 2016-10-11 14:13:11 +02:00
Michael Carlberg
55a5c5d896 fix: Pass xcb_params_t by value 2016-10-11 13:48:50 +02:00
Michael Carlberg
d23119e24e fix(build): Make project compile using gcc5/gcc6 2016-10-11 12:58:26 +02:00
Michael Carlberg
c79d8dfea4 fix: Handle unsupported modules 2016-10-11 10:05:23 +02:00
Michael Carlberg
4055778468 fix(logger): Use STDERR as default output channel 2016-10-11 08:34:34 +02:00
Michael Carlberg
39bfcb15e1 fix(command_line): Correct handling of long argument value
Use correct format for passing values using the long version
of the option, e.g: --arg=value
2016-10-11 08:31:46 +02:00
Michael Carlberg
bcb6894496 refactor: Do not redefine default bar values 2016-10-11 08:18:25 +02:00
Michael Carlberg
12bfa5c89f fix: Map bar window when fully configured 2016-10-11 08:16:22 +02:00
Michael Carlberg
89d645539c refactor: Drop modules on failure
If a module error occur, just stop the failing
module and let the application keep running.
2016-10-11 08:13:42 +02:00
Michael Carlberg
565a6d7032 refactor(controller): Force shutdown if dead lock
If the mutex haven't been successfully locked after
3 seconds, force shutdown by raising SIGKILL.
This to ensure termination in case of a dead lock.
2016-10-11 05:10:34 +02:00
Michael Carlberg
20350e5fe6 fix: Make sure clickable areas are aligned properly
- Avoid odd glyph width's for center-aligned text
since it breaks the positioning of clickable area's

- Added visual hints for clickable areas for debugging
2016-10-11 03:19:53 +02:00
Michael Carlberg
2921239833 fix(command_line): Use specific exceptions 2016-10-10 20:23:52 +02:00
Michael Carlberg
7efb2fc47a fix(command_line): Parse long arguments 2016-10-10 19:18:30 +02:00
Michael Carlberg
a9553ff850 refactor: Cleanup 2016-10-10 18:58:57 +02:00
Michael Carlberg
c687b07cd0 fix: Handle mouse button click/scroll events 2016-10-10 18:05:58 +02:00
Michael Carlberg
8af7388c93 fix: Use module separator from config 2016-10-10 15:50:58 +02:00
Michael Carlberg
d359ab6057 refactor: Application rewrite 2016-10-10 14:52:57 +02:00