From d94ce591f20f0a561a68b239ece14f7f8fd487d9 Mon Sep 17 00:00:00 2001 From: "bozo.kopic" Date: Sun, 22 May 2022 03:02:28 +0200 Subject: gtk4 rewrite --- .clang-format | 65 ++++++ .gitignore | 2 +- README.rst | 12 +- build.sh | 10 +- convert_icons.sh | 16 -- feather/LICENSE | 21 -- feather/activity.svg | 1 - feather/airplay.svg | 1 - feather/alert-circle.svg | 1 - feather/alert-octagon.svg | 1 - feather/alert-triangle.svg | 1 - feather/align-center.svg | 1 - feather/align-justify.svg | 1 - feather/align-left.svg | 1 - feather/align-right.svg | 1 - feather/anchor.svg | 1 - feather/aperture.svg | 1 - feather/archive.svg | 1 - feather/arrow-down-circle.svg | 1 - feather/arrow-down-left.svg | 1 - feather/arrow-down-right.svg | 1 - feather/arrow-down.svg | 1 - feather/arrow-left-circle.svg | 1 - feather/arrow-left.svg | 1 - feather/arrow-right-circle.svg | 1 - feather/arrow-right.svg | 1 - feather/arrow-up-circle.svg | 1 - feather/arrow-up-left.svg | 1 - feather/arrow-up-right.svg | 1 - feather/arrow-up.svg | 1 - feather/at-sign.svg | 1 - feather/award.svg | 1 - feather/bar-chart-2.svg | 1 - feather/bar-chart.svg | 1 - feather/battery-charging.svg | 1 - feather/battery.svg | 1 - feather/bell-off.svg | 1 - feather/bell.svg | 1 - feather/bluetooth.svg | 1 - feather/bold.svg | 1 - feather/book-open.svg | 1 - feather/book.svg | 1 - feather/bookmark.svg | 1 - feather/box.svg | 1 - feather/briefcase.svg | 1 - feather/calendar.svg | 1 - feather/camera-off.svg | 1 - feather/camera.svg | 1 - feather/cast.svg | 1 - feather/check-circle.svg | 1 - feather/check-square.svg | 1 - feather/check.svg | 1 - feather/chevron-down.svg | 1 - feather/chevron-left.svg | 1 - feather/chevron-right.svg | 1 - feather/chevron-up.svg | 1 - feather/chevrons-down.svg | 1 - feather/chevrons-left.svg | 1 - feather/chevrons-right.svg | 1 - feather/chevrons-up.svg | 1 - feather/chrome.svg | 1 - feather/circle.svg | 1 - feather/clipboard.svg | 1 - feather/clock.svg | 1 - feather/cloud-drizzle.svg | 1 - feather/cloud-lightning.svg | 1 - feather/cloud-off.svg | 1 - feather/cloud-rain.svg | 1 - feather/cloud-snow.svg | 1 - feather/cloud.svg | 1 - feather/code.svg | 1 - feather/codepen.svg | 1 - feather/codesandbox.svg | 1 - feather/coffee.svg | 1 - feather/columns.svg | 1 - feather/command.svg | 1 - feather/compass.svg | 1 - feather/copy.svg | 1 - feather/corner-down-left.svg | 1 - feather/corner-down-right.svg | 1 - feather/corner-left-down.svg | 1 - feather/corner-left-up.svg | 1 - feather/corner-right-down.svg | 1 - feather/corner-right-up.svg | 1 - feather/corner-up-left.svg | 1 - feather/corner-up-right.svg | 1 - feather/cpu.svg | 1 - feather/credit-card.svg | 1 - feather/crop.svg | 1 - feather/crosshair.svg | 1 - feather/database.svg | 1 - feather/delete.svg | 1 - feather/disc.svg | 1 - feather/divide-circle.svg | 1 - feather/divide-square.svg | 1 - feather/divide.svg | 1 - feather/dollar-sign.svg | 1 - feather/download-cloud.svg | 1 - feather/download.svg | 1 - feather/dribbble.svg | 1 - feather/droplet.svg | 1 - feather/edit-2.svg | 1 - feather/edit-3.svg | 1 - feather/edit.svg | 1 - feather/external-link.svg | 1 - feather/eye-off.svg | 1 - feather/eye.svg | 1 - feather/facebook.svg | 1 - feather/fast-forward.svg | 1 - feather/feather.svg | 1 - feather/figma.svg | 1 - feather/file-minus.svg | 1 - feather/file-plus.svg | 1 - feather/file-text.svg | 1 - feather/file.svg | 1 - feather/film.svg | 1 - feather/filter.svg | 1 - feather/flag.svg | 1 - feather/folder-minus.svg | 1 - feather/folder-plus.svg | 1 - feather/folder.svg | 1 - feather/framer.svg | 1 - feather/frown.svg | 1 - feather/gift.svg | 1 - feather/git-branch.svg | 1 - feather/git-commit.svg | 1 - feather/git-merge.svg | 1 - feather/git-pull-request.svg | 1 - feather/github.svg | 1 - feather/gitlab.svg | 1 - feather/globe.svg | 1 - feather/grid.svg | 1 - feather/hard-drive.svg | 1 - feather/hash.svg | 1 - feather/headphones.svg | 1 - feather/heart.svg | 1 - feather/help-circle.svg | 1 - feather/hexagon.svg | 1 - feather/home.svg | 1 - feather/image.svg | 1 - feather/inbox.svg | 1 - feather/info.svg | 1 - feather/instagram.svg | 1 - feather/italic.svg | 1 - feather/key.svg | 1 - feather/layers.svg | 1 - feather/layout.svg | 1 - feather/life-buoy.svg | 1 - feather/link-2.svg | 1 - feather/link.svg | 1 - feather/linkedin.svg | 1 - feather/list.svg | 1 - feather/loader.svg | 1 - feather/lock.svg | 1 - feather/log-in.svg | 1 - feather/log-out.svg | 1 - feather/mail.svg | 1 - feather/map-pin.svg | 1 - feather/map.svg | 1 - feather/maximize-2.svg | 1 - feather/maximize.svg | 1 - feather/meh.svg | 1 - feather/menu.svg | 1 - feather/message-circle.svg | 1 - feather/message-square.svg | 1 - feather/mic-off.svg | 1 - feather/mic.svg | 1 - feather/minimize-2.svg | 1 - feather/minimize.svg | 1 - feather/minus-circle.svg | 1 - feather/minus-square.svg | 1 - feather/minus.svg | 1 - feather/monitor.svg | 1 - feather/moon.svg | 1 - feather/more-horizontal.svg | 1 - feather/more-vertical.svg | 1 - feather/mouse-pointer.svg | 1 - feather/move.svg | 1 - feather/music.svg | 1 - feather/navigation-2.svg | 1 - feather/navigation.svg | 1 - feather/octagon.svg | 1 - feather/package.svg | 1 - feather/paperclip.svg | 1 - feather/pause-circle.svg | 1 - feather/pause.svg | 1 - feather/pen-tool.svg | 1 - feather/percent.svg | 1 - feather/phone-call.svg | 1 - feather/phone-forwarded.svg | 1 - feather/phone-incoming.svg | 1 - feather/phone-missed.svg | 1 - feather/phone-off.svg | 1 - feather/phone-outgoing.svg | 1 - feather/phone.svg | 1 - feather/pie-chart.svg | 1 - feather/play-circle.svg | 1 - feather/play.svg | 1 - feather/plus-circle.svg | 1 - feather/plus-square.svg | 1 - feather/plus.svg | 1 - feather/pocket.svg | 1 - feather/power.svg | 1 - feather/printer.svg | 1 - feather/radio.svg | 1 - feather/refresh-ccw.svg | 1 - feather/refresh-cw.svg | 1 - feather/repeat.svg | 1 - feather/rewind.svg | 1 - feather/rotate-ccw.svg | 1 - feather/rotate-cw.svg | 1 - feather/rss.svg | 1 - feather/save.svg | 1 - feather/scissors.svg | 1 - feather/search.svg | 1 - feather/send.svg | 1 - feather/server.svg | 1 - feather/settings.svg | 1 - feather/share-2.svg | 1 - feather/share.svg | 1 - feather/shield-off.svg | 1 - feather/shield.svg | 1 - feather/shopping-bag.svg | 1 - feather/shopping-cart.svg | 1 - feather/shuffle.svg | 1 - feather/sidebar.svg | 1 - feather/skip-back.svg | 1 - feather/skip-forward.svg | 1 - feather/slack.svg | 1 - feather/slash.svg | 1 - feather/sliders.svg | 1 - feather/smartphone.svg | 1 - feather/smile.svg | 1 - feather/speaker.svg | 1 - feather/square.svg | 1 - feather/star.svg | 1 - feather/stop-circle.svg | 1 - feather/sun.svg | 1 - feather/sunrise.svg | 1 - feather/sunset.svg | 1 - feather/tablet.svg | 1 - feather/tag.svg | 1 - feather/target.svg | 1 - feather/terminal.svg | 1 - feather/thermometer.svg | 1 - feather/thumbs-down.svg | 1 - feather/thumbs-up.svg | 1 - feather/toggle-left.svg | 1 - feather/toggle-right.svg | 1 - feather/tool.svg | 1 - feather/trash-2.svg | 1 - feather/trash.svg | 1 - feather/trello.svg | 1 - feather/trending-down.svg | 1 - feather/trending-up.svg | 1 - feather/triangle.svg | 1 - feather/truck.svg | 1 - feather/tv.svg | 1 - feather/twitch.svg | 1 - feather/twitter.svg | 1 - feather/type.svg | 1 - feather/umbrella.svg | 1 - feather/underline.svg | 1 - feather/unlock.svg | 1 - feather/upload-cloud.svg | 1 - feather/upload.svg | 1 - feather/user-check.svg | 1 - feather/user-minus.svg | 1 - feather/user-plus.svg | 1 - feather/user-x.svg | 1 - feather/user.svg | 1 - feather/users.svg | 1 - feather/video-off.svg | 1 - feather/video.svg | 1 - feather/voicemail.svg | 1 - feather/volume-1.svg | 1 - feather/volume-2.svg | 1 - feather/volume-x.svg | 1 - feather/volume.svg | 1 - feather/watch.svg | 1 - feather/wifi-off.svg | 1 - feather/wifi.svg | 1 - feather/wind.svg | 1 - feather/x-circle.svg | 1 - feather/x-octagon.svg | 1 - feather/x-square.svg | 1 - feather/x.svg | 1 - feather/youtube.svg | 1 - feather/zap-off.svg | 1 - feather/zap.svg | 1 - feather/zoom-in.svg | 1 - feather/zoom-out.svg | 1 - format.sh | 7 + mbgui/__init__.py | 0 mbgui/__main__.py | 7 - mbgui/executor.py | 49 ---- mbgui/icons/eye-off-16.png | Bin 624 -> 0 bytes mbgui/icons/file-16.png | Bin 520 -> 0 bytes mbgui/icons/flag-16.png | Bin 521 -> 0 bytes mbgui/icons/folder-16.png | Bin 478 -> 0 bytes mbgui/icons/inbox-16.png | Bin 559 -> 0 bytes mbgui/icons/mail-16.png | Bin 543 -> 0 bytes mbgui/icons/trash-16.png | Bin 482 -> 0 bytes mbgui/main.py | 252 -------------------- mbgui/main.ui | 56 ----- mbgui/mblaze.py | 145 ------------ run.sh | 10 - setup.py | 23 -- src_c/main.c | 389 +++++++++++++++++++++++++++++++ src_c/mblaze.c | 511 +++++++++++++++++++++++++++++++++++++++++ src_c/mblaze.h | 59 +++++ 311 files changed, 1043 insertions(+), 877 deletions(-) create mode 100644 .clang-format delete mode 100755 convert_icons.sh delete mode 100644 feather/LICENSE delete mode 100644 feather/activity.svg delete mode 100644 feather/airplay.svg delete mode 100644 feather/alert-circle.svg delete mode 100644 feather/alert-octagon.svg delete mode 100644 feather/alert-triangle.svg delete mode 100644 feather/align-center.svg delete mode 100644 feather/align-justify.svg delete mode 100644 feather/align-left.svg delete mode 100644 feather/align-right.svg delete mode 100644 feather/anchor.svg delete mode 100644 feather/aperture.svg delete mode 100644 feather/archive.svg delete mode 100644 feather/arrow-down-circle.svg delete mode 100644 feather/arrow-down-left.svg delete mode 100644 feather/arrow-down-right.svg delete mode 100644 feather/arrow-down.svg delete mode 100644 feather/arrow-left-circle.svg delete mode 100644 feather/arrow-left.svg delete mode 100644 feather/arrow-right-circle.svg delete mode 100644 feather/arrow-right.svg delete mode 100644 feather/arrow-up-circle.svg delete mode 100644 feather/arrow-up-left.svg delete mode 100644 feather/arrow-up-right.svg delete mode 100644 feather/arrow-up.svg delete mode 100644 feather/at-sign.svg delete mode 100644 feather/award.svg delete mode 100644 feather/bar-chart-2.svg delete mode 100644 feather/bar-chart.svg delete mode 100644 feather/battery-charging.svg delete mode 100644 feather/battery.svg delete mode 100644 feather/bell-off.svg delete mode 100644 feather/bell.svg delete mode 100644 feather/bluetooth.svg delete mode 100644 feather/bold.svg delete mode 100644 feather/book-open.svg delete mode 100644 feather/book.svg delete mode 100644 feather/bookmark.svg delete mode 100644 feather/box.svg delete mode 100644 feather/briefcase.svg delete mode 100644 feather/calendar.svg delete mode 100644 feather/camera-off.svg delete mode 100644 feather/camera.svg delete mode 100644 feather/cast.svg delete mode 100644 feather/check-circle.svg delete mode 100644 feather/check-square.svg delete mode 100644 feather/check.svg delete mode 100644 feather/chevron-down.svg delete mode 100644 feather/chevron-left.svg delete mode 100644 feather/chevron-right.svg delete mode 100644 feather/chevron-up.svg delete mode 100644 feather/chevrons-down.svg delete mode 100644 feather/chevrons-left.svg delete mode 100644 feather/chevrons-right.svg delete mode 100644 feather/chevrons-up.svg delete mode 100644 feather/chrome.svg delete mode 100644 feather/circle.svg delete mode 100644 feather/clipboard.svg delete mode 100644 feather/clock.svg delete mode 100644 feather/cloud-drizzle.svg delete mode 100644 feather/cloud-lightning.svg delete mode 100644 feather/cloud-off.svg delete mode 100644 feather/cloud-rain.svg delete mode 100644 feather/cloud-snow.svg delete mode 100644 feather/cloud.svg delete mode 100644 feather/code.svg delete mode 100644 feather/codepen.svg delete mode 100644 feather/codesandbox.svg delete mode 100644 feather/coffee.svg delete mode 100644 feather/columns.svg delete mode 100644 feather/command.svg delete mode 100644 feather/compass.svg delete mode 100644 feather/copy.svg delete mode 100644 feather/corner-down-left.svg delete mode 100644 feather/corner-down-right.svg delete mode 100644 feather/corner-left-down.svg delete mode 100644 feather/corner-left-up.svg delete mode 100644 feather/corner-right-down.svg delete mode 100644 feather/corner-right-up.svg delete mode 100644 feather/corner-up-left.svg delete mode 100644 feather/corner-up-right.svg delete mode 100644 feather/cpu.svg delete mode 100644 feather/credit-card.svg delete mode 100644 feather/crop.svg delete mode 100644 feather/crosshair.svg delete mode 100644 feather/database.svg delete mode 100644 feather/delete.svg delete mode 100644 feather/disc.svg delete mode 100644 feather/divide-circle.svg delete mode 100644 feather/divide-square.svg delete mode 100644 feather/divide.svg delete mode 100644 feather/dollar-sign.svg delete mode 100644 feather/download-cloud.svg delete mode 100644 feather/download.svg delete mode 100644 feather/dribbble.svg delete mode 100644 feather/droplet.svg delete mode 100644 feather/edit-2.svg delete mode 100644 feather/edit-3.svg delete mode 100644 feather/edit.svg delete mode 100644 feather/external-link.svg delete mode 100644 feather/eye-off.svg delete mode 100644 feather/eye.svg delete mode 100644 feather/facebook.svg delete mode 100644 feather/fast-forward.svg delete mode 100644 feather/feather.svg delete mode 100644 feather/figma.svg delete mode 100644 feather/file-minus.svg delete mode 100644 feather/file-plus.svg delete mode 100644 feather/file-text.svg delete mode 100644 feather/file.svg delete mode 100644 feather/film.svg delete mode 100644 feather/filter.svg delete mode 100644 feather/flag.svg delete mode 100644 feather/folder-minus.svg delete mode 100644 feather/folder-plus.svg delete mode 100644 feather/folder.svg delete mode 100644 feather/framer.svg delete mode 100644 feather/frown.svg delete mode 100644 feather/gift.svg delete mode 100644 feather/git-branch.svg delete mode 100644 feather/git-commit.svg delete mode 100644 feather/git-merge.svg delete mode 100644 feather/git-pull-request.svg delete mode 100644 feather/github.svg delete mode 100644 feather/gitlab.svg delete mode 100644 feather/globe.svg delete mode 100644 feather/grid.svg delete mode 100644 feather/hard-drive.svg delete mode 100644 feather/hash.svg delete mode 100644 feather/headphones.svg delete mode 100644 feather/heart.svg delete mode 100644 feather/help-circle.svg delete mode 100644 feather/hexagon.svg delete mode 100644 feather/home.svg delete mode 100644 feather/image.svg delete mode 100644 feather/inbox.svg delete mode 100644 feather/info.svg delete mode 100644 feather/instagram.svg delete mode 100644 feather/italic.svg delete mode 100644 feather/key.svg delete mode 100644 feather/layers.svg delete mode 100644 feather/layout.svg delete mode 100644 feather/life-buoy.svg delete mode 100644 feather/link-2.svg delete mode 100644 feather/link.svg delete mode 100644 feather/linkedin.svg delete mode 100644 feather/list.svg delete mode 100644 feather/loader.svg delete mode 100644 feather/lock.svg delete mode 100644 feather/log-in.svg delete mode 100644 feather/log-out.svg delete mode 100644 feather/mail.svg delete mode 100644 feather/map-pin.svg delete mode 100644 feather/map.svg delete mode 100644 feather/maximize-2.svg delete mode 100644 feather/maximize.svg delete mode 100644 feather/meh.svg delete mode 100644 feather/menu.svg delete mode 100644 feather/message-circle.svg delete mode 100644 feather/message-square.svg delete mode 100644 feather/mic-off.svg delete mode 100644 feather/mic.svg delete mode 100644 feather/minimize-2.svg delete mode 100644 feather/minimize.svg delete mode 100644 feather/minus-circle.svg delete mode 100644 feather/minus-square.svg delete mode 100644 feather/minus.svg delete mode 100644 feather/monitor.svg delete mode 100644 feather/moon.svg delete mode 100644 feather/more-horizontal.svg delete mode 100644 feather/more-vertical.svg delete mode 100644 feather/mouse-pointer.svg delete mode 100644 feather/move.svg delete mode 100644 feather/music.svg delete mode 100644 feather/navigation-2.svg delete mode 100644 feather/navigation.svg delete mode 100644 feather/octagon.svg delete mode 100644 feather/package.svg delete mode 100644 feather/paperclip.svg delete mode 100644 feather/pause-circle.svg delete mode 100644 feather/pause.svg delete mode 100644 feather/pen-tool.svg delete mode 100644 feather/percent.svg delete mode 100644 feather/phone-call.svg delete mode 100644 feather/phone-forwarded.svg delete mode 100644 feather/phone-incoming.svg delete mode 100644 feather/phone-missed.svg delete mode 100644 feather/phone-off.svg delete mode 100644 feather/phone-outgoing.svg delete mode 100644 feather/phone.svg delete mode 100644 feather/pie-chart.svg delete mode 100644 feather/play-circle.svg delete mode 100644 feather/play.svg delete mode 100644 feather/plus-circle.svg delete mode 100644 feather/plus-square.svg delete mode 100644 feather/plus.svg delete mode 100644 feather/pocket.svg delete mode 100644 feather/power.svg delete mode 100644 feather/printer.svg delete mode 100644 feather/radio.svg delete mode 100644 feather/refresh-ccw.svg delete mode 100644 feather/refresh-cw.svg delete mode 100644 feather/repeat.svg delete mode 100644 feather/rewind.svg delete mode 100644 feather/rotate-ccw.svg delete mode 100644 feather/rotate-cw.svg delete mode 100644 feather/rss.svg delete mode 100644 feather/save.svg delete mode 100644 feather/scissors.svg delete mode 100644 feather/search.svg delete mode 100644 feather/send.svg delete mode 100644 feather/server.svg delete mode 100644 feather/settings.svg delete mode 100644 feather/share-2.svg delete mode 100644 feather/share.svg delete mode 100644 feather/shield-off.svg delete mode 100644 feather/shield.svg delete mode 100644 feather/shopping-bag.svg delete mode 100644 feather/shopping-cart.svg delete mode 100644 feather/shuffle.svg delete mode 100644 feather/sidebar.svg delete mode 100644 feather/skip-back.svg delete mode 100644 feather/skip-forward.svg delete mode 100644 feather/slack.svg delete mode 100644 feather/slash.svg delete mode 100644 feather/sliders.svg delete mode 100644 feather/smartphone.svg delete mode 100644 feather/smile.svg delete mode 100644 feather/speaker.svg delete mode 100644 feather/square.svg delete mode 100644 feather/star.svg delete mode 100644 feather/stop-circle.svg delete mode 100644 feather/sun.svg delete mode 100644 feather/sunrise.svg delete mode 100644 feather/sunset.svg delete mode 100644 feather/tablet.svg delete mode 100644 feather/tag.svg delete mode 100644 feather/target.svg delete mode 100644 feather/terminal.svg delete mode 100644 feather/thermometer.svg delete mode 100644 feather/thumbs-down.svg delete mode 100644 feather/thumbs-up.svg delete mode 100644 feather/toggle-left.svg delete mode 100644 feather/toggle-right.svg delete mode 100644 feather/tool.svg delete mode 100644 feather/trash-2.svg delete mode 100644 feather/trash.svg delete mode 100644 feather/trello.svg delete mode 100644 feather/trending-down.svg delete mode 100644 feather/trending-up.svg delete mode 100644 feather/triangle.svg delete mode 100644 feather/truck.svg delete mode 100644 feather/tv.svg delete mode 100644 feather/twitch.svg delete mode 100644 feather/twitter.svg delete mode 100644 feather/type.svg delete mode 100644 feather/umbrella.svg delete mode 100644 feather/underline.svg delete mode 100644 feather/unlock.svg delete mode 100644 feather/upload-cloud.svg delete mode 100644 feather/upload.svg delete mode 100644 feather/user-check.svg delete mode 100644 feather/user-minus.svg delete mode 100644 feather/user-plus.svg delete mode 100644 feather/user-x.svg delete mode 100644 feather/user.svg delete mode 100644 feather/users.svg delete mode 100644 feather/video-off.svg delete mode 100644 feather/video.svg delete mode 100644 feather/voicemail.svg delete mode 100644 feather/volume-1.svg delete mode 100644 feather/volume-2.svg delete mode 100644 feather/volume-x.svg delete mode 100644 feather/volume.svg delete mode 100644 feather/watch.svg delete mode 100644 feather/wifi-off.svg delete mode 100644 feather/wifi.svg delete mode 100644 feather/wind.svg delete mode 100644 feather/x-circle.svg delete mode 100644 feather/x-octagon.svg delete mode 100644 feather/x-square.svg delete mode 100644 feather/x.svg delete mode 100644 feather/youtube.svg delete mode 100644 feather/zap-off.svg delete mode 100644 feather/zap.svg delete mode 100644 feather/zoom-in.svg delete mode 100644 feather/zoom-out.svg create mode 100755 format.sh delete mode 100644 mbgui/__init__.py delete mode 100644 mbgui/__main__.py delete mode 100644 mbgui/executor.py delete mode 100644 mbgui/icons/eye-off-16.png delete mode 100644 mbgui/icons/file-16.png delete mode 100644 mbgui/icons/flag-16.png delete mode 100644 mbgui/icons/folder-16.png delete mode 100644 mbgui/icons/inbox-16.png delete mode 100644 mbgui/icons/mail-16.png delete mode 100644 mbgui/icons/trash-16.png delete mode 100644 mbgui/main.py delete mode 100644 mbgui/main.ui delete mode 100644 mbgui/mblaze.py delete mode 100755 run.sh delete mode 100644 setup.py create mode 100644 src_c/main.c create mode 100644 src_c/mblaze.c create mode 100644 src_c/mblaze.h diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..8c67bcb --- /dev/null +++ b/.clang-format @@ -0,0 +1,65 @@ +--- +Language: Cpp +BasedOnStyle: LLVM +AccessModifierOffset: -4 +AlignAfterOpenBracket: true +AlignEscapedNewlinesLeft: false +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AlwaysBreakAfterDefinitionReturnType: false +AlwaysBreakTemplateDeclarations: false +AlwaysBreakBeforeMultilineStrings: false +BreakBeforeBinaryOperators: None +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BinPackParameters: true +BinPackArguments: true +ColumnLimit: 80 +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +DerivePointerAlignment: false +ExperimentalAutoDetectBinPacking: false +IndentCaseLabels: false +IndentWrappedFunctionNames: false +IndentFunctionDeclarationAfterType: false +MaxEmptyLinesToKeep: 2 +KeepEmptyLinesAtTheStartOfBlocks: true +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakString: 1000 +PenaltyBreakFirstLessLess: 120 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Right +SpacesBeforeTrailingComments: 1 +Cpp11BracedListStyle: true +Standard: Cpp11 +IndentWidth: 4 +TabWidth: 4 +UseTab: Never +BreakBeforeBraces: Attach +SpacesInParentheses: false +SpacesInSquareBrackets: false +SpacesInAngles: false +SpaceInEmptyParentheses: false +SpacesInCStyleCastParentheses: false +SpaceAfterCStyleCast: false +SpacesInContainerLiterals: true +SpaceBeforeAssignmentOperators: true +ContinuationIndentWidth: 4 +CommentPragmas: '^ IWYU pragma:' +ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] +SpaceBeforeParens: ControlStatements +DisableFormat: false +SortIncludes: false +... diff --git a/.gitignore b/.gitignore index f284d11..ea36607 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ /build -__pycache__ +/compile_flags.txt diff --git a/README.rst b/README.rst index 94a7be7..dd56277 100644 --- a/README.rst +++ b/README.rst @@ -9,16 +9,18 @@ Maildir GUI based on `mblaze `_ Requirements ------------ -* python3 +* gtk4 * mblaze -Install -------- +Build +----- :: - $ pip install mbgui + $ ./build.sh + +After running build script, ``mbgui`` is avalaible inside ``build`` folder. Run @@ -26,7 +28,7 @@ Run :: - $ mbgui path/to/maildir ... + $ build/mbgui path/to/maildir ... All command line arguments are passed to ``mdirs`` command (with additional ``-a`` argument). diff --git a/build.sh b/build.sh index eac310c..6c47b9e 100755 --- a/build.sh +++ b/build.sh @@ -4,10 +4,8 @@ set -e cd $(dirname -- "$0") -PYTHON=${PYTHON:-python3} +LIBS="gtk4 gio-2.0 gio-unix-2.0 glib-2.0" +CC=${CC:-gcc} -rm -rf ./build -$PYTHON setup.py \ - build --build-base build \ - egg_info --egg-base build \ - bdist_wheel --dist-dir build +mkdir -p build +$CC -o build/mbgui src_c/*.c $(pkg-config --cflags --libs $LIBS) diff --git a/convert_icons.sh b/convert_icons.sh deleted file mode 100755 index ae9a204..0000000 --- a/convert_icons.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh - -set -e - -ROOT_DIR=$(dirname -- "$0") -ICONS_DIR=$ROOT_DIR/mbgui/icons -FEATHER_DIR=$ROOT_DIR/feather - -ICONS_16="inbox folder mail trash flag file eye-off" - -mkdir -p $ICONS_DIR - -for i in $ICONS_16; do - convert -background none $FEATHER_DIR/$i.svg \ - -geometry 16x16 $ICONS_DIR/$i-16.png -done diff --git a/feather/LICENSE b/feather/LICENSE deleted file mode 100644 index b869713..0000000 --- a/feather/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2017 Cole Bemis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/feather/activity.svg b/feather/activity.svg deleted file mode 100644 index 669a57a..0000000 --- a/feather/activity.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/airplay.svg b/feather/airplay.svg deleted file mode 100644 index 7ce7302..0000000 --- a/feather/airplay.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/alert-circle.svg b/feather/alert-circle.svg deleted file mode 100644 index 8d02b7d..0000000 --- a/feather/alert-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/alert-octagon.svg b/feather/alert-octagon.svg deleted file mode 100644 index de9b03f..0000000 --- a/feather/alert-octagon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/alert-triangle.svg b/feather/alert-triangle.svg deleted file mode 100644 index 6dcb096..0000000 --- a/feather/alert-triangle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/align-center.svg b/feather/align-center.svg deleted file mode 100644 index 5b8842e..0000000 --- a/feather/align-center.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/align-justify.svg b/feather/align-justify.svg deleted file mode 100644 index 0539876..0000000 --- a/feather/align-justify.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/align-left.svg b/feather/align-left.svg deleted file mode 100644 index 9ac852a..0000000 --- a/feather/align-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/align-right.svg b/feather/align-right.svg deleted file mode 100644 index ef139ff..0000000 --- a/feather/align-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/anchor.svg b/feather/anchor.svg deleted file mode 100644 index e01627a..0000000 --- a/feather/anchor.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/aperture.svg b/feather/aperture.svg deleted file mode 100644 index 9936e86..0000000 --- a/feather/aperture.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/archive.svg b/feather/archive.svg deleted file mode 100644 index 428882c..0000000 --- a/feather/archive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/arrow-down-circle.svg b/feather/arrow-down-circle.svg deleted file mode 100644 index 3238091..0000000 --- a/feather/arrow-down-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/arrow-down-left.svg b/feather/arrow-down-left.svg deleted file mode 100644 index 7248358..0000000 --- a/feather/arrow-down-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/arrow-down-right.svg b/feather/arrow-down-right.svg deleted file mode 100644 index 81d9822..0000000 --- a/feather/arrow-down-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/arrow-down.svg b/feather/arrow-down.svg deleted file mode 100644 index 4f84f62..0000000 --- a/feather/arrow-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/arrow-left-circle.svg b/feather/arrow-left-circle.svg deleted file mode 100644 index 3b19ff8..0000000 --- a/feather/arrow-left-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/arrow-left.svg b/feather/arrow-left.svg deleted file mode 100644 index a5058fc..0000000 --- a/feather/arrow-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/arrow-right-circle.svg b/feather/arrow-right-circle.svg deleted file mode 100644 index ff01dd5..0000000 --- a/feather/arrow-right-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/arrow-right.svg b/feather/arrow-right.svg deleted file mode 100644 index 939b57c..0000000 --- a/feather/arrow-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/arrow-up-circle.svg b/feather/arrow-up-circle.svg deleted file mode 100644 index 044a75d..0000000 --- a/feather/arrow-up-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/arrow-up-left.svg b/feather/arrow-up-left.svg deleted file mode 100644 index cea55e8..0000000 --- a/feather/arrow-up-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/arrow-up-right.svg b/feather/arrow-up-right.svg deleted file mode 100644 index 95678e0..0000000 --- a/feather/arrow-up-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/arrow-up.svg b/feather/arrow-up.svg deleted file mode 100644 index 16b13ab..0000000 --- a/feather/arrow-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/at-sign.svg b/feather/at-sign.svg deleted file mode 100644 index 5a5e5d0..0000000 --- a/feather/at-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/award.svg b/feather/award.svg deleted file mode 100644 index be70d5a..0000000 --- a/feather/award.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/bar-chart-2.svg b/feather/bar-chart-2.svg deleted file mode 100644 index 864167a..0000000 --- a/feather/bar-chart-2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/bar-chart.svg b/feather/bar-chart.svg deleted file mode 100644 index 074d7c1..0000000 --- a/feather/bar-chart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/battery-charging.svg b/feather/battery-charging.svg deleted file mode 100644 index 644cb59..0000000 --- a/feather/battery-charging.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/battery.svg b/feather/battery.svg deleted file mode 100644 index 7fe8771..0000000 --- a/feather/battery.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/bell-off.svg b/feather/bell-off.svg deleted file mode 100644 index 4b07c84..0000000 --- a/feather/bell-off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/bell.svg b/feather/bell.svg deleted file mode 100644 index bba561c..0000000 --- a/feather/bell.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/bluetooth.svg b/feather/bluetooth.svg deleted file mode 100644 index cebed7b..0000000 --- a/feather/bluetooth.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/bold.svg b/feather/bold.svg deleted file mode 100644 index d1a4efd..0000000 --- a/feather/bold.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/book-open.svg b/feather/book-open.svg deleted file mode 100644 index 5e0ca0a..0000000 --- a/feather/book-open.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/book.svg b/feather/book.svg deleted file mode 100644 index 12ffcbc..0000000 --- a/feather/book.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/bookmark.svg b/feather/bookmark.svg deleted file mode 100644 index 2239cc5..0000000 --- a/feather/bookmark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/box.svg b/feather/box.svg deleted file mode 100644 index d89be30..0000000 --- a/feather/box.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/briefcase.svg b/feather/briefcase.svg deleted file mode 100644 index e3af050..0000000 --- a/feather/briefcase.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/calendar.svg b/feather/calendar.svg deleted file mode 100644 index 6c7fd87..0000000 --- a/feather/calendar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/camera-off.svg b/feather/camera-off.svg deleted file mode 100644 index daa3e25..0000000 --- a/feather/camera-off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/camera.svg b/feather/camera.svg deleted file mode 100644 index 0e7f060..0000000 --- a/feather/camera.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/cast.svg b/feather/cast.svg deleted file mode 100644 index 63c954d..0000000 --- a/feather/cast.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/check-circle.svg b/feather/check-circle.svg deleted file mode 100644 index f2f4fd1..0000000 --- a/feather/check-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/check-square.svg b/feather/check-square.svg deleted file mode 100644 index 72ab7a8..0000000 --- a/feather/check-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/check.svg b/feather/check.svg deleted file mode 100644 index 1c20989..0000000 --- a/feather/check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/chevron-down.svg b/feather/chevron-down.svg deleted file mode 100644 index 278c6a3..0000000 --- a/feather/chevron-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/chevron-left.svg b/feather/chevron-left.svg deleted file mode 100644 index 747d46d..0000000 --- a/feather/chevron-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/chevron-right.svg b/feather/chevron-right.svg deleted file mode 100644 index 258de41..0000000 --- a/feather/chevron-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/chevron-up.svg b/feather/chevron-up.svg deleted file mode 100644 index 4eb5ecc..0000000 --- a/feather/chevron-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/chevrons-down.svg b/feather/chevrons-down.svg deleted file mode 100644 index e67ef2f..0000000 --- a/feather/chevrons-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/chevrons-left.svg b/feather/chevrons-left.svg deleted file mode 100644 index c32e398..0000000 --- a/feather/chevrons-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/chevrons-right.svg b/feather/chevrons-right.svg deleted file mode 100644 index f506814..0000000 --- a/feather/chevrons-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/chevrons-up.svg b/feather/chevrons-up.svg deleted file mode 100644 index 0eaf518..0000000 --- a/feather/chevrons-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/chrome.svg b/feather/chrome.svg deleted file mode 100644 index 9189815..0000000 --- a/feather/chrome.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/circle.svg b/feather/circle.svg deleted file mode 100644 index b009088..0000000 --- a/feather/circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/clipboard.svg b/feather/clipboard.svg deleted file mode 100644 index ccee454..0000000 --- a/feather/clipboard.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/clock.svg b/feather/clock.svg deleted file mode 100644 index ea3f5e5..0000000 --- a/feather/clock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/cloud-drizzle.svg b/feather/cloud-drizzle.svg deleted file mode 100644 index 13af6bb..0000000 --- a/feather/cloud-drizzle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/cloud-lightning.svg b/feather/cloud-lightning.svg deleted file mode 100644 index 32d154c..0000000 --- a/feather/cloud-lightning.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/cloud-off.svg b/feather/cloud-off.svg deleted file mode 100644 index 1e1e7d6..0000000 --- a/feather/cloud-off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/cloud-rain.svg b/feather/cloud-rain.svg deleted file mode 100644 index 3e0b85b..0000000 --- a/feather/cloud-rain.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/cloud-snow.svg b/feather/cloud-snow.svg deleted file mode 100644 index e4eb820..0000000 --- a/feather/cloud-snow.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/cloud.svg b/feather/cloud.svg deleted file mode 100644 index 0ee0c63..0000000 --- a/feather/cloud.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/code.svg b/feather/code.svg deleted file mode 100644 index c4954b5..0000000 --- a/feather/code.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/codepen.svg b/feather/codepen.svg deleted file mode 100644 index ab2a815..0000000 --- a/feather/codepen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/codesandbox.svg b/feather/codesandbox.svg deleted file mode 100644 index 49848f5..0000000 --- a/feather/codesandbox.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/coffee.svg b/feather/coffee.svg deleted file mode 100644 index 32905e5..0000000 --- a/feather/coffee.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/columns.svg b/feather/columns.svg deleted file mode 100644 index d264b55..0000000 --- a/feather/columns.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/command.svg b/feather/command.svg deleted file mode 100644 index 93f554c..0000000 --- a/feather/command.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/compass.svg b/feather/compass.svg deleted file mode 100644 index 3296260..0000000 --- a/feather/compass.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/copy.svg b/feather/copy.svg deleted file mode 100644 index 4e0b09f..0000000 --- a/feather/copy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/corner-down-left.svg b/feather/corner-down-left.svg deleted file mode 100644 index 9fffb3e..0000000 --- a/feather/corner-down-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/corner-down-right.svg b/feather/corner-down-right.svg deleted file mode 100644 index b27d408..0000000 --- a/feather/corner-down-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/corner-left-down.svg b/feather/corner-left-down.svg deleted file mode 100644 index 24b8375..0000000 --- a/feather/corner-left-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/corner-left-up.svg b/feather/corner-left-up.svg deleted file mode 100644 index e54527c..0000000 --- a/feather/corner-left-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/corner-right-down.svg b/feather/corner-right-down.svg deleted file mode 100644 index a49e6d6..0000000 --- a/feather/corner-right-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/corner-right-up.svg b/feather/corner-right-up.svg deleted file mode 100644 index a5c5dce..0000000 --- a/feather/corner-right-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/corner-up-left.svg b/feather/corner-up-left.svg deleted file mode 100644 index 0a1ffd6..0000000 --- a/feather/corner-up-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/corner-up-right.svg b/feather/corner-up-right.svg deleted file mode 100644 index 0b8f961..0000000 --- a/feather/corner-up-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/cpu.svg b/feather/cpu.svg deleted file mode 100644 index 2ed16ef..0000000 --- a/feather/cpu.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/credit-card.svg b/feather/credit-card.svg deleted file mode 100644 index 1b7fd02..0000000 --- a/feather/credit-card.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/crop.svg b/feather/crop.svg deleted file mode 100644 index ffbfd04..0000000 --- a/feather/crop.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/crosshair.svg b/feather/crosshair.svg deleted file mode 100644 index ba39401..0000000 --- a/feather/crosshair.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/database.svg b/feather/database.svg deleted file mode 100644 index c296fbc..0000000 --- a/feather/database.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/delete.svg b/feather/delete.svg deleted file mode 100644 index 8c6074b..0000000 --- a/feather/delete.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/disc.svg b/feather/disc.svg deleted file mode 100644 index 2595b44..0000000 --- a/feather/disc.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/divide-circle.svg b/feather/divide-circle.svg deleted file mode 100644 index 03a50b7..0000000 --- a/feather/divide-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/divide-square.svg b/feather/divide-square.svg deleted file mode 100644 index 852f776..0000000 --- a/feather/divide-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/divide.svg b/feather/divide.svg deleted file mode 100644 index 3cbff3a..0000000 --- a/feather/divide.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/dollar-sign.svg b/feather/dollar-sign.svg deleted file mode 100644 index 1a124d2..0000000 --- a/feather/dollar-sign.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/download-cloud.svg b/feather/download-cloud.svg deleted file mode 100644 index f3126fc..0000000 --- a/feather/download-cloud.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/download.svg b/feather/download.svg deleted file mode 100644 index 76767a9..0000000 --- a/feather/download.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/dribbble.svg b/feather/dribbble.svg deleted file mode 100644 index bb8577d..0000000 --- a/feather/dribbble.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/droplet.svg b/feather/droplet.svg deleted file mode 100644 index ca09301..0000000 --- a/feather/droplet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/edit-2.svg b/feather/edit-2.svg deleted file mode 100644 index 06830c9..0000000 --- a/feather/edit-2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/edit-3.svg b/feather/edit-3.svg deleted file mode 100644 index d728efc..0000000 --- a/feather/edit-3.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/edit.svg b/feather/edit.svg deleted file mode 100644 index ec7b4ca..0000000 --- a/feather/edit.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/external-link.svg b/feather/external-link.svg deleted file mode 100644 index 6236df3..0000000 --- a/feather/external-link.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/eye-off.svg b/feather/eye-off.svg deleted file mode 100644 index 77c54cb..0000000 --- a/feather/eye-off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/eye.svg b/feather/eye.svg deleted file mode 100644 index 9cde243..0000000 --- a/feather/eye.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/facebook.svg b/feather/facebook.svg deleted file mode 100644 index 2570f56..0000000 --- a/feather/facebook.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/fast-forward.svg b/feather/fast-forward.svg deleted file mode 100644 index fa39877..0000000 --- a/feather/fast-forward.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/feather.svg b/feather/feather.svg deleted file mode 100644 index ac3b868..0000000 --- a/feather/feather.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/figma.svg b/feather/figma.svg deleted file mode 100644 index 66fd217..0000000 --- a/feather/figma.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/file-minus.svg b/feather/file-minus.svg deleted file mode 100644 index 345756e..0000000 --- a/feather/file-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/file-plus.svg b/feather/file-plus.svg deleted file mode 100644 index eed1200..0000000 --- a/feather/file-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/file-text.svg b/feather/file-text.svg deleted file mode 100644 index 4197ddd..0000000 --- a/feather/file-text.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/file.svg b/feather/file.svg deleted file mode 100644 index 378519a..0000000 --- a/feather/file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/film.svg b/feather/film.svg deleted file mode 100644 index ac46360..0000000 --- a/feather/film.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/filter.svg b/feather/filter.svg deleted file mode 100644 index 38a47e0..0000000 --- a/feather/filter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/flag.svg b/feather/flag.svg deleted file mode 100644 index 037737c..0000000 --- a/feather/flag.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/folder-minus.svg b/feather/folder-minus.svg deleted file mode 100644 index d5b7af6..0000000 --- a/feather/folder-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/folder-plus.svg b/feather/folder-plus.svg deleted file mode 100644 index 898f2fc..0000000 --- a/feather/folder-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/folder.svg b/feather/folder.svg deleted file mode 100644 index 134458b..0000000 --- a/feather/folder.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/framer.svg b/feather/framer.svg deleted file mode 100644 index 3e66347..0000000 --- a/feather/framer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/frown.svg b/feather/frown.svg deleted file mode 100644 index f312254..0000000 --- a/feather/frown.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/gift.svg b/feather/gift.svg deleted file mode 100644 index d2c14bd..0000000 --- a/feather/gift.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/git-branch.svg b/feather/git-branch.svg deleted file mode 100644 index 4400372..0000000 --- a/feather/git-branch.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/git-commit.svg b/feather/git-commit.svg deleted file mode 100644 index e959d72..0000000 --- a/feather/git-commit.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/git-merge.svg b/feather/git-merge.svg deleted file mode 100644 index c65fffd..0000000 --- a/feather/git-merge.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/git-pull-request.svg b/feather/git-pull-request.svg deleted file mode 100644 index fc80bdf..0000000 --- a/feather/git-pull-request.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/github.svg b/feather/github.svg deleted file mode 100644 index ff0af48..0000000 --- a/feather/github.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/gitlab.svg b/feather/gitlab.svg deleted file mode 100644 index 85d54a1..0000000 --- a/feather/gitlab.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/globe.svg b/feather/globe.svg deleted file mode 100644 index 0a0586d..0000000 --- a/feather/globe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/grid.svg b/feather/grid.svg deleted file mode 100644 index 8ef2e9d..0000000 --- a/feather/grid.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/hard-drive.svg b/feather/hard-drive.svg deleted file mode 100644 index 8e90fa1..0000000 --- a/feather/hard-drive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/hash.svg b/feather/hash.svg deleted file mode 100644 index c9c8d41..0000000 --- a/feather/hash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/headphones.svg b/feather/headphones.svg deleted file mode 100644 index fd8915b..0000000 --- a/feather/headphones.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/heart.svg b/feather/heart.svg deleted file mode 100644 index a083b7e..0000000 --- a/feather/heart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/help-circle.svg b/feather/help-circle.svg deleted file mode 100644 index 51fddd8..0000000 --- a/feather/help-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/hexagon.svg b/feather/hexagon.svg deleted file mode 100644 index eae7f25..0000000 --- a/feather/hexagon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/home.svg b/feather/home.svg deleted file mode 100644 index 7bb31b2..0000000 --- a/feather/home.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/image.svg b/feather/image.svg deleted file mode 100644 index a7d84b9..0000000 --- a/feather/image.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/inbox.svg b/feather/inbox.svg deleted file mode 100644 index 03a13b4..0000000 --- a/feather/inbox.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/info.svg b/feather/info.svg deleted file mode 100644 index a09fa5f..0000000 --- a/feather/info.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/instagram.svg b/feather/instagram.svg deleted file mode 100644 index 9fdb8e3..0000000 --- a/feather/instagram.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/italic.svg b/feather/italic.svg deleted file mode 100644 index a123d37..0000000 --- a/feather/italic.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/key.svg b/feather/key.svg deleted file mode 100644 index e778e74..0000000 --- a/feather/key.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/layers.svg b/feather/layers.svg deleted file mode 100644 index ea788c2..0000000 --- a/feather/layers.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/layout.svg b/feather/layout.svg deleted file mode 100644 index 28743d9..0000000 --- a/feather/layout.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/life-buoy.svg b/feather/life-buoy.svg deleted file mode 100644 index 54c2bd7..0000000 --- a/feather/life-buoy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/link-2.svg b/feather/link-2.svg deleted file mode 100644 index 8cc7f6d..0000000 --- a/feather/link-2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/link.svg b/feather/link.svg deleted file mode 100644 index c89dd41..0000000 --- a/feather/link.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/linkedin.svg b/feather/linkedin.svg deleted file mode 100644 index 3953109..0000000 --- a/feather/linkedin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/list.svg b/feather/list.svg deleted file mode 100644 index 5ce38ea..0000000 --- a/feather/list.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/loader.svg b/feather/loader.svg deleted file mode 100644 index e1a70c1..0000000 --- a/feather/loader.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/lock.svg b/feather/lock.svg deleted file mode 100644 index de09d9d..0000000 --- a/feather/lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/log-in.svg b/feather/log-in.svg deleted file mode 100644 index ba0da59..0000000 --- a/feather/log-in.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/log-out.svg b/feather/log-out.svg deleted file mode 100644 index c9002c9..0000000 --- a/feather/log-out.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/mail.svg b/feather/mail.svg deleted file mode 100644 index 2af169e..0000000 --- a/feather/mail.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/map-pin.svg b/feather/map-pin.svg deleted file mode 100644 index d5548e9..0000000 --- a/feather/map-pin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/map.svg b/feather/map.svg deleted file mode 100644 index ecebd7b..0000000 --- a/feather/map.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/maximize-2.svg b/feather/maximize-2.svg deleted file mode 100644 index e41fc0b..0000000 --- a/feather/maximize-2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/maximize.svg b/feather/maximize.svg deleted file mode 100644 index fc30518..0000000 --- a/feather/maximize.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/meh.svg b/feather/meh.svg deleted file mode 100644 index 6f57fff..0000000 --- a/feather/meh.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/menu.svg b/feather/menu.svg deleted file mode 100644 index e8a84a9..0000000 --- a/feather/menu.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/message-circle.svg b/feather/message-circle.svg deleted file mode 100644 index 4b21b32..0000000 --- a/feather/message-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/message-square.svg b/feather/message-square.svg deleted file mode 100644 index 6a2e4e5..0000000 --- a/feather/message-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/mic-off.svg b/feather/mic-off.svg deleted file mode 100644 index 0786219..0000000 --- a/feather/mic-off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/mic.svg b/feather/mic.svg deleted file mode 100644 index dc5f780..0000000 --- a/feather/mic.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/minimize-2.svg b/feather/minimize-2.svg deleted file mode 100644 index a720fa6..0000000 --- a/feather/minimize-2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/minimize.svg b/feather/minimize.svg deleted file mode 100644 index 46d6119..0000000 --- a/feather/minimize.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/minus-circle.svg b/feather/minus-circle.svg deleted file mode 100644 index 80c0de1..0000000 --- a/feather/minus-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/minus-square.svg b/feather/minus-square.svg deleted file mode 100644 index 4862832..0000000 --- a/feather/minus-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/minus.svg b/feather/minus.svg deleted file mode 100644 index 93cc734..0000000 --- a/feather/minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/monitor.svg b/feather/monitor.svg deleted file mode 100644 index 6c3556d..0000000 --- a/feather/monitor.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/moon.svg b/feather/moon.svg deleted file mode 100644 index dbf7c6c..0000000 --- a/feather/moon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/more-horizontal.svg b/feather/more-horizontal.svg deleted file mode 100644 index dc6a855..0000000 --- a/feather/more-horizontal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/more-vertical.svg b/feather/more-vertical.svg deleted file mode 100644 index cba6958..0000000 --- a/feather/more-vertical.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/mouse-pointer.svg b/feather/mouse-pointer.svg deleted file mode 100644 index f5af559..0000000 --- a/feather/mouse-pointer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/move.svg b/feather/move.svg deleted file mode 100644 index 4e251b5..0000000 --- a/feather/move.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/music.svg b/feather/music.svg deleted file mode 100644 index 7bee2f7..0000000 --- a/feather/music.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/navigation-2.svg b/feather/navigation-2.svg deleted file mode 100644 index ae31db9..0000000 --- a/feather/navigation-2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/navigation.svg b/feather/navigation.svg deleted file mode 100644 index f600a41..0000000 --- a/feather/navigation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/octagon.svg b/feather/octagon.svg deleted file mode 100644 index 124c548..0000000 --- a/feather/octagon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/package.svg b/feather/package.svg deleted file mode 100644 index f1e09ee..0000000 --- a/feather/package.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/paperclip.svg b/feather/paperclip.svg deleted file mode 100644 index b1f69b7..0000000 --- a/feather/paperclip.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/pause-circle.svg b/feather/pause-circle.svg deleted file mode 100644 index f6b1a8d..0000000 --- a/feather/pause-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/pause.svg b/feather/pause.svg deleted file mode 100644 index 4e78038..0000000 --- a/feather/pause.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/pen-tool.svg b/feather/pen-tool.svg deleted file mode 100644 index 0d26fa1..0000000 --- a/feather/pen-tool.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/percent.svg b/feather/percent.svg deleted file mode 100644 index 2cb9719..0000000 --- a/feather/percent.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/phone-call.svg b/feather/phone-call.svg deleted file mode 100644 index 8b86660..0000000 --- a/feather/phone-call.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/phone-forwarded.svg b/feather/phone-forwarded.svg deleted file mode 100644 index aa21bef..0000000 --- a/feather/phone-forwarded.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/phone-incoming.svg b/feather/phone-incoming.svg deleted file mode 100644 index b2d523a..0000000 --- a/feather/phone-incoming.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/phone-missed.svg b/feather/phone-missed.svg deleted file mode 100644 index 4950f09..0000000 --- a/feather/phone-missed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/phone-off.svg b/feather/phone-off.svg deleted file mode 100644 index 4d00fb3..0000000 --- a/feather/phone-off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/phone-outgoing.svg b/feather/phone-outgoing.svg deleted file mode 100644 index fea27a3..0000000 --- a/feather/phone-outgoing.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/phone.svg b/feather/phone.svg deleted file mode 100644 index 2a35154..0000000 --- a/feather/phone.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/pie-chart.svg b/feather/pie-chart.svg deleted file mode 100644 index b5bbe67..0000000 --- a/feather/pie-chart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/play-circle.svg b/feather/play-circle.svg deleted file mode 100644 index 8766dc7..0000000 --- a/feather/play-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/play.svg b/feather/play.svg deleted file mode 100644 index fd76e30..0000000 --- a/feather/play.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/plus-circle.svg b/feather/plus-circle.svg deleted file mode 100644 index 4291ff0..0000000 --- a/feather/plus-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/plus-square.svg b/feather/plus-square.svg deleted file mode 100644 index c380e24..0000000 --- a/feather/plus-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/plus.svg b/feather/plus.svg deleted file mode 100644 index 703c5b7..0000000 --- a/feather/plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/pocket.svg b/feather/pocket.svg deleted file mode 100644 index a3b2561..0000000 --- a/feather/pocket.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/power.svg b/feather/power.svg deleted file mode 100644 index 598308f..0000000 --- a/feather/power.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/printer.svg b/feather/printer.svg deleted file mode 100644 index 8a9a7ac..0000000 --- a/feather/printer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/radio.svg b/feather/radio.svg deleted file mode 100644 index 5abfcd1..0000000 --- a/feather/radio.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/refresh-ccw.svg b/feather/refresh-ccw.svg deleted file mode 100644 index 10cff0e..0000000 --- a/feather/refresh-ccw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/refresh-cw.svg b/feather/refresh-cw.svg deleted file mode 100644 index 06c358d..0000000 --- a/feather/refresh-cw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/repeat.svg b/feather/repeat.svg deleted file mode 100644 index c7657b0..0000000 --- a/feather/repeat.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/rewind.svg b/feather/rewind.svg deleted file mode 100644 index 7b0fa3d..0000000 --- a/feather/rewind.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/rotate-ccw.svg b/feather/rotate-ccw.svg deleted file mode 100644 index ade5dc4..0000000 --- a/feather/rotate-ccw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/rotate-cw.svg b/feather/rotate-cw.svg deleted file mode 100644 index 83dca35..0000000 --- a/feather/rotate-cw.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/rss.svg b/feather/rss.svg deleted file mode 100644 index c9a1368..0000000 --- a/feather/rss.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/save.svg b/feather/save.svg deleted file mode 100644 index 46c7299..0000000 --- a/feather/save.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/scissors.svg b/feather/scissors.svg deleted file mode 100644 index fd0647f..0000000 --- a/feather/scissors.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/search.svg b/feather/search.svg deleted file mode 100644 index 8710306..0000000 --- a/feather/search.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/send.svg b/feather/send.svg deleted file mode 100644 index 42ef2a2..0000000 --- a/feather/send.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/server.svg b/feather/server.svg deleted file mode 100644 index 54ce094..0000000 --- a/feather/server.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/settings.svg b/feather/settings.svg deleted file mode 100644 index 19c2726..0000000 --- a/feather/settings.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/share-2.svg b/feather/share-2.svg deleted file mode 100644 index 09b1c7b..0000000 --- a/feather/share-2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/share.svg b/feather/share.svg deleted file mode 100644 index df38c14..0000000 --- a/feather/share.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/shield-off.svg b/feather/shield-off.svg deleted file mode 100644 index 18692dd..0000000 --- a/feather/shield-off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/shield.svg b/feather/shield.svg deleted file mode 100644 index c7c4841..0000000 --- a/feather/shield.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/shopping-bag.svg b/feather/shopping-bag.svg deleted file mode 100644 index eaa39e8..0000000 --- a/feather/shopping-bag.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/shopping-cart.svg b/feather/shopping-cart.svg deleted file mode 100644 index 17a40bf..0000000 --- a/feather/shopping-cart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/shuffle.svg b/feather/shuffle.svg deleted file mode 100644 index 8cfb5db..0000000 --- a/feather/shuffle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/sidebar.svg b/feather/sidebar.svg deleted file mode 100644 index 8ba817e..0000000 --- a/feather/sidebar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/skip-back.svg b/feather/skip-back.svg deleted file mode 100644 index 88d024e..0000000 --- a/feather/skip-back.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/skip-forward.svg b/feather/skip-forward.svg deleted file mode 100644 index f3fdac3..0000000 --- a/feather/skip-forward.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/slack.svg b/feather/slack.svg deleted file mode 100644 index 5d97346..0000000 --- a/feather/slack.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/slash.svg b/feather/slash.svg deleted file mode 100644 index f4131b8..0000000 --- a/feather/slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/sliders.svg b/feather/sliders.svg deleted file mode 100644 index 19c9385..0000000 --- a/feather/sliders.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/smartphone.svg b/feather/smartphone.svg deleted file mode 100644 index 0171a95..0000000 --- a/feather/smartphone.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/smile.svg b/feather/smile.svg deleted file mode 100644 index 24dc8a2..0000000 --- a/feather/smile.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/speaker.svg b/feather/speaker.svg deleted file mode 100644 index 75d5ff9..0000000 --- a/feather/speaker.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/square.svg b/feather/square.svg deleted file mode 100644 index 6eabc77..0000000 --- a/feather/square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/star.svg b/feather/star.svg deleted file mode 100644 index bcdc31a..0000000 --- a/feather/star.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/stop-circle.svg b/feather/stop-circle.svg deleted file mode 100644 index c10d9d4..0000000 --- a/feather/stop-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/sun.svg b/feather/sun.svg deleted file mode 100644 index 7f51b94..0000000 --- a/feather/sun.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/sunrise.svg b/feather/sunrise.svg deleted file mode 100644 index eff4b1e..0000000 --- a/feather/sunrise.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/sunset.svg b/feather/sunset.svg deleted file mode 100644 index a5a2221..0000000 --- a/feather/sunset.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/tablet.svg b/feather/tablet.svg deleted file mode 100644 index 9c80b40..0000000 --- a/feather/tablet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/tag.svg b/feather/tag.svg deleted file mode 100644 index 7219b15..0000000 --- a/feather/tag.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/target.svg b/feather/target.svg deleted file mode 100644 index be84b17..0000000 --- a/feather/target.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/terminal.svg b/feather/terminal.svg deleted file mode 100644 index af459c0..0000000 --- a/feather/terminal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/thermometer.svg b/feather/thermometer.svg deleted file mode 100644 index 33142cc..0000000 --- a/feather/thermometer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/thumbs-down.svg b/feather/thumbs-down.svg deleted file mode 100644 index 3e7bcd6..0000000 --- a/feather/thumbs-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/thumbs-up.svg b/feather/thumbs-up.svg deleted file mode 100644 index 226c44d..0000000 --- a/feather/thumbs-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/toggle-left.svg b/feather/toggle-left.svg deleted file mode 100644 index 240be29..0000000 --- a/feather/toggle-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/toggle-right.svg b/feather/toggle-right.svg deleted file mode 100644 index fc6e81c..0000000 --- a/feather/toggle-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/tool.svg b/feather/tool.svg deleted file mode 100644 index f3cbf3d..0000000 --- a/feather/tool.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/trash-2.svg b/feather/trash-2.svg deleted file mode 100644 index f24d55b..0000000 --- a/feather/trash-2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/trash.svg b/feather/trash.svg deleted file mode 100644 index 55650bd..0000000 --- a/feather/trash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/trello.svg b/feather/trello.svg deleted file mode 100644 index b2f599b..0000000 --- a/feather/trello.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/trending-down.svg b/feather/trending-down.svg deleted file mode 100644 index a9d4cfa..0000000 --- a/feather/trending-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/trending-up.svg b/feather/trending-up.svg deleted file mode 100644 index 52026a4..0000000 --- a/feather/trending-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/triangle.svg b/feather/triangle.svg deleted file mode 100644 index 274b652..0000000 --- a/feather/triangle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/truck.svg b/feather/truck.svg deleted file mode 100644 index 3389837..0000000 --- a/feather/truck.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/tv.svg b/feather/tv.svg deleted file mode 100644 index 955bbff..0000000 --- a/feather/tv.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/twitch.svg b/feather/twitch.svg deleted file mode 100644 index 1706249..0000000 --- a/feather/twitch.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/twitter.svg b/feather/twitter.svg deleted file mode 100644 index f8886ec..0000000 --- a/feather/twitter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/type.svg b/feather/type.svg deleted file mode 100644 index c6b2de3..0000000 --- a/feather/type.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/umbrella.svg b/feather/umbrella.svg deleted file mode 100644 index dc77c0c..0000000 --- a/feather/umbrella.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/underline.svg b/feather/underline.svg deleted file mode 100644 index 044945d..0000000 --- a/feather/underline.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/unlock.svg b/feather/unlock.svg deleted file mode 100644 index 01dc359..0000000 --- a/feather/unlock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/upload-cloud.svg b/feather/upload-cloud.svg deleted file mode 100644 index a1db297..0000000 --- a/feather/upload-cloud.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/upload.svg b/feather/upload.svg deleted file mode 100644 index 91eaff7..0000000 --- a/feather/upload.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/user-check.svg b/feather/user-check.svg deleted file mode 100644 index 42f91b2..0000000 --- a/feather/user-check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/user-minus.svg b/feather/user-minus.svg deleted file mode 100644 index 44b75f5..0000000 --- a/feather/user-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/user-plus.svg b/feather/user-plus.svg deleted file mode 100644 index 21460f6..0000000 --- a/feather/user-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/user-x.svg b/feather/user-x.svg deleted file mode 100644 index 0c41a48..0000000 --- a/feather/user-x.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/user.svg b/feather/user.svg deleted file mode 100644 index 7bb5f29..0000000 --- a/feather/user.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/users.svg b/feather/users.svg deleted file mode 100644 index aacf6b0..0000000 --- a/feather/users.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/video-off.svg b/feather/video-off.svg deleted file mode 100644 index 08ec697..0000000 --- a/feather/video-off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/video.svg b/feather/video.svg deleted file mode 100644 index 8ff156a..0000000 --- a/feather/video.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/voicemail.svg b/feather/voicemail.svg deleted file mode 100644 index 5d78a8e..0000000 --- a/feather/voicemail.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/volume-1.svg b/feather/volume-1.svg deleted file mode 100644 index 150e875..0000000 --- a/feather/volume-1.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/volume-2.svg b/feather/volume-2.svg deleted file mode 100644 index 03d521c..0000000 --- a/feather/volume-2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/volume-x.svg b/feather/volume-x.svg deleted file mode 100644 index be44240..0000000 --- a/feather/volume-x.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/volume.svg b/feather/volume.svg deleted file mode 100644 index 53bfe15..0000000 --- a/feather/volume.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/watch.svg b/feather/watch.svg deleted file mode 100644 index a1099da..0000000 --- a/feather/watch.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/wifi-off.svg b/feather/wifi-off.svg deleted file mode 100644 index 35eae43..0000000 --- a/feather/wifi-off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/wifi.svg b/feather/wifi.svg deleted file mode 100644 index 748c285..0000000 --- a/feather/wifi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/wind.svg b/feather/wind.svg deleted file mode 100644 index 82b3646..0000000 --- a/feather/wind.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/x-circle.svg b/feather/x-circle.svg deleted file mode 100644 index 94aad5e..0000000 --- a/feather/x-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/x-octagon.svg b/feather/x-octagon.svg deleted file mode 100644 index 8543198..0000000 --- a/feather/x-octagon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/x-square.svg b/feather/x-square.svg deleted file mode 100644 index 7677c38..0000000 --- a/feather/x-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/x.svg b/feather/x.svg deleted file mode 100644 index 7d5875c..0000000 --- a/feather/x.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/youtube.svg b/feather/youtube.svg deleted file mode 100644 index c482438..0000000 --- a/feather/youtube.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/zap-off.svg b/feather/zap-off.svg deleted file mode 100644 index c636f8b..0000000 --- a/feather/zap-off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/zap.svg b/feather/zap.svg deleted file mode 100644 index 8fdafa9..0000000 --- a/feather/zap.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/zoom-in.svg b/feather/zoom-in.svg deleted file mode 100644 index da4572d..0000000 --- a/feather/zoom-in.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feather/zoom-out.svg b/feather/zoom-out.svg deleted file mode 100644 index fd678d7..0000000 --- a/feather/zoom-out.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/format.sh b/format.sh new file mode 100755 index 0000000..6645cab --- /dev/null +++ b/format.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +set -e + +cd $(dirname -- "$0") + +clang-format -style=file -i src_c/*.c src_c/*.h diff --git a/mbgui/__init__.py b/mbgui/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/mbgui/__main__.py b/mbgui/__main__.py deleted file mode 100644 index 9d5f7b2..0000000 --- a/mbgui/__main__.py +++ /dev/null @@ -1,7 +0,0 @@ -import sys - -from mbgui.main import main - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/mbgui/executor.py b/mbgui/executor.py deleted file mode 100644 index d9efd58..0000000 --- a/mbgui/executor.py +++ /dev/null @@ -1,49 +0,0 @@ -import collections -import concurrent.futures -import threading -import typing - -from PySide6 import QtCore - - -class Executor(QtCore.QObject): - - def __init__(self): - super().__init__() - self._executor = concurrent.futures.ThreadPoolExecutor() - self._call_main_queue = collections.deque() - self._call_main_lock = threading.Lock() - - def call_main(self, - fn: typing.Callable, - *args): - with self._call_main_lock: - self._call_main_queue.append((fn, args)) - - QtCore.QMetaObject.invokeMethod(self, "_on_main_call", - QtCore.Qt.QueuedConnection) - - def call_worker(self, - fn: typing.Callable, - *args, - done_cb: typing.Callable = None, - ) -> concurrent.futures.Future: - future = self._executor.submit(fn, *args) - - if done_cb: - future.add_done_callback( - lambda f: self.call_main(done_cb, f.result())) - - return future - - @QtCore.Slot() - def _on_main_call(self): - with self._call_main_lock: - if not self._call_main_queue: - return - - queue = self._call_main_queue - self._call_main_queue = collections.deque() - - for fn, args in queue: - fn(*args) diff --git a/mbgui/icons/eye-off-16.png b/mbgui/icons/eye-off-16.png deleted file mode 100644 index 1165e76..0000000 Binary files a/mbgui/icons/eye-off-16.png and /dev/null differ diff --git a/mbgui/icons/file-16.png b/mbgui/icons/file-16.png deleted file mode 100644 index a0c6a66..0000000 Binary files a/mbgui/icons/file-16.png and /dev/null differ diff --git a/mbgui/icons/flag-16.png b/mbgui/icons/flag-16.png deleted file mode 100644 index 85c8a93..0000000 Binary files a/mbgui/icons/flag-16.png and /dev/null differ diff --git a/mbgui/icons/folder-16.png b/mbgui/icons/folder-16.png deleted file mode 100644 index a77576d..0000000 Binary files a/mbgui/icons/folder-16.png and /dev/null differ diff --git a/mbgui/icons/inbox-16.png b/mbgui/icons/inbox-16.png deleted file mode 100644 index bb82fb1..0000000 Binary files a/mbgui/icons/inbox-16.png and /dev/null differ diff --git a/mbgui/icons/mail-16.png b/mbgui/icons/mail-16.png deleted file mode 100644 index 53c53b8..0000000 Binary files a/mbgui/icons/mail-16.png and /dev/null differ diff --git a/mbgui/icons/trash-16.png b/mbgui/icons/trash-16.png deleted file mode 100644 index 46d5920..0000000 Binary files a/mbgui/icons/trash-16.png and /dev/null differ diff --git a/mbgui/main.py b/mbgui/main.py deleted file mode 100644 index 6975d6a..0000000 --- a/mbgui/main.py +++ /dev/null @@ -1,252 +0,0 @@ -from pathlib import Path -import sys -import typing - -from PySide6 import QtCore -from PySide6 import QtGui -from PySide6 import QtUiTools -from PySide6 import QtWidgets - -from mbgui import mblaze -from mbgui.executor import Executor - - -icons_path = Path(__file__).parent / 'icons' -main_ui_path = Path(__file__).parent / 'main.ui' - - -def main(): - - def on_directories_changed(current, previous): - item = directories.model.itemFromIndex(current) - directory = item.data() if item else None - messages.set_directory(directory) - - def on_messages_changed(current, pevious): - item = messages.model.itemFromIndex(current) - path = item.data() if item else None - message.set_path(path) - - def on_messages_double_clicked(index): - item = messages.model.itemFromIndex(index) - path = item.data() if item else None - if path: - print(path) - - app = QtWidgets.QApplication(sys.argv) - - executor = Executor() - icons = {i.stem: QtGui.QIcon(str(i)) - for i in icons_path.glob('*.png')} - - directories = Directories(executor, icons, sys.argv[1:]) - messages = Messages(executor, icons) - message = Message(executor) - - loader = QtUiTools.QUiLoader() - window = loader.load(str(main_ui_path)) - - font = QtGui.QFontDatabase.systemFont(QtGui.QFontDatabase.FixedFont) - window.message.setFont(font) - - window.vsplitter.setStretchFactor(0, 1) - window.vsplitter.setStretchFactor(1, 2) - - window.directories.setModel(directories.model) - model = window.directories.selectionModel() - model.currentChanged.connect(on_directories_changed) - - header = window.directories.header() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.Interactive) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Interactive) - - window.messages.setModel(messages.model) - model = window.messages.selectionModel() - model.currentChanged.connect(on_messages_changed) - window.messages.doubleClicked.connect(on_messages_double_clicked) - - header = window.messages.header() - header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - header.setSectionResizeMode(1, QtWidgets.QHeaderView.Interactive) - header.setSectionResizeMode(2, QtWidgets.QHeaderView.Interactive) - - message.change.connect(window.message.setText) - - window.show() - - sys.exit(app.exec_()) - - -class Directories: - - def __init__(self, - executor: Executor, - icons: typing.Dict[str, QtGui.QIcon], - paths: typing.Iterable[str]): - self._executor = executor - self._icons = icons - self._model = QtGui.QStandardItemModel() - self._model.setHorizontalHeaderLabels(['Directory', 'Unseen', 'Total']) - self._get_directories(paths) - - @property - def model(self) -> QtCore.QAbstractItemModel: - return self._model - - def _get_directories(self, paths): - - def on_done(directories): - for directory in directories: - self._model.appendRow(create_row(directory)) - - def create_row(directory): - icon = self._icons['inbox-16' if directory.path - else 'folder-16'] - - items = [QtGui.QStandardItem(icon, directory.name), - QtGui.QStandardItem(''), - QtGui.QStandardItem('')] - - for item in items: - item.setData(directory.path) - - if directory.path: - self._get_directory_unseen(items[1], directory.path) - self._get_directory_total(items[2], directory.path) - - for child in directory.children: - items[0].appendRow(create_row(child)) - - return items - - self._executor.call_worker(mblaze.get_directories, paths, - done_cb=on_done) - - def _get_directory_unseen(self, item, path): - - def on_done(count): - item.setText(str(count)) - - self._executor.call_worker(mblaze.get_directory_unseen, path, - done_cb=on_done) - - def _get_directory_total(self, item, path): - - def on_done(count): - item.setText(str(count)) - - self._executor.call_worker(mblaze.get_directory_total, path, - done_cb=on_done) - - -class Messages: - - def __init__(self, - executor: Executor, - icons: typing.Dict[str, QtGui.QIcon]): - self._executor = executor - self._icons = icons - self._model = QtGui.QStandardItemModel() - self._model.setHorizontalHeaderLabels(['Subject', 'Sender', 'Date']) - self._directory = None - - @property - def model(self) -> QtCore.QAbstractItemModel: - return self._model - - def set_directory(self, directory: str): - if self._directory == directory: - return - - self._directory = directory - self._model.setRowCount(0) - - if directory: - self._get_messages(directory) - - def _get_messages(self, directory): - - def on_done(messages): - if self._directory != directory: - return - - for message in messages: - self._model.appendRow(create_row(message)) - - def create_row(message): - icon = _status_icon(message.status) - icon = self._icons[f'{icon}-16'] if icon else None - - items = [QtGui.QStandardItem(icon, message.subject), - QtGui.QStandardItem(message.sender), - QtGui.QStandardItem(message.date)] - - for item in items: - item.setData(message.path) - - for child in message.children: - items[0].appendRow(create_row(child)) - - return items - - self._executor.call_worker(mblaze.get_messages, directory, - done_cb=on_done) - - def _on_messages(self, directory, messages): - if directory != self._selected_directory: - return - - -class Message(QtCore.QObject): - - change = QtCore.Signal(str) - - def __init__(self, executor: Executor): - super().__init__() - self._executor = executor - self._path = None - - def set_path(self, path: str): - if self._path == path: - return - - self._path = path - self.change.emit('') - - if path: - self._get_message(path) - - def _get_message(self, path): - - def on_done(text): - if self._path != path: - return - - self.change.emit(text) - - self._executor.call_worker(mblaze.get_message, path, - done_cb=on_done) - - -def _status_icon(status): - if status == mblaze.Status.SEEN: - return 'file' - - if status == mblaze.Status.FLAGGED: - return 'flag' - - if status == mblaze.Status.UNSEEN: - return 'mail' - - if status == mblaze.Status.TRASHED: - return 'trash' - - if status == mblaze.Status.VIRTUAL: - return 'eye-off' - - raise ValueError('unsupported status') - - -if __name__ == '__main__': - main() diff --git a/mbgui/main.ui b/mbgui/main.ui deleted file mode 100644 index a675f4c..0000000 --- a/mbgui/main.ui +++ /dev/null @@ -1,56 +0,0 @@ - - - windows - - - - 0 - 0 - 800 - 600 - - - - MainWindow - - - - - - - Qt::Horizontal - - - - QAbstractItemView::NoEditTriggers - - - false - - - - - Qt::Vertical - - - - QAbstractItemView::NoEditTriggers - - - false - - - - - true - - - - - - - - - - - diff --git a/mbgui/mblaze.py b/mbgui/mblaze.py deleted file mode 100644 index f93f6a0..0000000 --- a/mbgui/mblaze.py +++ /dev/null @@ -1,145 +0,0 @@ -from pathlib import Path -import enum -import io -import itertools -import subprocess -import typing - - -class Status(enum.Enum): - SEEN = ' ' - FLAGGED = '*' - UNSEEN = '.' - TRASHED = 'x' - VIRTUAL = 'v' - - -class Directory(typing.NamedTuple): - path: typing.Optional[str] - name: str - children: typing.List['Directory'] - - -class Message(typing.NamedTuple): - path: str - status: Status - subject: str - sender: str - date: str - children: typing.List['Message'] - - -def get_directories(roots: typing.Iterable[str]) -> typing.List[Directory]: - paths = _cmd(['mdirs', '-a', *roots]) - directories = (_get_directory(path, Path(path).parts) for path in paths) - directories = _group_directories(directories) - directories = [_reduce_directory(directory) for directory in directories] - return directories - - -def get_directory_total(dir_path: str) -> int: - paths = _cmd(['mlist', dir_path]) - return sum(1 for i in paths) - - -def get_directory_unseen(dir_path: str) -> int: - paths = _cmd(['mlist', '-s', dir_path]) - return sum(1 for i in paths) - - -def get_messages(dir_path: str) -> typing.List[Message]: - paths = _cmd(['mlist', dir_path]) - paths = _cmd(['mthread', '-r'], paths) - lines = _cmd(['mscan', '-f', r'%i\n%R\n%u\n%s\n%f\n%D'], paths) - messages = _parse_messages(lines) - return messages - - -def get_message(msg_path: str) -> str: - if not Path(msg_path).exists(): - return '' - lines = _cmd(['mshow', msg_path]) - return '\n'.join(lines) - - -def _cmd(args, stdin_lines=[]): - p = subprocess.run(args, - input='\n'.join(stdin_lines), - stdout=subprocess.PIPE, - encoding='utf-8', - check=True) - stdout = io.StringIO(p.stdout) - while True: - line = stdout.readline() - if not line: - break - yield line[:-1] - - -def _get_directory(path, path_parts): - name, path_parts = path_parts[0], path_parts[1:] - children = [_get_directory(path, path_parts)] if path_parts else [] - return Directory(path=(path if not path_parts else None), - name=name, - children=children) - - -def _group_directories(directories): - name_directories = {} - for i in directories: - name_directories.setdefault(i.name, []).append(i) - - for name, directories in name_directories.items(): - path = next((i.path for i in directories if i.path), None) - children = list(_group_directories( - itertools.chain.from_iterable(i.children for i in directories))) - yield Directory(path=path, - name=name, - children=children) - - -def _reduce_directory(directory): - while not directory.path and len(directory.children) == 1: - child = directory.children[0] - directory = child._replace(name=str(Path(directory.name) / child.name)) - - return directory._replace(children=[_reduce_directory(child) - for child in directory.children]) - - -def _parse_messages(lines): - messages = [] - - while True: - try: - line = next(lines) - except StopIteration: - break - - if line.startswith('..'): - depth = int(line[2:].split('.', 1)[0]) - 1 - else: - depth = line.count(' ') - - path = next(lines) - - status = Status(next(lines)) - if not Path(path).exists(): - status = Status.VIRTUAL - - message = Message(path=path, - status=status, - subject=next(lines), - sender=next(lines), - date=next(lines), - children=[]) - - children = messages - while depth: - if children: - children = children[-1].children - depth -= 1 - - children.append(message) - - return messages diff --git a/run.sh b/run.sh deleted file mode 100755 index a13fa5c..0000000 --- a/run.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -set -e - -PYTHON=${PYTHON:-python3} -ROOT_DIR=$(dirname -- "$0") - -export PYTHONPATH=$ROOT_DIR - -exec $PYTHON -m mbgui "$@" diff --git a/setup.py b/setup.py deleted file mode 100644 index 6c5683e..0000000 --- a/setup.py +++ /dev/null @@ -1,23 +0,0 @@ -from pathlib import Path -from setuptools import setup - - -readme = (Path(__file__).parent / 'README.rst').read_text() - - -setup( - name='mbgui', - version='0.1.3', - description='Maildir GUI based on mblaze', - long_description=readme, - long_description_content_type='text/x-rst', - url='https://github.com/bozokopic/mbgui', - packages=['mbgui'], - install_requires=['PySide6'], - package_data={'mbgui': ['icons/*.png', - 'main.ui']}, - license='GPLv3', - classifiers=[ - 'Programming Language :: Python :: 3', - 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)'], - entry_points={'console_scripts': ['mbgui = mbgui.main:main']}) diff --git a/src_c/main.c b/src_c/main.c new file mode 100644 index 0000000..ec30a13 --- /dev/null +++ b/src_c/main.c @@ -0,0 +1,389 @@ +#include +#include "mblaze.h" + + +typedef struct { + GtkTreeStore *directories_store; + GtkTreeSelection *directories_selection; + GtkTreeStore *messages_store; + GtkTreeSelection *messages_selection; + GtkTextBuffer *message_buffer; +} app_data_t; + +typedef struct { + grefcount rc; + GtkTreeStore *store; + GtkTreeIter iter; +} tree_store_iter_data_t; + + +static gchar *get_message_status_icon(mbgui_message_status_t status) { + switch (status) { + case MBGUI_MSG_STATUS_SEEN: + return "mail-read"; + case MBGUI_MSG_STATUS_FLAGGED: + return "starred"; + case MBGUI_MSG_STATUS_UNSEEN: + return "mail-unread"; + case MBGUI_MSG_STATUS_TRASHED: + return "user-trash"; + case MBGUI_MSG_STATUS_VIRTUAL: + return NULL; + } + return NULL; +} + + +static gchar *get_selected_directory(app_data_t *data) { + GtkTreeIter iter; + + if (!gtk_tree_selection_get_selected( + data->directories_selection, + (GtkTreeModel **)&(data->directories_store), &iter)) + return NULL; + + gchar *result; + gtk_tree_model_get(GTK_TREE_MODEL(data->directories_store), &iter, 0, + &result, -1); + return result; +} + + +static gchar *get_selected_message(app_data_t *data) { + GtkTreeIter iter; + + if (!gtk_tree_selection_get_selected( + data->messages_selection, (GtkTreeModel **)&(data->messages_store), + &iter)) + return NULL; + + gchar *result; + gtk_tree_model_get(GTK_TREE_MODEL(data->messages_store), &iter, 0, &result, + -1); + return result; +} + + +static void on_get_message(gchar *path, gchar *message, gpointer user_data) { + app_data_t *data = user_data; + + if (!message || !message[0]) + return; + + gchar *selected_message = get_selected_message(data); + if (!selected_message) + return; + + int not_selected = g_strcmp0(path, selected_message); + g_free(selected_message); + if (not_selected) + return; + + gtk_text_buffer_set_text(data->message_buffer, message, -1); +} + + +static void on_messages_selection_changed(GtkTreeSelection *self, + gpointer user_data) { + app_data_t *data = user_data; + + gtk_text_buffer_set_text(data->message_buffer, "", 0); + + gchar *message = get_selected_message(data); + if (!message) + return; + + // TODO chech virtual + + mbgui_get_message(message, on_get_message, data); + g_free(message); +} + + +static void add_message(GtkTreeStore *store, mbgui_message_t *message, + GtkTreeIter *parent) { + GtkTreeIter iter; + gtk_tree_store_append(store, &iter, parent); + gtk_tree_store_set(store, &iter, 0, message->path->str, 1, + get_message_status_icon(message->status), 2, + message->subject->str, 3, message->sender->str, 4, + message->date->str, -1); + + for (mbgui_message_t *child = message->children; child; child = child->next) + add_message(store, child, &iter); +} + + +static void on_get_messages(gchar *directory, mbgui_message_t *messages, + gpointer user_data) { + app_data_t *data = user_data; + + gchar *selected_directory = get_selected_directory(data); + if (!selected_directory) + return; + + int not_selected = g_strcmp0(directory, selected_directory); + g_free(selected_directory); + if (not_selected) + return; + + for (mbgui_message_t *message = messages; message; message = message->next) + add_message(data->messages_store, message, NULL); +} + + +static void on_directories_selection_changed(GtkTreeSelection *self, + gpointer user_data) { + app_data_t *data = user_data; + + gtk_tree_store_clear(data->messages_store); + + gchar *directory = get_selected_directory(data); + if (!directory) + return; + + mbgui_get_messages(directory, on_get_messages, data); + g_free(directory); +} + + +static GtkWidget *create_directories(app_data_t *data) { + data->directories_store = + gtk_tree_store_new(5, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_STRING, G_TYPE_STRING); + + GtkCellRenderer *icon_renderer = gtk_cell_renderer_pixbuf_new(); + g_object_set(icon_renderer, "mode", GTK_CELL_RENDERER_MODE_INERT, NULL); + + GtkCellRenderer *left_renderer = gtk_cell_renderer_text_new(); + g_object_set(left_renderer, "xalign", 0.0, "xpad", 5, "mode", + GTK_CELL_RENDERER_MODE_INERT, NULL); + + GtkCellRenderer *right_renderer = gtk_cell_renderer_text_new(); + g_object_set(right_renderer, "xalign", 1.0, "mode", + GTK_CELL_RENDERER_MODE_INERT, NULL); + + GtkWidget *scrolled_window = gtk_scrolled_window_new(); + + GtkWidget *directories = + gtk_tree_view_new_with_model(GTK_TREE_MODEL(data->directories_store)); + gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scrolled_window), + directories); + + GtkTreeViewColumn *col_directory = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(col_directory, "Directory"); + gtk_tree_view_column_set_expand(col_directory, TRUE); + gtk_tree_view_column_pack_start(col_directory, icon_renderer, FALSE); + gtk_tree_view_column_set_attributes(col_directory, icon_renderer, + "icon-name", 1, NULL); + gtk_tree_view_column_pack_start(col_directory, left_renderer, TRUE); + gtk_tree_view_column_set_attributes(col_directory, left_renderer, "text", 2, + NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(directories), col_directory); + + GtkTreeViewColumn *col_unseen = gtk_tree_view_column_new_with_attributes( + "Unseen", right_renderer, "text", 3, NULL); + gtk_tree_view_column_set_sizing(col_unseen, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_append_column(GTK_TREE_VIEW(directories), col_unseen); + + GtkTreeViewColumn *col_total = gtk_tree_view_column_new_with_attributes( + "Total", right_renderer, "text", 4, NULL); + gtk_tree_view_column_set_sizing(col_total, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_append_column(GTK_TREE_VIEW(directories), col_total); + + data->directories_selection = + gtk_tree_view_get_selection(GTK_TREE_VIEW(directories)); + gtk_tree_selection_set_mode(data->directories_selection, + GTK_SELECTION_SINGLE); + g_signal_connect(data->directories_selection, "changed", + G_CALLBACK(on_directories_selection_changed), data); + + return scrolled_window; +} + + +static GtkWidget *create_messages(app_data_t *data) { + data->messages_store = + gtk_tree_store_new(5, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_STRING, G_TYPE_STRING); + + GtkCellRenderer *icon_renderer = gtk_cell_renderer_pixbuf_new(); + g_object_set(icon_renderer, "mode", GTK_CELL_RENDERER_MODE_INERT, NULL); + + GtkCellRenderer *left_renderer = gtk_cell_renderer_text_new(); + g_object_set(left_renderer, "xalign", 0.0, "xpad", 5, "mode", + GTK_CELL_RENDERER_MODE_INERT, NULL); + + GtkWidget *scrolled_window = gtk_scrolled_window_new(); + + GtkWidget *messages = + gtk_tree_view_new_with_model(GTK_TREE_MODEL(data->messages_store)); + gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scrolled_window), + messages); + + GtkTreeViewColumn *col_subject = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(col_subject, "Subject"); + gtk_tree_view_column_set_expand(col_subject, TRUE); + gtk_tree_view_column_pack_start(col_subject, icon_renderer, FALSE); + gtk_tree_view_column_set_attributes(col_subject, icon_renderer, "icon-name", + 1, NULL); + gtk_tree_view_column_pack_start(col_subject, left_renderer, TRUE); + gtk_tree_view_column_set_attributes(col_subject, left_renderer, "text", 2, + NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(messages), col_subject); + + GtkTreeViewColumn *col_sender = gtk_tree_view_column_new_with_attributes( + "Sender", left_renderer, "text", 3, NULL); + gtk_tree_view_column_set_sizing(col_sender, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_append_column(GTK_TREE_VIEW(messages), col_sender); + + GtkTreeViewColumn *col_date = gtk_tree_view_column_new_with_attributes( + "Date", left_renderer, "text", 4, NULL); + gtk_tree_view_column_set_sizing(col_date, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_append_column(GTK_TREE_VIEW(messages), col_date); + + data->messages_selection = + gtk_tree_view_get_selection(GTK_TREE_VIEW(messages)); + gtk_tree_selection_set_mode(data->messages_selection, GTK_SELECTION_SINGLE); + g_signal_connect(data->messages_selection, "changed", + G_CALLBACK(on_messages_selection_changed), data); + + return scrolled_window; +} + + +static GtkWidget *create_message(app_data_t *data) { + data->message_buffer = gtk_text_buffer_new(NULL); + + GtkWidget *scrolled_window = gtk_scrolled_window_new(); + + GtkWidget *message = gtk_text_view_new_with_buffer(data->message_buffer); + gtk_text_view_set_editable(GTK_TEXT_VIEW(message), FALSE); + gtk_text_view_set_monospace(GTK_TEXT_VIEW(message), TRUE); + gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scrolled_window), + message); + + return scrolled_window; +} + + +static GtkWidget *create_window(GtkApplication *app, app_data_t *data) { + GtkWidget *window = gtk_application_window_new(app); + gtk_window_set_title(GTK_WINDOW(window), "mbgui"); + gtk_window_set_default_size(GTK_WINDOW(window), 600, 800); + + GtkWidget *hpaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL); + gtk_paned_set_position(GTK_PANED(hpaned), 400); + gtk_window_set_child(GTK_WINDOW(window), hpaned); + + GtkWidget *directories = create_directories(data); + gtk_paned_set_start_child(GTK_PANED(hpaned), directories); + gtk_paned_set_resize_start_child(GTK_PANED(hpaned), TRUE); + + GtkWidget *vpaned = gtk_paned_new(GTK_ORIENTATION_VERTICAL); + gtk_paned_set_position(GTK_PANED(vpaned), 400); + gtk_paned_set_end_child(GTK_PANED(hpaned), vpaned); + gtk_paned_set_resize_end_child(GTK_PANED(hpaned), TRUE); + + GtkWidget *messages = create_messages(data); + gtk_paned_set_start_child(GTK_PANED(vpaned), messages); + gtk_paned_set_resize_start_child(GTK_PANED(vpaned), TRUE); + + GtkWidget *message = create_message(data); + gtk_paned_set_end_child(GTK_PANED(vpaned), message); + gtk_paned_set_resize_end_child(GTK_PANED(vpaned), TRUE); + + return window; +} + + +static void on_get_directory_unseen(gchar *directory, gsize unseen, + gpointer user_data) { + tree_store_iter_data_t *data = user_data; + + GString *unseen_str = g_string_sized_new(8); + g_string_printf(unseen_str, "%lu", unseen); + + gtk_tree_store_set(data->store, &(data->iter), 3, unseen_str->str, -1); + + g_string_free(unseen_str, TRUE); + if (g_ref_count_dec((grefcount *)data)) + g_free(data); +} + + +static void on_get_directory_total(gchar *directory, gsize total, + gpointer user_data) { + tree_store_iter_data_t *data = user_data; + + GString *total_str = g_string_sized_new(8); + g_string_printf(total_str, "%lu", total); + + gtk_tree_store_set(data->store, &(data->iter), 4, total_str->str, -1); + + g_string_free(total_str, TRUE); + if (g_ref_count_dec((grefcount *)data)) + g_free(data); +} + + +static void add_directory(GtkTreeStore *store, mbgui_directory_t *directory, + GtkTreeIter *parent) { + GtkTreeIter iter; + gtk_tree_store_append(store, &iter, parent); + gtk_tree_store_set(store, &iter, 0, + (directory->path ? directory->path->str : NULL), 1, + (directory->path ? "folder-documents" : "folder"), 2, + directory->name->str, -1); + + for (mbgui_directory_t *child = directory->children; child; + child = child->next) + add_directory(store, child, &iter); + + if (!directory->path) + return; + + tree_store_iter_data_t *data = g_malloc(sizeof(tree_store_iter_data_t)); + data->store = store; + data->iter = iter; + + g_ref_count_init((grefcount *)data); + mbgui_get_directory_unseen(directory->path->str, on_get_directory_unseen, + data); + + g_ref_count_inc((grefcount *)data); + mbgui_get_directory_total(directory->path->str, on_get_directory_total, + data); +} + + +static void on_get_directories(mbgui_directory_t *directories, + gpointer user_data) { + app_data_t *data = user_data; + + for (mbgui_directory_t *directory = directories; directory; + directory = directory->next) + add_directory(data->directories_store, directory, NULL); +} + + +static void on_command_line(GtkApplication *app, + GApplicationCommandLine *command_line, + gpointer user_data) { + app_data_t *data = g_malloc(sizeof(app_data_t)); + GtkWidget *window = create_window(app, data); + gtk_window_present(GTK_WINDOW(window)); + + gchar **argv = g_application_command_line_get_arguments(command_line, NULL); + mbgui_get_directories(argv, on_get_directories, data); + g_strfreev(argv); +} + + +int main(int argc, char **argv) { + GtkApplication *app = + gtk_application_new(NULL, G_APPLICATION_HANDLES_COMMAND_LINE); + g_signal_connect(app, "command-line", G_CALLBACK(on_command_line), NULL); + + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/src_c/mblaze.c b/src_c/mblaze.c new file mode 100644 index 0000000..f6ee2ce --- /dev/null +++ b/src_c/mblaze.c @@ -0,0 +1,511 @@ +#include +#include +#include +#include "mblaze.h" + + +typedef struct { + mbgui_get_directories_cb_t cb; + gpointer user_data; + mbgui_directory_t *directories; + GSubprocess *process; + GDataInputStream *stream; +} get_directories_data_t; + +typedef struct { + GString *directory; + mbgui_get_directory_total_cb_t cb; + gpointer user_data; + gsize total; + GSubprocess *process; + GDataInputStream *stream; +} get_directory_total_data_t; + +typedef struct { + GString *directory; + mbgui_get_directory_unseen_cb_t cb; + gpointer user_data; + gsize unseen; + GSubprocess *process; + GDataInputStream *stream; +} get_directory_unseen_data_t; + +typedef struct { + GString *directory; + mbgui_get_messages_cb_t cb; + gpointer user_data; + mbgui_message_t *messages; + gchar *line_buff[6]; + gsize line_buff_count; + gint mlist_stdout_fd; + gint mthread_stdout_fd; + gint mscan_stdout_fd; + GInputStream *mscan_stdout; + GDataInputStream *stream; +} get_messages_data_t; + +typedef struct { + GString *path; + mbgui_get_message_cb_t cb; + gpointer user_data; + gchar buff[1024]; + GString *message; + GSubprocess *process; +} get_message_data_t; + + +static void free_directories(mbgui_directory_t *directories) { + if (!directories) + return; + if (directories->path) + g_string_free(directories->path, TRUE); + if (directories->name) + g_string_free(directories->name, TRUE); + free_directories(directories->children); + free_directories(directories->next); + g_free(directories); +} + + +static void free_messages(mbgui_message_t *messages) { + if (!messages) + return; + if (messages->path) + g_string_free(messages->path, TRUE); + if (messages->subject) + g_string_free(messages->subject, TRUE); + if (messages->sender) + g_string_free(messages->sender, TRUE); + if (messages->date) + g_string_free(messages->date, TRUE); + free_messages(messages->children); + free_messages(messages->next); + g_free(messages); +} + + +static void free_get_directories_data(get_directories_data_t *data) { + free_directories(data->directories); + g_object_unref(data->stream); + g_object_unref(data->process); + g_free(data); +} + + +static void free_get_directory_total_data(get_directory_total_data_t *data) { + g_string_free(data->directory, TRUE); + g_object_unref(data->stream); + g_object_unref(data->process); + g_free(data); +} + + +static void free_get_directory_unseen_data(get_directory_unseen_data_t *data) { + g_string_free(data->directory, TRUE); + g_object_unref(data->stream); + g_object_unref(data->process); + g_free(data); +} + + +static void free_get_messages_data(get_messages_data_t *data) { + g_string_free(data->directory, TRUE); + free_messages(data->messages); + for (gsize i = 0; i < data->line_buff_count; ++i) + g_free(data->line_buff[i]); + if (data->stream) + g_object_unref(data->stream); + if (data->mscan_stdout) + g_object_unref(data->mscan_stdout); + if (data->mscan_stdout_fd >= 0) + g_close(data->mscan_stdout_fd, NULL); + if (data->mthread_stdout_fd >= 0) + g_close(data->mthread_stdout_fd, NULL); + if (data->mlist_stdout_fd >= 0) + g_close(data->mlist_stdout_fd, NULL); + free(data); +} + + +static void free_get_message_data(get_message_data_t *data) { + g_string_free(data->path, TRUE); + g_string_free(data->message, TRUE); + g_object_unref(data->process); + g_free(data); +} + + +static void reduce_directory(mbgui_directory_t *directory) { + for (mbgui_directory_t *child = directory->children; + child && !child->next && !directory->path; + child = directory->children) { + g_string_append_printf(directory->name, "/%s", child->name->str); + directory->path = child->path; + child->path = NULL; + directory->children = child->children; + child->children = NULL; + free_directories(child); + } + + for (mbgui_directory_t *child = directory->children; child; + child = child->next) + reduce_directory(child); +} + + +static mbgui_directory_t *reverse_directories(mbgui_directory_t *directories) { + mbgui_directory_t *reversed = NULL; + while (directories) { + mbgui_directory_t *next = directories->next; + directories->children = reverse_directories(directories->children); + directories->next = reversed; + reversed = directories; + directories = next; + } + return reversed; +} + + +static mbgui_directory_t *add_directory(mbgui_directory_t *directories, + gchar *path, gchar *name) { + if (*name != '/') + return directories; + + gsize index = 1; + while (name[index] && name[index] != '/') + ++index; + + if (name[index]) { + GString *subname = g_string_new_len(name + 1, index - 1); + + mbgui_directory_t *directory = directories; + while (directory && !g_string_equal(directory->name, subname)) + directory = directory->next; + + if (directory) { + g_string_free(subname, TRUE); + + } else { + directory = g_malloc(sizeof(mbgui_directory_t)); + directory->path = NULL; + directory->name = subname; + directory->children = NULL; + directory->next = directories; + } + + directory->children = + add_directory(directory->children, path, name + index); + return directory; + } + + mbgui_directory_t *directory = g_malloc(sizeof(mbgui_directory_t)); + directory->path = g_string_new(path); + directory->name = g_string_new(name + 1); + directory->children = NULL; + directory->next = directories; + return directory; +} + + +static gsize get_message_depth(gchar *line) { + gsize depth = 0; + + if (line[0] == '.' && line[1] == '.') { + for (gchar *i = line + 2; g_ascii_isdigit(*i); ++i) + depth = depth * 10 + (*i - '0'); + + } else { + for (gchar *i = line; *i; ++i) { + if (*i == ' ') + depth += 1; + } + } + + return depth; +} + + +static mbgui_message_t *reverse_messages(mbgui_message_t *messages) { + mbgui_message_t *reversed = NULL; + while (messages) { + mbgui_message_t *next = messages->next; + messages->children = reverse_messages(messages->children); + messages->next = reversed; + reversed = messages; + messages = next; + } + return reversed; +} + + +static mbgui_message_t *add_message(mbgui_message_t *messages, gsize depth, + gchar **lines) { + if (depth && messages) { + messages->children = add_message(messages->children, depth - 1, lines); + return messages; + } + + mbgui_message_t *message = g_malloc(sizeof(mbgui_message_t)); + message->path = g_string_new(lines[0]); + message->status = lines[1][0]; + message->subject = g_string_new(lines[2]); + message->sender = g_string_new(lines[3]); + message->date = g_string_new(lines[4]); + message->children = NULL; + message->next = messages; + + return message; +} + + +static void on_get_directories_read_line(GObject *source_object, + GAsyncResult *result, + gpointer user_data) { + get_directories_data_t *data = user_data; + + gchar *line = + g_data_input_stream_read_line_finish(data->stream, result, NULL, NULL); + + if (!line) { + data->directories = reverse_directories(data->directories); + for (mbgui_directory_t *directory = data->directories; directory; + directory = directory->next) { + g_string_prepend_c(directory->name, '/'); + reduce_directory(directory); + } + data->cb(data->directories, data->user_data); + free_get_directories_data(data); + return; + } + + data->directories = add_directory(data->directories, line, line); + g_free(line); + + g_data_input_stream_read_line_async(data->stream, 0, NULL, + on_get_directories_read_line, data); +} + + +static void on_get_directory_total_read_line(GObject *source_object, + GAsyncResult *result, + gpointer user_data) { + get_directory_total_data_t *data = user_data; + + gchar *line = + g_data_input_stream_read_line_finish(data->stream, result, NULL, NULL); + + if (!line) { + data->cb(data->directory->str, data->total, data->user_data); + free_get_directory_total_data(data); + return; + } + + data->total += 1; + g_free(line); + + g_data_input_stream_read_line_async(data->stream, 0, NULL, + on_get_directory_total_read_line, data); +} + + +static void on_get_directory_unseen_read_line(GObject *source_object, + GAsyncResult *result, + gpointer user_data) { + get_directory_unseen_data_t *data = user_data; + + gchar *line = + g_data_input_stream_read_line_finish(data->stream, result, NULL, NULL); + + if (!line) { + data->cb(data->directory->str, data->unseen, data->user_data); + free_get_directory_unseen_data(data); + return; + } + + data->unseen += 1; + g_free(line); + + g_data_input_stream_read_line_async( + data->stream, 0, NULL, on_get_directory_unseen_read_line, data); +} + + +static void on_get_messages_read_line(GObject *source_object, + GAsyncResult *result, + gpointer user_data) { + get_messages_data_t *data = user_data; + + gchar *line = + g_data_input_stream_read_line_finish(data->stream, result, NULL, NULL); + + if (!line) { + data->messages = reverse_messages(data->messages); + data->cb(data->directory->str, data->messages, data->user_data); + free_get_messages_data(data); + return; + } + + data->line_buff[data->line_buff_count++] = line; + + if (data->line_buff_count >= 6) { + gsize depth = get_message_depth(data->line_buff[0]); + data->messages = + add_message(data->messages, depth, data->line_buff + 1); + + for (gsize i = 0; i < data->line_buff_count; ++i) + g_free(data->line_buff[i]); + data->line_buff_count = 0; + } + + g_data_input_stream_read_line_async(data->stream, 0, NULL, + on_get_messages_read_line, data); +} + + +static void on_get_message_read_all(GObject *source_object, + GAsyncResult *result, gpointer user_data) { + get_message_data_t *data = user_data; + GInputStream *stream = g_subprocess_get_stdout_pipe(data->process); + + gsize count = 0; + g_input_stream_read_all_finish(stream, result, &count, NULL); + g_string_append_len(data->message, data->buff, count); + + if (count < sizeof(data->buff)) { + data->cb(data->path->str, data->message->str, data->user_data); + free_get_message_data(data); + return; + } + + g_input_stream_read_all_async(stream, data->buff, sizeof(data->buff), 0, + NULL, on_get_message_read_all, data); +} + + +void mbgui_get_directories(gchar **argv, mbgui_get_directories_cb_t cb, + gpointer user_data) { + GStrvBuilder *new_argv_builder = g_strv_builder_new(); + g_strv_builder_add_many(new_argv_builder, "mdirs", "-a", NULL); + g_strv_builder_addv(new_argv_builder, (const gchar **)argv); + + gchar **new_argv = g_strv_builder_end(new_argv_builder); + g_strv_builder_unref(new_argv_builder); + + get_directories_data_t *data = g_malloc(sizeof(get_directories_data_t)); + data->cb = cb; + data->user_data = user_data; + data->directories = NULL; + data->process = g_subprocess_newv((const gchar **)new_argv, + G_SUBPROCESS_FLAGS_STDOUT_PIPE, NULL); + data->stream = + g_data_input_stream_new(g_subprocess_get_stdout_pipe(data->process)); + + g_data_input_stream_read_line_async(data->stream, 0, NULL, + on_get_directories_read_line, data); + + g_strfreev(new_argv); +} + + +void mbgui_get_directory_total(gchar *directory, + mbgui_get_directory_total_cb_t cb, + gpointer user_data) { + get_directory_total_data_t *data = + g_malloc(sizeof(get_directory_total_data_t)); + data->directory = g_string_new(directory); + data->cb = cb; + data->user_data = user_data; + data->total = 0; + data->process = g_subprocess_new(G_SUBPROCESS_FLAGS_STDOUT_PIPE, NULL, + "mlist", directory, NULL); + data->stream = + g_data_input_stream_new(g_subprocess_get_stdout_pipe(data->process)); + + g_data_input_stream_read_line_async(data->stream, 0, NULL, + on_get_directory_total_read_line, data); +} + + +void mbgui_get_directory_unseen(gchar *directory, + mbgui_get_directory_unseen_cb_t cb, + gpointer user_data) { + get_directory_unseen_data_t *data = + g_malloc(sizeof(get_directory_unseen_data_t)); + data->directory = g_string_new(directory); + data->cb = cb; + data->user_data = user_data; + data->unseen = 0; + data->process = g_subprocess_new(G_SUBPROCESS_FLAGS_STDOUT_PIPE, NULL, + "mlist", "-s", directory, NULL); + data->stream = + g_data_input_stream_new(g_subprocess_get_stdout_pipe(data->process)); + + g_data_input_stream_read_line_async( + data->stream, 0, NULL, on_get_directory_unseen_read_line, data); +} + + +void mbgui_get_messages(gchar *directory, mbgui_get_messages_cb_t cb, + gpointer user_data) { + get_messages_data_t *data = g_malloc(sizeof(get_messages_data_t)); + data->directory = g_string_new(directory), data->cb = cb; + data->user_data = user_data; + data->messages = NULL; + data->line_buff_count = 0; + data->mlist_stdout_fd = -1; + data->mthread_stdout_fd = -1; + data->mscan_stdout_fd = -1; + data->mscan_stdout = NULL; + data->stream = NULL; + + const gchar *mlist_argv[] = {"mlist", directory, NULL}; + if (!g_spawn_async_with_pipes_and_fds( + NULL, mlist_argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, -1, -1, -1, + NULL, NULL, 0, NULL, NULL, &(data->mlist_stdout_fd), NULL, NULL)) { + g_printerr(">> mlist err"); + free_get_messages_data(data); + return; + } + + const gchar *mthread_argv[] = {"mthread", "-r", NULL}; + if (!g_spawn_async_with_pipes_and_fds( + NULL, mthread_argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, + data->mlist_stdout_fd, -1, -1, NULL, NULL, 0, NULL, NULL, + &(data->mthread_stdout_fd), NULL, NULL)) { + g_printerr(">> mthread err"); + free_get_messages_data(data); + return; + } + + const gchar *mscan_argv[] = {"mscan", "-f", "%i\n%R\n%u\n%s\n%f\n%D", NULL}; + if (!g_spawn_async_with_pipes_and_fds( + NULL, mscan_argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, + data->mthread_stdout_fd, -1, -1, NULL, NULL, 0, NULL, NULL, + &(data->mscan_stdout_fd), NULL, NULL)) { + g_printerr(">> mscan err"); + free_get_messages_data(data); + return; + } + + data->mscan_stdout = g_unix_input_stream_new(data->mscan_stdout_fd, FALSE); + data->stream = g_data_input_stream_new(data->mscan_stdout); + + g_data_input_stream_read_line_async(data->stream, 0, NULL, + on_get_messages_read_line, data); +} + + +void mbgui_get_message(gchar *path, mbgui_get_message_cb_t cb, + gpointer user_data) { + get_message_data_t *data = g_malloc(sizeof(get_message_data_t)); + data->path = g_string_new(path); + data->cb = cb; + data->user_data = user_data; + data->message = g_string_new(""); + data->process = g_subprocess_new(G_SUBPROCESS_FLAGS_STDOUT_PIPE, NULL, + "mshow", path, NULL); + + GInputStream *stream = g_subprocess_get_stdout_pipe(data->process); + g_input_stream_read_all_async(stream, data->buff, sizeof(data->buff), 0, + NULL, on_get_message_read_all, data); +} diff --git a/src_c/mblaze.h b/src_c/mblaze.h new file mode 100644 index 0000000..e49abc5 --- /dev/null +++ b/src_c/mblaze.h @@ -0,0 +1,59 @@ +#ifndef MBGUI_MBLAZE_H +#define MBGUI_MBLAZE_H + +#include + + +typedef enum { + MBGUI_MSG_STATUS_SEEN = ' ', + MBGUI_MSG_STATUS_FLAGGED = '*', + MBGUI_MSG_STATUS_UNSEEN = '.', + MBGUI_MSG_STATUS_TRASHED = 'x', + MBGUI_MSG_STATUS_VIRTUAL = 'v' +} mbgui_message_status_t; + +typedef struct mbgui_directory_t { + GString *path; + GString *name; + struct mbgui_directory_t *children; + struct mbgui_directory_t *next; +} mbgui_directory_t; + +typedef struct mbgui_message_t { + GString *path; + mbgui_message_status_t status; + GString *subject; + GString *sender; + GString *date; + struct mbgui_message_t *children; + struct mbgui_message_t *next; +} mbgui_message_t; + + +typedef void (*mbgui_get_directories_cb_t)(mbgui_directory_t *directories, + gpointer user_data); +typedef void (*mbgui_get_directory_total_cb_t)(gchar *directory, gsize total, + gpointer user_data); +typedef void (*mbgui_get_directory_unseen_cb_t)(gchar *directory, gsize unseen, + gpointer user_data); +typedef void (*mbgui_get_messages_cb_t)(gchar *directory, + mbgui_message_t *messages, + gpointer user_data); +typedef void (*mbgui_get_message_cb_t)(gchar *path, gchar *message, + gpointer user_data); + + +void mbgui_get_directories(gchar **argv, mbgui_get_directories_cb_t cb, + gpointer user_data); +void mbgui_get_directory_total(gchar *directory, + mbgui_get_directory_total_cb_t cb, + gpointer user_data); +void mbgui_get_directory_unseen(gchar *directory, + mbgui_get_directory_unseen_cb_t cb, + gpointer user_data); +void mbgui_get_messages(gchar *directory, mbgui_get_messages_cb_t cb, + gpointer user_data); +void mbgui_get_message(gchar *path, mbgui_get_message_cb_t cb, + gpointer user_data); + +#endif -- cgit v1.2.3-70-g09d2