main.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. * Copyright (c) 2021, Luke Wilde <lukew@serenityos.org>
  3. * Copyright (c) 2021, Undefine <cqundefine@gmail.com>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #include "MailWidget.h"
  8. #include <LibConfig/Client.h>
  9. #include <LibCore/System.h>
  10. #include <LibDesktop/Launcher.h>
  11. #include <LibGUI/Application.h>
  12. #include <LibGUI/Icon.h>
  13. #include <LibGUI/Menu.h>
  14. #include <LibGUI/Menubar.h>
  15. #include <LibGUI/Window.h>
  16. #include <LibMain/Main.h>
  17. ErrorOr<int> serenity_main(Main::Arguments arguments)
  18. {
  19. TRY(Core::System::pledge("stdio recvfd sendfd rpath unix inet"));
  20. auto app = TRY(GUI::Application::create(arguments));
  21. Config::pledge_domain("Mail");
  22. TRY(Core::System::unveil("/res", "r"));
  23. TRY(Core::System::unveil("/etc", "r"));
  24. TRY(Core::System::unveil("/tmp/session/%sid/portal/webcontent", "rw"));
  25. TRY(Core::System::unveil("/tmp/portal/lookup", "rw"));
  26. TRY(Core::System::unveil("/tmp/session/%sid/portal/launch", "rw"));
  27. TRY(Core::System::unveil(nullptr, nullptr));
  28. TRY(Desktop::Launcher::add_allowed_url(URL::create_with_file_scheme("/bin/MailSettings")));
  29. TRY(Desktop::Launcher::add_allowed_handler_with_any_url("/bin/MailSettings"));
  30. TRY(Desktop::Launcher::seal_allowlist());
  31. auto window = GUI::Window::construct();
  32. auto app_icon = GUI::Icon::default_icon("app-mail"sv);
  33. window->set_icon(app_icon.bitmap_for_size(16));
  34. auto mail_widget = TRY(window->set_main_widget<MailWidget>());
  35. window->set_title("Mail");
  36. window->resize(640, 400);
  37. auto file_menu = window->add_menu("&File"_string);
  38. file_menu->add_action(GUI::CommonActions::make_quit_action([&](auto&) {
  39. mail_widget->on_window_close();
  40. app->quit();
  41. }));
  42. auto help_menu = window->add_menu("&Help"_string);
  43. help_menu->add_action(GUI::CommonActions::make_command_palette_action(window));
  44. help_menu->add_action(GUI::CommonActions::make_about_action("Mail"_string, app_icon, window));
  45. window->on_close_request = [&] {
  46. mail_widget->on_window_close();
  47. return GUI::Window::CloseRequestDecision::Close;
  48. };
  49. window->show();
  50. bool should_continue = TRY(mail_widget->connect_and_login());
  51. if (!should_continue) {
  52. return 1;
  53. }
  54. return app->exec();
  55. }