Dooble
dooble.h
1 /*
2 ** Copyright (c) 2008 - present, Alexis Megas.
3 ** All rights reserved.
4 **
5 ** Redistribution and use in source and binary forms, with or without
6 ** modification, are permitted provided that the following conditions
7 ** are met:
8 ** 1. Redistributions of source code must retain the above copyright
9 ** notice, this list of conditions and the following disclaimer.
10 ** 2. Redistributions in binary form must reproduce the above copyright
11 ** notice, this list of conditions and the following disclaimer in the
12 ** documentation and/or other materials provided with the distribution.
13 ** 3. The name of the author may not be used to endorse or promote products
14 ** derived from Dooble without specific prior written permission.
15 **
16 ** DOOBLE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 ** DOOBLE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27 
28 #ifndef dooble_h
29 #define dooble_h
30 
31 #include <QFuture>
32 #include <QLocalServer>
33 #include <QMainWindow>
34 #include <QShortcut>
35 #include <QPointer>
36 #include <QPrinter>
37 #include <QTimer>
38 #include <QWebEngineCookieStore>
39 
40 #include "dooble_settings.h"
41 #include "ui_dooble.h"
42 #include "ui_dooble_floating_digital_clock.h"
43 
44 #ifdef DOOBLE_PEEKABOO
45 extern "C"
46 {
47 #include <gpgme.h>
48 }
49 #endif
50 
51 class QDialog;
52 class QPrinter;
53 class QWebEngineDownloadItem;
54 class QWebEngineProfile;
55 class dooble_about;
57 class dooble_application;
59 class dooble_charts;
60 class dooble_cookies;
63 class dooble_downloads;
65 class dooble_gopher;
66 class dooble_history;
68 class dooble_page;
69 class dooble_popup_menu;
71 class dooble_style_sheet;
74 
75 class dooble: public QMainWindow
76 {
77  Q_OBJECT
78 
79  public:
80  enum class Limits
81  {
82  MAXIMUM_TITLE_LENGTH = 1024,
83  MAXIMUM_SQL_TEXT_LENGTH = 5000,
84  MAXIMUM_URL_LENGTH = 2048
85  };
86 
87  dooble(QWidget *widget);
88  dooble(const QList<QUrl> &urls, bool is_private, bool attach);
89  dooble(dooble_page *page);
91  ~dooble();
92  bool anonymous_tab_headers(void) const;
93  bool attached(void) const;
94  bool initialized(void) const;
95  bool is_private(void) const;
96  dooble_page *current_page(void) const;
97  dooble_page *new_page(const QUrl &url, bool is_private);
98  static QPointer<dooble_about> s_about;
99  static QPointer<dooble_accepted_or_blocked_domains>
100  s_accepted_or_blocked_domains;
101  static QPointer<dooble_application> s_application;
102  static QPointer<dooble_certificate_exceptions> s_certificate_exceptions;
103  static QPointer<dooble_cookies> s_cookies;
104  static QPointer<dooble_cookies_window> s_cookies_window;
105  static QPointer<dooble_cryptography> s_cryptography;
106  static QPointer<dooble_downloads> s_downloads;
107  static QPointer<dooble_favorites_popup> s_favorites_window;
108  static QPointer<dooble_gopher> s_gopher;
109  static QPointer<dooble_history> s_history;
110  static QPointer<dooble_history_window> s_history_popup;
111  static QPointer<dooble_history_window> s_history_window;
112  static QPointer<dooble_search_engines_popup> s_search_engines_window;
113  static QPointer<dooble_settings> s_settings;
114  static QPointer<dooble_style_sheet> s_style_sheet;
115  static QPointer<dooble_web_engine_url_request_interceptor>
116  s_url_request_interceptor;
117  static QSet<QString> s_current_url_executables;
118  static QString ABOUT_BLANK;
119  static QString s_default_http_user_agent;
120  static QSet<QString> current_url_executables(void);
121  static void clean(void);
122  static void print(QWidget *parent, dooble_charts *chart);
123  static void print_preview(QPrinter *printer, dooble_charts *chart);
124  void print_current_page(void);
125 
126  public slots:
127  void show(void);
128 
129  protected:
130  void closeEvent(QCloseEvent *event);
131  void keyPressEvent(QKeyEvent *event);
132 
133  private:
134  enum class CanExit
135  {
136  CAN_EXIT_CLOSE_EVENT = 0,
137  CAN_EXIT_SLOT_QUIT_DOOBLE
138  };
139 
140  QDialog *m_floating_digital_clock_dialog;
141  QEventLoop m_event_loop;
142  QFuture<QList<QByteArray> > m_pbkdf2_future;
143  QFutureWatcher<QList<QByteArray> > m_pbkdf2_future_watcher;
144 #ifdef Q_OS_MACOS
145  QHash<QTimer *, QShortcut *> m_disabled_shortcuts;
146 #endif
147  QList<QPair<QPointer<dooble_page>, QUrl> > m_delayed_pages;
148  QList<QPointer<QAction> > m_standard_menu_actions;
149  QList<QShortcut *> m_shortcuts;
150  QList<QShortcut *> m_tab_widget_shortcuts;
151  QList<QUrl> all_open_tab_urls(void) const;
152  QLocalServer m_local_server;
153  QMenu *m_menu;
154  QPointer<QAction> m_action_close_tab;
155  QPointer<QAction> m_authentication_action;
156  QPointer<QAction> m_full_screen_action;
157  QPointer<QAction> m_settings_action;
158  QPointer<QProgressDialog> m_pbkdf2_dialog;
159  QPointer<QWebEngineProfile> m_web_engine_profile;
160  QPointer<dooble_cookies> m_cookies;
161  QPointer<dooble_cookies_window> m_cookies_window;
162  QPointer<dooble_downloads> m_downloads;
163  QPointer<dooble_popup_menu> m_popup_menu;
164  QPrinter m_printer;
165  QTimer m_floating_digital_clock_timer;
166  QTimer m_populate_containers_timer;
167  Ui_dooble m_ui;
168  Ui_dooble_floating_digital_clock m_floating_digital_clock_ui;
169  bool m_anonymous_tab_headers;
170  bool m_attached = false;
171  bool m_is_javascript_dialog;
172  bool m_is_private;
173  bool m_print_preview;
174  static QPointer<dooble> s_dooble;
175  static QPointer<dooble> s_favorites_popup_opened_from_dooble_window;
176  static QPointer<dooble> s_search_engines_popup_opened_from_dooble_window;
177  static bool s_containers_populated;
178  QStringList chart_names(void) const;
179  bool can_exit(const dooble::CanExit can_exit);
180  bool tabs_closable(void) const;
181  static bool cookie_filter
182  (const QWebEngineCookieStore::FilterRequest &filter_request);
183 #ifdef DOOBLE_PEEKABOO
184  static gpgme_error_t peekaboo_passphrase(void *hook,
185  const char *uid_hint,
186  const char *passphrase_info,
187  int prev_was_bad,
188  int fd);
189 #endif
190  void add_tab(QWidget *widget, const QString &title);
191  void connect_signals(void);
192  void decouple_support_windows(void);
193  void delayed_load(const QUrl &url, dooble_page *page);
194  void initialize_static_members(void);
195  void new_page(dooble_charts *chart);
196  void new_page(dooble_page *page);
197  void new_page(dooble_web_engine_view *view);
198  void open_tab_as_new_window(bool is_private, int index);
199  void parse_command_line_arguments(void);
200  void prepare_control_w_shortcut(void);
201  void prepare_icons(void);
202  void prepare_local_server(void);
203  void prepare_page_connections(dooble_page *page);
204  void prepare_private_web_engine_profile_settings(void);
205  void prepare_shortcuts(void);
206  void prepare_standard_menus(void);
207  void prepare_style_sheets(void);
208  void prepare_tab_icons_text_tool_tips(void);
209  void prepare_tab_shortcuts(void);
210  void print(dooble_page *page);
211  void remove_page_connections(dooble_page *page);
212  void setWindowTitle(const QString &text);
213 
214  private slots:
215  void slot_about_to_hide_main_menu(void);
216  void slot_about_to_show_history_menu();
217  void slot_about_to_show_main_menu(void);
218  void slot_about_to_show_tabs_menu(void);
219  void slot_about_to_show_view_menu(void);
220  void slot_anonymous_tab_headers(bool state);
221  void slot_application_locked(bool state, dooble *d);
222  void slot_authenticate(void);
223  void slot_clear_downloads(void);
224  void slot_clear_history(void);
225  void slot_clear_visited_links(void);
226  void slot_close_tab(void);
227  void slot_create_dialog(dooble_web_engine_view *view);
228  void slot_create_tab(dooble_web_engine_view *view);
229  void slot_create_window(dooble_web_engine_view *view);
230  void slot_decouple_tab(int index);
231  void slot_dooble_credentials_authenticated(bool state);
232  void slot_dooble_credentials_created(void);
233  void slot_downloads_started(void);
234 #ifdef Q_OS_MACOS
235  void slot_enable_shortcut(void);
236 #endif
237  void slot_export_as_png(void);
238  void slot_floating_digital_dialog_timeout(void);
239  void slot_history_action_triggered(void);
240  void slot_history_favorites_populated(void);
241  void slot_icon_changed(const QIcon &icon);
242  void slot_inject_custom_css(void);
243  void slot_load_finished(bool ok);
244  void slot_new_local_connection(void);
245  void slot_new_private_window(void);
246  void slot_new_tab(const QUrl &url);
247  void slot_new_tab(void);
248  void slot_new_window(void);
249  void slot_open_chart(void);
250  void slot_open_favorites_link(const QUrl &url);
251  void slot_open_favorites_link_in_new_tab(const QUrl &url);
252  void slot_open_link(const QUrl &url);
253  void slot_open_link_in_new_private_window(const QUrl &url);
254  void slot_open_link_in_new_tab(const QUrl &url);
255  void slot_open_link_in_new_window(const QUrl &url);
256  void slot_open_local_file(void);
257  void slot_open_previous_session_tabs(void);
258  void slot_open_tab_as_new_private_window(int index);
259  void slot_open_tab_as_new_window(int index);
260  void slot_pbkdf2_future_finished(void);
261  void slot_peekaboo_text(const QString &t);
262  void slot_populate_containers_timer_timeout(void);
263  void slot_populated(void);
264  void slot_print(void);
265  void slot_print_finished(bool ok);
266  void slot_print_preview(QPrinter *printer);
267  void slot_print_preview(void);
268  void slot_quit_dooble(void);
269  void slot_read_local_socket(void);
270  void slot_reload_tab(int index);
271  void slot_reload_tab_periodically(int index, int seconds);
272  void slot_remove_tab_widget_shortcut(void);
273  void slot_save(void);
274  void slot_set_current_tab(void);
275  void slot_settings_applied(void);
276 #ifdef Q_OS_MACOS
277  void slot_shortcut_activated(void);
278 #endif
279  void slot_show_about(void);
280  void slot_show_accepted_or_blocked_domains(void);
281  void slot_show_certificate_exceptions(void);
282  void slot_show_chart_xyseries(void);
283  void slot_show_clear_items(void);
284  void slot_show_cookies(void);
285  void slot_show_documentation(void);
286  void slot_show_downloads(void);
287  void slot_show_favorites(void);
288  void slot_show_floating_digital_clock(void);
289  void slot_show_floating_history_popup(void);
290  void slot_show_floating_menu(void);
291  void slot_show_full_screen(bool state);
292  void slot_show_full_screen(void);
293  void slot_show_history(void);
294  void slot_show_main_menu(void);
295  void slot_show_release_notes(const QUrl &url);
296  void slot_show_release_notes(void);
297  void slot_show_search_engines(void);
298  void slot_show_settings(void);
299  void slot_show_settings_panel(dooble_settings::Panels panel);
300  void slot_show_site_cookies(void);
301  void slot_tab_close_requested(int index);
302  void slot_tab_index_changed(int index);
303  void slot_tab_widget_shortcut_activated(void);
304  void slot_tabs_menu_button_clicked(void);
305  void slot_title_changed(const QString &title);
306  void slot_vacuum_databases(void);
307  void slot_warn_of_missing_sqlite_driver(void);
308  void slot_window_close_requested(void);
309 
310  signals:
311  void add_session_url(void);
312  void application_locked(bool state, dooble *d);
313  void dooble_credentials_authenticated(bool state);
314  void history_cleared(void);
315 };
316 
317 #endif
Definition: dooble_about.h:136
Definition: dooble_accepted_or_blocked_domains.h:42
Definition: dooble_application.h:37
Definition: dooble_certificate_exceptions.h:37
Definition: dooble_charts.h:49
Definition: dooble_cookies_window.h:42
Definition: dooble_cookies.h:36
Definition: dooble_cryptography.h:36
Definition: dooble_downloads.h:46
Definition: dooble_favorites_popup.h:37
Definition: dooble_gopher.h:41
Definition: dooble_history_window.h:38
Definition: dooble_history.h:46
Definition: dooble_page.h:50
Definition: dooble_popup_menu.h:38
Definition: dooble_search_engines_popup.h:42
Definition: dooble_style_sheet.h:38
Definition: dooble_web_engine_url_request_interceptor.h:36
Definition: dooble_web_engine_view.h:37
Definition: dooble.h:76