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.

83 lines
2.4 KiB

2 months ago
# Yoda - Browser for [Gemini protocol](https://geminiprotocol.net)
2 months ago
2 weeks ago
C++ / GTK 4 implementation, see also [PHP-GTK3](https://github.com/YGGverse/Yoda/tree/PHP-GTK3) experimental branch
2 months ago
> [!IMPORTANT]
> Project in development!
>
1 month ago
## Build
1 month ago
1 month ago
### Linux
2 months ago
``` bash
1 month ago
apt install git\
libglib2.0-dev\
1 month ago
libglibmm-2.68-dev\
libgtkmm-4.0-dev\
libpangomm-2.48-dev\
libsqlite3-dev
```
2 months ago
* `git clone https://github.com/YGGverse/Yoda.git`
* `cd Yoda`
* `git checkout CPP-GTK4`
1 month ago
* `make`
1 month ago
#### Update
1 month ago
* `git pull`
* `make clean`
* `make`
## Localization
### Official
* [Crowdin](https://crowdin.com/project/yoda-browser)
### Personal
1 month ago
* `apt install intltool`
* `cd po`
* `intltool-update --pot`
1 month ago
## Development
2 weeks ago
### Structure
2 weeks ago
Application sources located at `src/app` folder, written by following principles:
2 weeks ago
2 weeks ago
* Every file implement (extend) one of GTK 4 Widgets according to subject (e.g. `class Browser : public Gtk::ApplicationWindow`)
2 weeks 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 weeks ago
* Namespaces match filesystem path, where directory namespaces are lowercase
2 weeks ago
* Every file work with it own, 1th level child only, to prevent massive logic levels keeping in mind
* 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 weeks ago
* `#include` application `.hpp` files in `.cpp`. For system libraries, use headers only. Do not place system dependencies in `.cpp`
2 weeks ago
1 month ago
### Environment
``` bash
pkg-config --cflags --libs gio-2.0\
1 month ago
glibmm-2.68\
gtkmm-4.0\
pangomm-2.48\
1 month ago
sqlite3
```
1 month ago
### Contribution
* `cd Yoda`
* `git checkout CPP-GTK4`
1 month ago
* `git pull`
1 month ago
* `git checkout -b 'contribution-name'`
### Documentation
1 month ago
#### Components
1 month 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