Viktar Lukashonak
86a38980e4
c++20. clock chrono API. STL + format
...
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-11-10 17:57:26 +03:00
Alexis Rouillard
e24adbc3c2
Merge pull request #2612 from ErikReider/privacy-module
...
Add Privacy Module
2023-11-06 09:42:35 +01:00
Yaroslav Chvanov
c420b40668
refactor(backlight): use concrete types for some helper functions
...
This fixes linking of the best_device() function with 'mold' linker.
2023-11-04 18:31:25 +03:00
Erik Reider
6050fa3a43
Added documentation
2023-11-04 15:16:13 +01:00
Erik Reider
ca7c9a68f1
Made creation of privacy modules more modular
2023-11-04 14:05:01 +01:00
Alex
e7c2e90236
Revert "custom: reap zombie processes on termination"
...
This reverts commit 1c1a39f597
.
2023-11-03 14:06:50 +01:00
André Silva
1c1a39f597
custom: reap zombie processes on termination
2023-11-02 01:57:55 +00:00
Viktar Lukashonak
9012cebbf2
Happy Linter
...
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-10-31 23:31:58 +03:00
Alexis Rouillard
6425bd2fe0
Merge pull request #2623 from LukashonakV/cavaBump
2023-10-31 21:13:52 +01:00
Viktar Lukashonak
e9a66d68b7
Fix debug mode. cava issue
...
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-10-31 20:27:00 +03:00
Erik Reider
49caa4bf31
Add the PrivacyNodeInfo object as pw_proxy data
2023-10-31 11:38:01 +01:00
Erik Reider
c60a8e9836
free pipewire listeners on proxy destruction
2023-10-31 08:52:54 +01:00
Erik Reider
c4226f3745
Readded signal_timeout instead of map to fix indicator being stuck
2023-10-30 18:01:47 +01:00
Erik Reider
d32da917e4
Added tooltips
2023-10-29 00:17:53 +02:00
Erik Reider
46e36c0e68
Simplified the privacy_item hiding/showing logic
2023-10-28 18:30:50 +02:00
Erik Reider
4a4c888d7d
Fixed linter complaining
2023-10-27 00:01:40 +02:00
Erik Reider
e73ea8d608
Fixed cases where the module would be hidden when it should be visible
2023-10-26 23:37:10 +02:00
Erik Reider
f7224d8459
Initial implementation
2023-10-26 23:22:02 +02:00
Crom (Thibaut CHARLES)
02c64f3f1e
Moved all waybar info into a single struct
2023-10-24 20:16:50 +02:00
Crom (Thibaut CHARLES)
d86059016e
Send update dispatcher though FFI
2023-10-24 20:16:50 +02:00
Crom (Thibaut CHARLES)
088ca6b963
Added cffi/* module for third-party advanced modules
2023-10-24 20:16:50 +02:00
Crom (Thibaut CHARLES)
6ae354f564
PoC
2023-10-24 20:16:23 +02:00
Tamino Bauknecht
68dfd6aa3a
scope_guard/modules: Rename scope_guard to ScopeGuard
...
Using pascal case for the class name keeps it more consistent with the
majority of the other class names.
2023-10-24 17:51:38 +02:00
Tamino Bauknecht
dd1de3efbf
Revert "Revert "Fix potential memory leaks""
...
This reverts commit 2d33c20231
and
reapplies various patches for memory leaks.
The reason for the revert was a bug for a maximum duration interval
which caused sleep_for() to cause unpredictable behavior.
2023-10-24 17:51:38 +02:00
Tamino Bauknecht
521dac8086
sleeper_thread: Make sleep_for more robust
...
In the previous fix for a passed max duration, the assumption was made
that at maximum one second will pass between the duration assignment and
the std::condition_variable::sleep_for() call.
This implementation makes the behavior more predictable by using
sleep_until() instead to emulate the sleep_for() behavior.
2023-10-24 17:51:34 +02:00
Tamino Bauknecht
ad7d4eb07d
sleeper_thread: Allow sleep_for with max duration
...
The standard library has the implicit requirement that for
std::condition_variable::sleep_for() the duration must not cause an
overflow if added to the current time.
This commit will reduce the duration accordingly to fit into the
duration type.
2023-10-24 17:44:35 +02:00
Alexis Rouillard
f2085fcd92
Merge pull request #2592 from zjeffer/hyprland/workspaces
...
General cleanup in hyprland/workspaces
2023-10-23 08:45:52 +02:00
Alexis Rouillard
2d33c20231
Revert "Fix potential memory leaks"
2023-10-22 09:44:46 +02:00
zjeffer
dab1493644
cleanup onEvent, dont use try/catch for flow control
2023-10-21 19:33:55 +02:00
zjeffer
2d614c68f5
code review
2023-10-21 18:15:22 +02:00
zjeffer
ed65d9cdbd
General cleanup in hyprland/workspaces
2023-10-21 16:52:23 +02:00
Alexis Rouillard
06f4028697
Merge pull request #2588 from taminob/bugfix/fix-custom-module-signal-without-interval
...
Custom module: Allow signal without interrupt
2023-10-21 14:09:12 +02:00
Tamino Bauknecht
ae748b2644
modules+util: fix actual (potential) memory leaks
2023-10-21 11:51:33 +02:00
Tamino Bauknecht
a73669be6a
modules/upower: use smart pointer to avoid memory leak
2023-10-21 11:50:28 +02:00
Tamino Bauknecht
8c57756556
util: add scope_guard
...
This custom small implementation avoids adding an extra dependency like
Boost.ScopeExit
2023-10-21 11:50:06 +02:00
Tamino Bauknecht
b8afde043c
sleeper_thread: allow interrupting sleep()
...
This keeps the function consistent with sleep_until() and sleep_for()
which both can be interrupted.
This is relevant to allow an update via a "signal" without an "interval"
in a custom module.
2023-10-20 23:57:54 +02:00
Alexis Rouillard
eefd6e8336
Merge pull request #2578 from Syndelis/fix/hyprland-windows-disappearing
2023-10-20 10:24:56 +02:00
Brenno Lemos
a41225c4e0
Revert "fix: fill persistent workspaces' windows at init"
...
This reverts commit e14a3b8687
.
2023-10-19 21:23:00 -03:00
Brenno Lemos
a0d2d95b41
chore: remove unused function
2023-10-19 21:21:55 -03:00
Brenno Lemos
e14a3b8687
fix: fill persistent workspaces' windows at init
2023-10-19 21:19:08 -03:00
Brenno Lemos
193040c41e
feat: attempt to move windows out of the create window payload before taking them from workspaces
2023-10-18 19:11:49 -03:00
Alex
208928ded5
fix: lint
2023-10-17 19:29:06 +02:00
Alexis Rouillard
6b73e2aa58
Merge pull request #2114 from mmhat/split-cpu-module
...
Split cpu module
2023-10-17 19:25:29 +02:00
Brenno Lemos
6ddd283d0f
fix: special workspaces weren't registering windows because of the special qualifier prefix
2023-10-16 20:48:52 -03:00
Brenno Lemos
e70a67d958
chore: lint
...
chore: swap push_back to emplace_back
2023-10-16 19:14:50 -03:00
Brenno Lemos
67c0c9a66c
fix: delay window creation to await for hyprland to create a workspace
2023-10-16 19:07:00 -03:00
Brenno Lemos
ecbcf242d5
feat: allow unmuting by moving the pulseaudio slider
2023-10-15 17:52:12 -03:00
Brenno Lemos
11d7ca1d73
feat: backlight slider
2023-10-15 17:52:12 -03:00
Brenno Lemos
c3779dd16e
refactor: move backlight backend out of backlight module
2023-10-15 17:52:12 -03:00
Brenno Lemos
442a4b0da0
feat: pulseaudio slider module
2023-10-15 17:52:12 -03:00
Brenno Lemos
c9e129cda2
feat: allow setting volume directly
2023-10-15 17:52:12 -03:00
Brenno Lemos
64d7fae03a
refactor: move pulseaudio handling to separate class
2023-10-15 17:52:12 -03:00
Alexis Rouillard
93daf089b5
Merge pull request #2574 from Syndelis/feat/group-drawers
2023-10-15 21:26:04 +02:00
Alexis Rouillard
7645ae1907
Merge pull request #2563 from Syndelis/feat/hyprland-window-rename-by-title
2023-10-15 21:21:32 +02:00
Alexis Rouillard
3d496c2200
Merge pull request #2554 from mutoroglin/cava-hide-on-silence
2023-10-15 21:19:17 +02:00
Brenno Lemos
5e44cb6ba2
refactor: move signal handler adding into separate method
...
fix: typo in handleMouseHover method name
2023-10-14 18:30:27 -03:00
Brenno Lemos
fad858782c
feat: improve drawer configuration
2023-10-14 18:24:50 -03:00
Brenno Lemos
5246ab15cb
feat: add drawer bool option to group
2023-10-14 17:17:52 -03:00
Brenno Lemos
bbb7fb0c82
refactor: don't use a group's box directly in bar
2023-10-14 13:23:11 -03:00
Brenno Lemos
c59264d6b4
fix: clang < 16 can't emplace back struct with no constructor
2023-10-12 17:30:32 -03:00
Brenno Lemos
ee652677a6
feat: ignore windows with empty classes or titles (if any rule uses title)
2023-10-11 11:40:49 -03:00
Brenno Lemos
c995bafa7a
feat: add option to ignore workspaces based on regex
2023-10-11 10:59:33 -03:00
Brenno Lemos
387e54498e
docs: document new regex collection class
2023-10-09 14:46:57 -03:00
Brenno Lemos
fad43d4b16
feat: listen to windowtitle IPC event condiationally to update window rules
2023-10-09 14:42:53 -03:00
Brenno Lemos
8d057e6f96
refactor: separate regex rule matching and caching in separate class
2023-10-09 13:53:00 -03:00
SWarrener
c16e791cdc
Adding options to allow disk outputs to always be in a specific unit
2023-10-08 16:24:50 +01:00
Joerg Weislogel
1eb0777799
add function to cava module to hide on silence
2023-10-07 12:50:24 +02:00
Brenno Lemos
258ab8b147
refactor: take window representation directly from old workspace on movewindow event
2023-09-22 21:12:42 -03:00
Brenno Lemos
adbc9d95de
feat: optional default icon for 0-match classes
...
Co-authored-by: Gabriel Fox <Inbox@GabrielFox.Dev>
2023-09-22 19:16:59 -03:00
Brenno Lemos
b9d5912a4f
feat: rewrite window classes
...
feat: cache window class rewrite resolution
Co-authored-by: Gabriel Fox <Inbox@GabrielFox.Dev>
2023-09-22 19:16:53 -03:00
Brenno Lemos
3e2761e81f
feat: dynamically assign windows to workspaces
...
Co-authored-by: Gabriel Fox <Inbox@GabrielFox.Dev>
2023-09-22 19:12:50 -03:00
Evan Overman
bf371f70d1
add `waitingWorker()` to `Custom`
2023-09-18 14:56:14 -07:00
Evan Overman
7c28ffc856
add indefinite `sleep()` function to `SleeperThread`
2023-09-18 14:55:50 -07:00
Mann mit Hut
8d7341da6e
cpu module: Reuse getLoad of load module
2023-09-13 21:56:37 +02:00
Mann mit Hut
d1602e383c
cpu module: Reuse getCpuUsage of cpu_usage module
2023-09-13 21:56:36 +02:00
Mann mit Hut
c45f6681b3
cpu module: Reuse getCpuFrequency of cpu_frequency module
2023-09-13 21:56:35 +02:00
Mann mit Hut
dce6a98f38
Added changes made to the cpu module
2023-09-13 21:56:34 +02:00
Mann mit Hut
982ffde002
Use labels instead of buttons
2023-09-13 21:56:33 +02:00
Mann mit Hut
888adb57ec
Introduce cpu_usage module
2023-09-13 21:56:32 +02:00
Mann mit Hut
c36fe3a004
Introduce cpu_frequency module
2023-09-13 21:56:31 +02:00
Mann mit Hut
729564cc27
Introduced separate load module
...
The module provides the three system load averages. This is an
improvement compared what you can do with the cpu module: cpu
only provides the one minute sample and the state of the cpu module is
derived from the cpu usage which messes up the formating of the load
average. Also, at least on modern Linux systems, the load of a system
takes much more than the cpu utilization into account and it should
therefore live in a separate module.
2023-09-13 21:56:30 +02:00
Alexis Rouillard
fc67558717
Merge branch 'master' into darkmode
2023-09-11 09:25:45 +02:00
Austin Horstman
79cf33b9f1
refactor: enumparser create implementation file
2023-09-09 17:59:40 -05:00
Austin Horstman
b8630968b2
refactor: move capitalize string helper
2023-09-09 13:23:17 -05:00
Austin Horstman
2fee12d930
fix: enumparser capitalize everything to avoid issues
2023-09-09 12:14:52 -05:00
Austin Horstman
3ae2fe3272
refactor: PR review cleanup
2023-09-09 12:08:30 -05:00
Austin Horstman
2b8c92e8fd
refactor: enum utility allow overriding
2023-09-09 11:18:12 -05:00
Austin Horstman
8ce64ea784
refactor: make parsing sort-by more lenient
2023-09-09 10:04:49 -05:00
Austin Horstman
8ea2626de8
refactor: sort-by enum hyprland
2023-09-09 10:04:48 -05:00
Austin Horstman
cbc12e5443
feat: hyprland workspaces add sort-by
2023-09-08 22:49:15 -05:00
Austin Horstman
587bd0cd62
refactor: cleanup hyprland workspaces constructor
2023-09-08 22:24:05 -05:00
Calvin Lee
9bb2c01a44
clean up client.cpp
2023-09-07 13:43:59 +00:00
Calvin Lee
09873f0ed9
search for dark or light mode stylesheet
...
summary:
-------
This commit adds xdg-desktop-portal support to waybar. If a portal
supporting `org.freedesktop.portal.Settings` exists, then it will be
queried for the current colorscheme. This colorscheme will then be used
to prefer a `style-light.css` or `style-dark.css` over the basic
`style.css`.
technical details:
-----------------
Appearance is provided by several libraries, such as libhandy (mobile)
and libadwaita. However, waybar links to neither of these libraries. As
the amount of code required to communicate with xdg-desktop portal as a
client is rather minimal, I believe doing so is better than linking to
an additional library.
The Gio library for communicating with dbus is rather messy, Instead of
the `Portal` class containing a `Gio::Dbus::Proxy`, it extends it which
simplifies signal handling.
`Portal` then exposes its own signal, which can be listened to by waybar
to update CSS.
For a reference implementation, please see another one of my projects:
https://github.com/4e554c4c/darkman.nvim/blob/main/portal.go
test plan:
---------
If no desktop portal which provides `Settings` exists, then waybar
continues with the log line
```
[2023-09-06 14:14:37.754] [info] Unable to receive desktop appearance: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.Settings” on object at path /org/freedesktop/portal/desktop
```
Furthermore, if `style-light.css` or `style-dark.css` do not exist, then
`style.css` will still be searched for.
Waybar has been tested with both light and dark startup. E.g. if the
appearance is dark on startup the log lines
```
[2023-09-06 14:27:45.379] [info] Discovered appearance 'dark'
[2023-09-06 14:27:45.379] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/style-dark.css
[2023-09-06 14:27:45.379] [debug] Found config file: $XDG_CONFIG_HOME/waybar/style-dark.css
[2023-09-06 14:27:45.379] [info] Using CSS file /home/pounce/.config/waybar/style-dark.css
```
will be observed.
If the color then changes to light during the operation of waybar, it
will change css files:
```
[2023-09-06 14:28:17.173] [info] Received new appearance 'dark'
[2023-09-06 14:28:17.173] [debug] Try expanding: $XDG_CONFIG_HOME/waybar/style-light.css
[2023-09-06 14:28:17.173] [debug] Found config file: $XDG_CONFIG_HOME/waybar/style-light.css
[2023-09-06 14:28:17.173] [info] Using CSS file /home/pounce/.config/waybar/style-light.css
```
Finally, tested resetting waybar and toggling style (works, and style is
only changed once).
fixes : Alexays/Waybar#1973
2023-09-06 15:19:56 +00:00
zjeffer
04b39ea64e
hyprland/workspaces: implement 'active_only' option and visible class
2023-09-05 18:22:54 +02:00
Maxim Baz
9c49f46b01
hyprland/workspaces: react on renameworkspace event
2023-09-05 17:13:25 +02:00
Alexis Rouillard
2d27e484c7
Merge pull request #2417 from Cherser-s/sni-click-coordinate-fix
...
sni: fix passing relative coordinates to dbus methods
2023-09-04 22:01:04 +02:00
Austin Horstman
ce076927f3
chore: cpplint fixes hyprland headers
2023-09-02 23:56:04 -05:00
Alexis Rouillard
82b7e4ea01
Merge pull request #2414 from KosmX/add_release_v2
...
Release button event second attempt
2023-09-01 09:08:23 +02:00
Cherser-s
65dfabc430
sni: fix passing relative coordinates to dbus methods
...
Doesn't correctly handle the case with both margin and width/height being set at the same time.
2023-08-25 20:37:16 +03:00
Cherser-s
936937ec78
store margins and global window offset in the bar object
2023-08-25 20:37:14 +03:00
Austin Horstman
ee4fbc58f7
hyprland add urgent ipc support
2023-08-23 12:52:29 -05:00
asas1asas200
54a6668846
feat(keyboard-state): add binding-keys options
2023-08-20 08:33:34 +08:00
KosmX
2ff347f9a8
Add handleRelease method to release events
...
This commit shouldn't change the handleToggle behaviour,
it shouldn't break anything.
2023-08-16 17:14:49 +02:00
KosmX
1d8331d0c5
Add release events to event map
2023-08-16 17:12:32 +02:00
PucklaJ
22817089db
Add no-controller format to bluetooth module
2023-08-16 15:34:06 +02:00
Alex
b5ea14c896
revert: release event
2023-08-16 13:31:24 +02:00
Jan Palus
c8237437d2
Explicitly cast ustring to string when passing to fmt
...
don't rely on implicit conversion which is no longer present in fmt
10.1.0
Fixes #2403
2023-08-15 20:57:07 +02:00
Alex
db1d859881
fix: lint
2023-08-14 14:20:08 +02:00
KosmX
46f5034030
Add button release events to eventMap
2023-08-13 18:20:43 +02:00
zjeffer
600653538b
Persistent workspaces in hyprland/workspaces
2023-07-30 11:47:37 +02:00
Alexis Rouillard
c087d8c318
Merge pull request #2316 from MightyPlaza/workspaces
...
hyprland/workspaces improvements
2023-07-24 13:40:23 +02:00
Viktar Lukashonak
4d9e0ea802
time conversion between time zones
...
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-07-24 01:21:33 +03:00
dmitry
d3bcff31e5
add high-priority-named optiion
2023-07-20 22:56:15 +03:00
MightyPlaza
d3e7a8c797
Merge branch 'Alexays:master' into workspaces
2023-07-17 22:38:13 +00:00
zjeffer
2721e19ee6
small improvements
2023-07-17 16:22:59 +02:00
Patrick Nicolas
f62b3d0e9d
Ensure signal is disconnected in destructor
2023-07-16 23:29:28 +02:00
MightyPlaza
6d24b22b21
moves createWorkspace to update()
2023-07-16 01:43:54 +00:00
MightyPlaza
4f81e55e41
workspaces.hpp
2023-07-16 01:20:30 +00:00
MightyPlaza
495b63d7dc
workspaces.hpp
2023-07-15 17:44:57 +00:00
gardenapple
daca57129f
hyprland/window: rename .hidden to .swallowing (and fix grouped windows)
2023-07-12 19:01:45 +03:00
MisterPine
a8a1a4985f
Add removed secondary identifier
...
(class for xwayland under sway)
2023-07-10 23:48:18 +02:00
MisterPine
31683d9e2a
Implemented AAppIconLabel for sway/window
2023-07-10 22:55:46 +02:00
MisterPine
00e143d47e
Introducce AAppIconLabel class
...
Implemented for hyprland
2023-07-10 22:50:58 +02:00
MisterPine
a373f6b654
Icon working
2023-07-10 22:02:03 +02:00
MisterPine
f97c1c7136
remove getWindowData
2023-07-08 23:22:29 +02:00
MisterPine
c5f1771375
Use already existing `queryActiveWorkspace()`
2023-07-08 22:40:16 +02:00
MisterPine
c4bace504c
Separate query and struct
2023-07-08 22:40:16 +02:00
Alexis Rouillard
3299d4a25c
Merge pull request #2270 from gardenappl/hypr-backend
...
hyprland/window: Add .hidden CSS class, account for hidden & fullscreen windows
2023-07-05 08:14:49 +02:00
zjeffer
d21f29cb14
Fixed build warnings
2023-07-04 23:05:26 +02:00
Alexis Rouillard
0d1016d4d2
Merge pull request #2203 from rodrgz/mprisImprovement
...
mpris: dynamic tag ordering and separator customization
2023-07-04 22:44:21 +02:00
Alexis Rouillard
14fa9cf7b7
Merge pull request #2128 from Alan-Kuan/image-tooltip
...
Image tooltip
2023-07-04 22:40:04 +02:00
Alex
6c196b8f8d
fix: lint
2023-07-04 22:35:27 +02:00
Alexis Rouillard
265b4edb2e
Merge pull request #2276 from skligys/fix_mpris_ui_spamming
...
Stop MPRIS module from updating every ~20ms
2023-07-04 22:29:48 +02:00
Alexis Rouillard
bb61461aad
Merge pull request #2278 from Anakael/pr/anakael/hyprland-workspaces
2023-07-04 08:02:45 +02:00
dmitry
de626dcbbc
format
2023-07-04 01:24:34 +03:00
dmitry
c9b963e82b
fix segfault
2023-07-04 01:17:26 +03:00
André Aparício
a1cd0acac5
Fix random segfault on GTK icon functions
...
The segfaults were happening on GTK icon theme functions, which are
called via the C++ interface functions such as Gtk::IconTheme::has_icon.
There are multiple modules and threads using this functions on the default
icon theme by calling Gtk::IconTheme::get_default(), which returns the same
object for all callers, and was causing concurrent access to the same internal
data structures on the GTK lib. Even a seemingly read-only function such as
has_icon can cause writes due to the internal icon cache being updated.
To avoid this issues, a program wide global mutex must be used to ensure
a single thread is accessing the default icon theme instance.
This commit implements wrappers for the existing IconTheme function calls,
ensuring the global lock is held while calling the underling GTK functions.
2023-07-03 22:32:24 +01:00
Skirmantas Kligys
c2f9d889f4
Stop MPRIS module from updating every ~20ms as onPlayerMetadata(), onPlayerPlay()
...
callbacks get triggered without regard for update interval.
2023-07-03 13:52:57 -07:00
gardenapple
cdece498c1
hyprland/window: .solo class accounts for hidden & fullscreen windows
2023-07-02 20:58:42 +03:00
Alexis Rouillard
91588fb8bb
Merge pull request #2212 from evyatark2/wpscroll
...
wireplumber: Support for scrolling
2023-07-02 11:46:56 +02:00
Alex
9d741f89e2
fix: lint
2023-07-01 11:12:14 +02:00
Alex
cc4370f1b2
fix: build
2023-07-01 11:08:31 +02:00
Alexis Rouillard
85854c71d6
Merge pull request #2219 from xytovl/wake_threads_on_resume
...
Wake all sleeping threads when leaving suspend
2023-07-01 11:02:13 +02:00
dmitry
887c44bf68
finish MVP
2023-07-01 00:18:57 +03:00
dmitry
33236c222f
save
2023-06-28 02:52:01 +03:00
Erik Rodriguez
77a8420aaf
mpris: Add dynamic-order and dynamic-separator
...
This commit allows better handling of ordering and exclusion of the tags in Dynamics tags.
It also becomes possible to choose the separator between the tags.
2023-06-22 02:13:34 -03:00
gardenapple
30c4f08773
hyprland/window: Correct application of .solo class
2023-06-20 03:54:02 +03:00
gardenapple
4f14ce3285
hyprland/window: add .floating and .fullscreen CSS classes
2023-06-20 00:42:19 +03:00
gardenapple
e233022d1a
hyprland/window: Rework, add .empty, .solo and .<app_id> CSS classes
2023-06-19 23:44:20 +03:00
Viktar Lukashonak
17af49d421
Upower native-path filter
...
Signed-off-by: Viktar Lukashonak <myxabeer@gmail.com>
2023-06-09 18:22:24 +03:00