234 lines
5.3 KiB
C++
234 lines
5.3 KiB
C++
#ifndef KRISTALL_HPP
|
|
#define KRISTALL_HPP
|
|
|
|
#include <QDir>
|
|
#include <QSettings>
|
|
#include <QClipboard>
|
|
#include <QSslCertificate>
|
|
|
|
#include "identitycollection.hpp"
|
|
#include "ssltrust.hpp"
|
|
#include "favouritecollection.hpp"
|
|
#include "protocolsetup.hpp"
|
|
#include "documentstyle.hpp"
|
|
#include "cachehandler.hpp"
|
|
#include "localization.hpp"
|
|
|
|
enum class Theme : int
|
|
{
|
|
os_default = -1,
|
|
light = 0,
|
|
dark = 1,
|
|
};
|
|
|
|
enum class UIDensity : int
|
|
{
|
|
compact = 0,
|
|
classic = 1
|
|
};
|
|
|
|
enum class RequestState : int
|
|
{
|
|
None = 0,
|
|
Started = 1,
|
|
HostFound = 2,
|
|
Connected = 3,
|
|
|
|
StartedWeb = 255,
|
|
};
|
|
|
|
enum class IconTheme : int
|
|
{
|
|
automatic = -1,
|
|
dark = 0,
|
|
light = 1
|
|
};
|
|
|
|
enum class AnsiEscRenderMode : int
|
|
{
|
|
ignore = 0,
|
|
render = 1,
|
|
strip = 2
|
|
};
|
|
|
|
struct NamedUrl
|
|
{
|
|
QUrl location;
|
|
QString title;
|
|
};
|
|
|
|
struct GenericSettings
|
|
{
|
|
enum TextDisplay {
|
|
FormattedText,
|
|
PlainText,
|
|
};
|
|
|
|
enum RedirectionWarning {
|
|
WarnNever = 0,
|
|
WarnOnSchemeChange = 1,
|
|
WarnOnHostChange = 2,
|
|
WarnAlways = -1,
|
|
};
|
|
|
|
enum SessionRestoreBehaviour {
|
|
NoSessionRestore = 0,
|
|
RestoreLastSession = 1,
|
|
};
|
|
|
|
QString start_page = "about:favourites";
|
|
QString search_engine = "gemini://geminispace.info/search?%1";
|
|
Theme theme = Theme::light;
|
|
IconTheme icon_theme = IconTheme::automatic;
|
|
IconTheme explicit_icon_theme = IconTheme::dark;
|
|
UIDensity ui_density = UIDensity::compact;
|
|
TextDisplay text_display = FormattedText;
|
|
bool enable_text_decoration = false;
|
|
bool use_os_scheme_handler = false;
|
|
bool show_hidden_files_in_dirs = false;
|
|
bool fancy_urlbar = true;
|
|
bool fancy_quotes = true;
|
|
bool emojis_enabled = true;
|
|
bool strip_nav = false;
|
|
bool close_window_with_last_tab = false;
|
|
AnsiEscRenderMode ansi_escapes = AnsiEscRenderMode::render;
|
|
|
|
// This is set automatically
|
|
QColor fancy_urlbar_dim_colour;
|
|
|
|
TextDisplay gophermap_display = FormattedText;
|
|
int max_redirections = 5;
|
|
RedirectionWarning redirection_policy = WarnOnHostChange;
|
|
|
|
// 5 seconds network timeout
|
|
int network_timeout = 5000;
|
|
|
|
// Additional toolbar items
|
|
bool enable_home_btn = false,
|
|
enable_newtab_btn = true,
|
|
enable_root_btn = false,
|
|
enable_parent_btn = false;
|
|
|
|
// In-memory caching
|
|
int cache_limit = 1000;
|
|
int cache_threshold = 125;
|
|
int cache_life = 60;
|
|
bool cache_unlimited_life = true;
|
|
|
|
SessionRestoreBehaviour session_restore_behaviour = RestoreLastSession;
|
|
|
|
void load(QSettings & settings);
|
|
void save(QSettings & settings) const;
|
|
};
|
|
|
|
//! Converts the certificate to a standardized fingerprint representation
|
|
//! also commonly used in browsers:
|
|
//! `:`-separated SHA256 hash
|
|
QString toFingerprintString(QSslCertificate const & certificate);
|
|
|
|
// Forward declaration
|
|
class MainWindow;
|
|
|
|
///
|
|
/// Kristall directory structure:
|
|
/// ~/.cache/kristall/
|
|
/// ./offline-pages/${HOST}/${HASHED_URL}
|
|
/// : Contains "mime/type\r\n${BLOB}"
|
|
/// ~/.config/kristall/
|
|
/// ./themes/${THEME_ID}/theme.qss
|
|
/// ./styles/${STYLE_ID}.ini
|
|
/// ./config.ini
|
|
///
|
|
namespace kristall
|
|
{
|
|
//! Whether emojis are supprted in current build configuration
|
|
extern const bool EMOJIS_SUPPORTED;
|
|
|
|
struct Trust
|
|
{
|
|
SslTrust gemini;
|
|
SslTrust https;
|
|
};
|
|
|
|
struct Dirs
|
|
{
|
|
|
|
QDir config_root;
|
|
QDir cache_root;
|
|
|
|
//! Contains files per host
|
|
QDir offline_pages;
|
|
|
|
//! Contains custom UI themes for kristall
|
|
QDir themes;
|
|
|
|
//! Contains custom document styles / presets
|
|
QDir styles;
|
|
};
|
|
|
|
struct Globals
|
|
{
|
|
ProtocolSetup protocols;
|
|
|
|
QSettings * settings;
|
|
IdentityCollection identities;
|
|
QClipboard * clipboard;
|
|
FavouriteCollection favourites;
|
|
GenericSettings options;
|
|
|
|
DocumentStyle document_style;
|
|
|
|
CacheHandler cache;
|
|
|
|
Trust trust;
|
|
|
|
Dirs dirs;
|
|
|
|
std::unique_ptr<Localization> localization;
|
|
};
|
|
|
|
//! returns the instance of the globals structure
|
|
Globals & globals();
|
|
|
|
//! Forwards the current settings to all windows
|
|
void applySettings();
|
|
|
|
//! Saves the current settings to disk
|
|
void saveSettings();
|
|
|
|
void setTheme(Theme theme);
|
|
|
|
void setIconTheme(IconTheme icotheme, Theme uitheme);
|
|
|
|
void setUiDensity(UIDensity density, bool previewing);
|
|
|
|
void saveWindowState();
|
|
|
|
//! Registers a main window as a proper kristall application window
|
|
//! that can be tracked by the application.
|
|
void registerAppWindow(MainWindow * window);
|
|
|
|
//! Opens a new window with the default page open.
|
|
//! @param load_default Loads the default/start page instead of about:blank
|
|
MainWindow * openNewWindow(bool load_default);
|
|
|
|
//! Opens a new window with the given url.
|
|
MainWindow * openNewWindow(QUrl const & url);
|
|
|
|
//! Opens a new window with the given list of urls.
|
|
//! If the list is empty, no new tab will spawned.
|
|
MainWindow * openNewWindow(QVector<QUrl> const & urls);
|
|
MainWindow * openNewWindow(QVector<NamedUrl> const & urls);
|
|
|
|
//! Returns the number of currently open windows
|
|
int getWindowCount();
|
|
|
|
//! Saves the current session including all windows, tabs and positions.
|
|
void saveSession();
|
|
|
|
//! Saves the currently used locale
|
|
void saveLocale();
|
|
}
|
|
|
|
#endif // KRISTALL_HPP
|