GingerCal 1.3: month view, Galician interface, Nginx Proxy Manager bridge option

This commit is contained in:
xocko committed 2026-10-15 17:42:46 +02:00
1 parent f44ecf4871
commit 42c3d6da91
39 files changed
+1409 -220

No files matched your search

+34 -4
View File
@@ -5,7 +5,15 @@ A small native calendar client for Gingerbread (API 9/10). Built for a Samsung G
**What it does**
- Agenda of upcoming events grouped by day, colour-coded per calendar, cached offline (SQLite)
- Month view: a 6-week grid with a coloured mark per event (calendar colour), today outlined,
the selected day's events listed below. Swipe or tap the arrows to change month; tap the
month name for today; long-press a day to create an event on it. Months outside the synced
window are fetched from the server when you open them
- Agenda view: upcoming events grouped by day (Menu > View switches; the choice is remembered)
- Interface in Galician (default) or English: Settings > Lingua / Language. Month and weekday
names are built in, since Android 2.3 has no Galician locale data; in Galician weeks start
on Monday. The system date/time pickers follow the phone's own language
- Offline cache (SQLite) of the last 35 days and the next 60 (Settings: "Days ahead")
- Create, edit and delete events (title, all-day, start/end, location, notes, alarm)
- Repeating events are shown correctly (server-side expansion, with a client-side fallback);
they can be deleted on the phone but edited only in Nextcloud
@@ -66,6 +74,24 @@ Protocol** on the resource, add the `pp-transport-v1/v2` block to Pangolin's
`listen 8443 ssl proxy_protocol;`, `set_real_ip_from <newt address>;`,
`real_ip_header proxy_protocol;`. Enable both sides together or every connection fails.
### Option C: Nginx Proxy Manager with port forwarding (no Pangolin)
If your router already forwards 80/443 to Nginx Proxy Manager, the legacy endpoint can live in
NPM itself on its own port. NPM's normal sites on 443 keep their modern TLS settings.
1. `./bridge/make-cert.sh nxc.anosanube.ovh <npm>/data/legacy-caldav`, and note the fingerprint.
2. Copy `bridge/npm/http.conf` to `<npm>/data/nginx/custom/http.conf`; if that file already
exists, append the block to it. NPM includes it at the end of its `http` block.
3. In NPM's `docker-compose.yml` add `- '8443:8443'` under `ports`, then `docker compose up -d`.
4. Forward TCP 8443 on the router to the NPM host.
5. Phone: `https://nxc.anosanube.ovh:8443`, then tap Trust if the fingerprint matches.
It forwards to NPM's own `nxc.anosanube.ovh` proxy host over loopback HTTPS, so Nextcloud's
backend address, HSTS and forced HTTPS need no extra handling. Check from a PC with
`openssl s_client -connect nxc.anosanube.ovh:8443 -tls1 -cipher 'AES128-SHA:@SECLEVEL=0'`.
At home, the phone needs your router to support NAT loopback (it already does if
`https://nxc.anosanube.ovh` works from your Wi-Fi).
### Option B: home Wi-Fi only (no Pangolin)
Use `http://<nextcloud-LAN-IP>` as the server address. Nothing to set up, but it syncs only at
@@ -104,7 +130,8 @@ you should turn `proxy_ssl_verify` on.
3. Open GingerCal, Menu, Settings. In Nextcloud create an app password: Settings, Security,
Devices & sessions. Fill in server, user, app password, then **Save and test connection**.
Menu key: Sync, New event, Calendars, Settings. Tap an event for details, Edit and Delete.
Menu key: View (Month/Agenda), New event, Sync, Today, Calendars, Settings. Tap an event for
details, Edit and Delete.
If installation fails, check the file arrived whole (53 KB; some browsers save a truncated or
renamed `.apk.zip`) and that there are a few MB free on the internal storage. On a PC with
@@ -135,9 +162,11 @@ Tests (desktop JVM, need a CalDAV server such as Radicale on :5232 with user `xo
javac -d out src/org/gingercal/*.java test/org/gingercal/*.java
java -cp out org.gingercal.CoreTest # discovery, sync, recurrence, create/edit/delete
java -cp out org.gingercal.RedirectTest # forced-HTTPS / redirect-loop handling (no server needed)
java -cp out org.gingercal.I18nTest # Galician dates, titles and messages
```
`tools/check_api.py` verifies every framework call in the dex against published Android API
`tools/check_i18n.py` (run by the build) fails if any interface text lacks a Galician
translation or the placeholders differ. `tools/check_api.py` verifies every framework call in the dex against published Android API
declarations.
## Layout
@@ -145,7 +174,8 @@ declarations.
- `src/` CalDAV core, platform-neutral: discovery, PROPFIND/REPORT, iCalendar, sync, pinning
- `android/` activities, sync service, alarms, SQLite cache, Apache HttpClient transport
- `stubs/` compile-only Android API 10 signatures (never packaged)
- `bridge/` nginx legacy-TLS bridge: config, compose file, certificate script
- `bridge/` legacy-TLS endpoint: standalone nginx (config, compose file), `npm/http.conf` for
Nginx Proxy Manager, certificate script
- `res/` app name; the icon is drawn at build time (mdpi + ldpi for the Galaxy Mini)
- `tools/` icon, dex disassembler helper, zipalign, dex/API checkers, d8 workaround