PHP-GTK Client for Gemini Protocol
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
3.1 KiB

3 months ago
# Yoda - Browser for [Gemini protocol](https://geminiprotocol.net)
3 months ago
2 months ago
C++ / GTK 4 implementation, see also [PHP-GTK3](https://github.com/YGGverse/Yoda/tree/PHP-GTK3) experimental branch
3 months ago
> [!IMPORTANT]
> Project in development!
>
3 months ago
## Build
3 months ago
3 months ago
### Linux
3 months ago
``` bash
3 months ago
apt install git\
libglib2.0-dev\
3 months ago
libglibmm-2.68-dev\
libgtkmm-4.0-dev\
libpangomm-2.48-dev\
libsqlite3-dev
```
3 months ago
* `git clone https://github.com/YGGverse/Yoda.git`
* `cd Yoda`
* `git checkout CPP-GTK4`
3 months ago
* `make`
3 months ago
#### Update
3 months ago
* `git pull`
* `make clean`
* `make`
## Localization
### Official
* [Crowdin](https://crowdin.com/project/yoda-browser)
### Personal
3 months ago
* `apt install intltool`
* `cd po`
* `intltool-update --pot`
3 months ago
## Development
2 months ago
### Introduction
2 months ago
2 months ago
Project structure and codebase in development, it promise to grow. This section would help with understand what is going on, before you start to work with code.
2 months ago
2 months ago
#### `src/app`
2 months ago
Currently, main application sources located at `src/app` folder, written by following principles:
2 months ago
2 months ago
* Every file implement (extend) one of GTK 4 Widgets, according to the functional subject (e.g. `class Browser : public Gtk::ApplicationWindow`)
2 months ago
* `src/app` does not contain other class types like models or libraries (another folders and namespaces at `src` root are reserved for these needs)
2 months ago
* Namespaces match filesystem path, where directory namespaces are lowercase
2 months ago
* Every file work with it own, 1th level child only, to prevent massive logic levels keeping in mind
2 months ago
* All classes (but window) never work with parents (including their dependencies) but may receive system data types as the arguments in constructors
2 months ago
* To access any children features, deeper or higher than 1th level of current class, use delegation methods (actions, getters and setters)
* One file - one class. If the file requires additional (GTK) component, this component should be placed at similar folder with same name as parent filename. So we have simple hierarchy navigation logic - from app to window, from window to it container, etc.
* At this moment, all constants named with uppercase, const everything that not mutable
2 months ago
* `#include` application `.hpp` files in `.cpp`. For system libraries, use headers only. Do not place system dependencies in `.cpp`
2 months ago
* App interact SQLite database, where table name match related class namespace, it may contain optional feature postfix (separated with double line)
2 months ago
* Database table fields must contain only members of their class (e.g. private and public variable values) and may include primary keys to their parent class (tables) according to the namespace hierarchy
2 months ago
3 months ago
### Environment
``` bash
pkg-config --cflags --libs gio-2.0\
3 months ago
glibmm-2.68\
gtkmm-4.0\
pangomm-2.48\
3 months ago
sqlite3
```
3 months ago
### Contribution
* `cd Yoda`
* `git checkout CPP-GTK4`
3 months ago
* `git pull`
3 months ago
* `git checkout -b 'contribution-name'`
### Documentation
3 months ago
#### Components
3 months ago
* [GTK](https://gtk.org) - free and open-source cross-platform widget toolkit
* [gtkmm](https://gtkmm.org) - official C++ interface for GTK
* [SQLite](https://sqlite.org) - profile database