6 Commits
21 changed files with 579 additions and 43 deletions
+34 -1
View File
@@ -1,5 +1,29 @@
# Translation helper
# Targets
.PHONY: all prepare translation orig deb clean
# Package information
VERSION := $(shell dpkg-parsechangelog -S Version | sed 's/-.*//')
PACKAGE := yms
# Default target
all: prepare
# Debian source archive
orig:
git archive \
--format=tar \
--prefix=$(PACKAGE)-$(VERSION)/ \
HEAD \
':(exclude)debian' \
':(exclude)locale/*.pot' \
':(exclude)locale/de/LC_MESSAGES' \
| xz -9 > ../$(PACKAGE)_$(VERSION).orig.tar.xz
# Debian package
deb: orig
dpkg-buildpackage -us -uc
# Translation files
prepare: ymsgui.py yms/*.py yms/ui/*.ui
xgettext -L Python -o locale/program.pot ymsgui.py yms/*.py
xgettext -L Glade -o locale/ui.pot yms/ui/*.ui
@@ -11,3 +35,12 @@ translation: locale/de/LC_MESSAGES/ymsgui.mo
locale/de/LC_MESSAGES/ymsgui.mo: locale/de.po
mkdir -p locale/de/LC_MESSAGES
msgfmt locale/de.po -o locale/de/LC_MESSAGES/ymsgui.mo
# Clean generated files
clean:
rm -f locale/program.pot
rm -f locale/ui.pot
rm -f locale/combined.pot
rm -f locale/de/LC_MESSAGES/ymsgui.mo
+13
View File
@@ -0,0 +1,13 @@
Alias /yms /usr/share/yms/webgui
<Directory /usr/share/yms/webgui>
Options FollowSymLinks
AllowOverride None
Require all granted
<FilesMatch "\.inc$">
Require all denied
</FilesMatch>
DirectoryIndex index.php
</Directory>
+15
View File
@@ -0,0 +1,15 @@
location ^~ /yms/ {
alias /usr/share/yms/webgui/;
index index.php;
}
location ~ ^/yms/.*\.inc$ {
deny all;
}
location ~ ^/yms/(.+\.php)$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/share/yms/webgui/$1;
fastcgi_param SCRIPT_NAME /yms/$1;
fastcgi_pass unix:@PHP_FPM_SOCKET@;
}
+1
View File
@@ -20,6 +20,7 @@ INSERT INTO settings (userid, sno, valint) VALUES
/* setting descriptions */
INSERT INTO settings (userid, sno, valstr) VALUES
(-1, 0, 'database schema version'),
(-1, 1, 'vessel id'),
(-1, 2, 'date format'),
(-1, 3, 'user menu'),
+5
View File
@@ -0,0 +1,5 @@
yms (0.2.1-1) unstable; urgency=medium
* Initial Debian packaging.
-- Thomas Hooge <thomas@hoogi.de> Fri, 28 Aug 2026 11:30:00 +0200
Vendored Executable
+12
View File
@@ -0,0 +1,12 @@
#!/bin/sh
set -e
. /usr/share/debconf/confmodule
db_input high yms/db-name || true
db_input high yms/db-user || true
db_input high yms/db-password || true
db_input high yms/webgui || true
db_go
+27
View File
@@ -0,0 +1,27 @@
Source: yms
Section: misc
Priority: optional
Maintainer: Thomas Hooge <thomas@hoogi.de>
Build-Depends:
debhelper-compat (= 13),
gettext
Standards-Version: 4.7.2
Rules-Requires-Root: no
Package: yms
Architecture: all
Depends:
mariadb-server,
python3,
python3-gi,
gir1.2-gtk-3.0,
gir1.2-rsvg-2.0,
python3-mysqldb,
python3-bcrypt,
php (>= 8.0),
php-mysql,
php-xml,
gettext,
mupdf-tools
Description: Yacht Management Software
Yacht management software with native GTK GUI and web interface.
Vendored
+2
View File
@@ -0,0 +1,2 @@
README
INSTALL
+32
View File
@@ -0,0 +1,32 @@
# Database
db/*.sql usr/share/yms/db/
# Native GUI
ymsgui.py usr/lib/yms/
yms/*.py usr/lib/yms/yms/
# GTK UI
yms/ui/* usr/share/yms/ui/
# Web-GUI
webgui/*.php usr/share/yms/webgui/
webgui/globals.inc usr/share/yms/webgui/
webgui/lib/*.inc usr/share/yms/webgui/lib/
webgui/css/* usr/share/yms/webgui/css/
webgui/js/* usr/share/yms/webgui/js/
webgui/img/* usr/share/yms/webgui/img/
webgui/locale/de_DE/LC_MESSAGES/yms.mo usr/share/yms/webgui/locale/de_DE/LC_MESSAGES/
webgui/sailboat.svg usr/share/yms/webgui/
webgui/config.inc-sample usr/share/yms/
# Shared static data
shapes/* usr/share/yms/shapes/
# Desktop entry
yms.desktop usr/share/applications/
# Idesktop link file
yms.lnk usr/share/yms/
# Webserver
config/apache/yms.conf /etc/apache2/conf-available/
+1
View File
@@ -0,0 +1 @@
yms.1
Vendored Executable
+93
View File
@@ -0,0 +1,93 @@
#!/bin/sh
set -e
. /usr/share/debconf/confmodule
detect_webservers()
{
WEB_SERVERS=""
if dpkg-query -W -f='${Status}' apache2 2>/dev/null |
grep -q 'install ok installed'; then
WEB_SERVERS="$WEB_SERVERS apache2"
fi
if dpkg-query -W -f='${Status}' nginx 2>/dev/null |
grep -q 'install ok installed'; then
WEB_SERVERS="$WEB_SERVERS nginx"
fi
if dpkg-query -W -f='${Status}' lighttpd 2>/dev/null |
grep -q 'install ok installed'; then
WEB_SERVERS="$WEB_SERVERS lighttpd"
fi
WEB_SERVERS="${WEB_SERVERS# }"
}
db_get yms/db-name
DB_NAME="$RET"
db_get yms/db-user
DB_USER="$RET"
db_get yms/db-password
DB_PASSWORD="$RET"
echo "Configuring YMS..."
echo "Checking MariaDB database '${DB_NAME}'..."
if mariadb -N -B -e "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${DB_NAME}'" | grep -Fxq "${DB_NAME}"; then
echo "Database '${DB_NAME}' already exists."
else
echo "Database '${DB_NAME}' does not exist."
echo "Creating database '${DB_NAME}'..."
mariadb -e "CREATE DATABASE \`${DB_NAME}\`"
echo "Database '${DB_NAME}' created."
echo "Initializing database schema..."
mariadb "${DB_NAME}" < /usr/share/yms/db/mariadb.sql
mariadb "${DB_NAME}" < /usr/share/yms/db/minimal.sql
echo "Database schema initialized."
fi
db_get yms/webgui
if [ "$RET" = "true" ]; then
detect_webservers
case "$WEB_SERVERS" in
"")
echo "No supported webserver installed."
;;
apache2)
echo "Apache detected."
a2enconf yms
invoke-rc.d apache2 reload
echo "Web GUI for apache2 enabled."
;;
nginx)
echo "nginx detected."
;;
lighttpd)
echo "lighttpd detected."
;;
*)
echo "Multiple webservers detected: $WEB_SERVERS"
;;
esac
if [ ! -f /etc/yms/config.inc ]; then
# create initial configuration
sed \
-e "s|@DB_USERNAME@|$DB_USER|g" \
-e "s|@DB_PASSWORD@|$DB_PASSWORD|g" \
-e "s|@DB_SCHEMA@|$DB_NAME|g" \
/usr/share/yms/config.inc-sample \
> /etc/yms/config.inc
chmod 0640 /etc/yms/config.inc
chown root:www-data /etc/yms/config.inc
ln -s /etc/yms/config.inc /usr/share/yms/webgui/config.inc
fi
fi
exit 0
Vendored Executable
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/make -f
# Standard Debian build
%:
dh $@
# No build via Makefile
override_dh_auto_build:
# Generate translation and install generated files
override_dh_install:
mkdir -p debian/yms/usr/share/locale/de/LC_MESSAGES
msgfmt locale/de.po -o debian/yms/usr/share/locale/de/LC_MESSAGES/ymsgui.mo
install -D -m 0644 icons/yms.svg debian/yms/usr/share/icons/hicolor/scalable/apps/yms.svg
install -D -m 0644 icons/yms48.png debian/yms/usr/share/icons/hicolor/48x48/apps/yms.png
install -D -m 0644 icons/yms64.png debian/yms/usr/share/icons/hicolor/64x64/apps/yms.png
install -D -m 0755 debian/yms-launcher debian/yms/usr/bin/yms
dh_install
sed -i 's#@PREFIX@#/usr#g' debian/yms/usr/share/applications/yms.desktop
sed -i 's#@PREFIX@#/usr#g' debian/yms/usr/share/yms/yms.lnk
# Installation is handled by debian/install
override_dh_auto_install:
override_dh_installdebconf:
dh_installdebconf
+1
View File
@@ -0,0 +1 @@
3.0 (quilt)
+25
View File
@@ -0,0 +1,25 @@
Template: yms/db-name
Type: string
Default: yms
Description: Database name:
Please enter the name of the MariaDB database used by YMS.
Template: yms/db-user
Type: string
Default: ymsweb
Description: Web GUI database user:
Please enter the MariaDB user used by the YMS web interface.
Template: yms/db-password
Type: password
Description: Web GUI database password:
Please enter the password for the YMS web interface database user.
Template: yms/webgui
Type: boolean
Default: false
Description: Enable the YMS web interface?
The YMS package includes a web interface that can be served
by a web server.
.
Do you want to enable the web interface?
Vendored Executable
+2
View File
@@ -0,0 +1,2 @@
#!/bin/sh
exec /usr/bin/python3 /usr/lib/yms/ymsgui.py "$@"
+7 -4
View File
@@ -66,9 +66,10 @@ install -m 0644 \
cp -a \
"${SOURCEDIR}/shapes/." \
"${SHAREDIR}/shapes/"
install -m 0644 \
sed "s#@PREFIX@#${PREFIX}#g" \
"${SOURCEDIR}/yms.lnk" \
"${SHAREDIR}/yms.lnk"
> "${SHAREDIR}/yms.lnk"
chmod 0644 "${SHAREDIR}/yms.lnk"
# Documentation
echo "Installing documentation..."
@@ -117,9 +118,11 @@ chmod 0755 "${BINDIR}/yms"
echo "Installing desktop entry..."
install -d "${DESKTOPDIR}"
install -m 0644 \
sed "s#@PREFIX@#${PREFIX}#g" \
"${SOURCEDIR}/yms.desktop" \
"${DESKTOPDIR}/yms.desktop"
> "${DESKTOPDIR}/yms.desktop"
chmod 0644 "${DESKTOPDIR}/yms.desktop"
# TODO webgui? or separately?
+275 -30
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: YMS 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-07 11:50+0200\n"
"POT-Creation-Date: 2026-08-28 14:39+0200\n"
"PO-Revision-Date: 2025-05-15 09:05+0200\n"
"Last-Translator: Thomas Hooge <thomas@hoogi.de>\n"
"Language-Team: de <thomas@hoogi.de>\n"
@@ -16,80 +16,325 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ymsgui.py:150
msgid "Configuration file not found"
msgstr "Konfigurationsdatei nicht gefunden"
#: ymsgui.py:148
msgid ""
"Delete user!\n"
"Are you sure?"
msgstr ""
#: ymsgui.py:172
msgid "Database connection cannot be established"
#: ymsgui.py:254
msgid ""
"Configuration file '{}' not found.\n"
"Default configuration has been created.\n"
"Please edit that file according to your needs.\n"
"\n"
"Then restart this program."
msgstr ""
#: ymsgui.py:277
#, fuzzy
msgid ""
"Database connection cannot be established.\n"
"\n"
"Server: {}\n"
"Database: {}\n"
"Error: {} ({})"
msgstr "Datenbankverbindung kann nicht hergestellt werden"
#: yms/ui/main.ui:7
msgid "YMS"
msgstr ""
#: yms/ui/main.ui:28
#: yms/ui/main.ui:31
msgid "empty"
msgstr "leer"
#: yms/ui/main.ui:56
#: yms/ui/main.ui:61 yms/ui/main.ui:1081 yms/ui/main.ui:2195
msgid "Name"
msgstr ""
#: yms/ui/main.ui:77
#: yms/ui/main.ui:82 yms/ui/main.ui:1134
msgid "Model"
msgstr "Modell"
#: yms/ui/main.ui:119
#: yms/ui/main.ui:113
msgid "Add"
msgstr ""
#: yms/ui/main.ui:126 yms/ui/main.ui:452 yms/ui/main.ui:1322
msgid "Save"
msgstr ""
#: yms/ui/main.ui:150
msgid "Vessel"
msgstr "Boot"
#: yms/ui/main.ui:148
msgid "Lists"
msgstr "Listen"
#: yms/ui/main.ui:186
msgid "Ok"
#: yms/ui/main.ui:194 yms/ui/main.ui:874 yms/ui/main.ui:1544
#: yms/ui/main.ui:1859 yms/ui/main.ui:2068 yms/ui/main.ui:2298
#: yms/ui/main.ui:2528
msgid "New"
msgstr ""
#: yms/ui/main.ui:207
#: yms/ui/main.ui:208 yms/ui/main.ui:1013 yms/ui/main.ui:1885
#: yms/ui/main.ui:2094 yms/ui/main.ui:2324 yms/ui/main.ui:2554
msgid "Delete"
msgstr ""
#: yms/ui/main.ui:247
msgid "Login"
msgstr ""
#: yms/ui/main.ui:258
msgid "Displayname"
msgstr ""
#: yms/ui/main.ui:289
msgid "Role"
msgstr ""
#: yms/ui/main.ui:300
msgid "Language"
msgstr ""
#: yms/ui/main.ui:331
msgid "Password"
msgstr ""
#: yms/ui/main.ui:350
msgid "Create"
msgstr ""
#: yms/ui/main.ui:363
msgid "Locked"
msgstr ""
#: yms/ui/main.ui:376
msgid "Deleted"
msgstr ""
#: yms/ui/main.ui:486
msgid "User"
msgstr "Benutzer"
#: yms/ui/main.ui:220
#: yms/ui/main.ui:526 yms/ui/main.ui:901 yms/ui/main.ui:1570
msgid "Details"
msgstr ""
#: yms/ui/main.ui:539 yms/ui/main.ui:887 yms/ui/main.ui:1027
#: yms/ui/main.ui:1557 yms/ui/main.ui:1872 yms/ui/main.ui:2081
#: yms/ui/main.ui:2311 yms/ui/main.ui:2541
msgid "Edit"
msgstr ""
#: yms/ui/main.ui:566
msgid "Lists"
msgstr "Listen"
#: yms/ui/main.ui:595 yms/ui/main.ui:923 yms/ui/main.ui:1591
#: yms/ui/main.ui:1906 yms/ui/main.ui:2115 yms/ui/main.ui:2345
#: yms/ui/main.ui:2575
msgid "page0"
msgstr ""
#: yms/ui/main.ui:607
msgid "Companies"
msgstr ""
#: yms/ui/main.ui:620
msgid "Base data"
msgstr "Basisdaten"
#: yms/ui/main.ui:230
msgid ""
"Equipment\n"
"Here be dragons"
#: yms/ui/main.ui:653 yms/ui/main.ui:1405 yms/ui/main.ui:1784
#: yms/ui/main.ui:1951 yms/ui/main.ui:2160 yms/ui/main.ui:2390
msgid "Clear"
msgstr ""
#: yms/ui/main.ui:241
msgid "Equipment"
#: yms/ui/main.ui:666 yms/ui/main.ui:1418 yms/ui/main.ui:1797
#: yms/ui/main.ui:1964 yms/ui/main.ui:2173 yms/ui/main.ui:2403
msgid "Apply"
msgstr ""
#: yms/ui/main.ui:688 yms/ui/main.ui:1260
msgid "Category"
msgstr ""
#: yms/ui/main.ui:699 yms/ui/main.ui:1123
msgid "Manufacturer"
msgstr ""
#: yms/ui/main.ui:710 yms/ui/main.ui:1249
msgid "Supplier"
msgstr ""
#: yms/ui/main.ui:721 yms/ui/main.ui:1462 yms/ui/main.ui:1756
#: yms/ui/main.ui:1997 yms/ui/main.ui:2447
msgid "Text"
msgstr ""
#: yms/ui/main.ui:732
msgid "Flags"
msgstr ""
#: yms/ui/main.ui:781
msgid "ordered"
msgstr ""
#: yms/ui/main.ui:794
msgid "removed"
msgstr ""
#: yms/ui/main.ui:807
msgid "deleted"
msgstr ""
#: yms/ui/main.ui:836
#, fuzzy
msgid "Filter Equipment"
msgstr "Ausrüstung"
#: yms/ui/main.ui:252
#: yms/ui/main.ui:935
#, fuzzy
msgid "Equipment details"
msgstr "Ausrüstung"
#: yms/ui/main.ui:952 yms/ui/main.ui:963 yms/ui/main.ui:974
msgid "label"
msgstr ""
#: yms/ui/main.ui:262
#: yms/ui/main.ui:1041
msgid "Close"
msgstr ""
#: yms/ui/main.ui:1063 yms/ui/main.ui:1689
msgid "page2"
msgstr ""
#: yms/ui/main.ui:1092
msgid "Short name"
msgstr ""
#: yms/ui/main.ui:1145
msgid "Serial no."
msgstr ""
#: yms/ui/main.ui:1156
msgid "Weight, kg"
msgstr ""
#: yms/ui/main.ui:1167
msgid "Price, €"
msgstr ""
#: yms/ui/main.ui:1178
msgid "Date puchase"
msgstr ""
#: yms/ui/main.ui:1271 yms/ui/main.ui:2217
msgid "Remarks"
msgstr ""
#: yms/ui/main.ui:1336
msgid "Cancel"
msgstr ""
#: yms/ui/main.ui:1359 yms/ui/main.ui:1668
msgid "page1"
msgstr ""
#: yms/ui/main.ui:1372 yms/ui/main.ui:1986
msgid "Equipment"
msgstr "Ausrüstung"
#: yms/ui/main.ui:1440
msgid "Storage"
msgstr ""
#: yms/ui/main.ui:1451
msgid "Condition"
msgstr ""
#: yms/ui/main.ui:1505
#, fuzzy
msgid "Filter Inventory"
msgstr "Inventar"
#: yms/ui/main.ui:1603
#, fuzzy
msgid "Inventory details"
msgstr "Inventar"
#: yms/ui/main.ui:1621 yms/ui/main.ui:1634 yms/ui/main.ui:1647
msgid "button"
msgstr ""
#: yms/ui/main.ui:1702
msgid "Inventory"
msgstr "Inventar"
#: yms/ui/main.ui:292
#: yms/ui/main.ui:1733
msgid "Kategorie"
msgstr ""
#: yms/ui/main.ui:1821
msgid "Filter Providions (here selection description)"
msgstr ""
#: yms/ui/main.ui:1918
msgid "Provisions"
msgstr "Verpflegung"
#: yms/ui/main.ui:322
#: yms/ui/main.ui:2030
#, fuzzy
msgid "Filter Maintenance"
msgstr "Wartung"
#: yms/ui/main.ui:2127
msgid "Maintenance"
msgstr "Wartung"
#: yms/ui/main.ui:352
#: yms/ui/main.ui:2206 yms/ui/main.ui:2603 yms/ui/main.ui:2664
msgid "Status"
msgstr ""
#: yms/ui/main.ui:2260
#, fuzzy
msgid "Filter Projects"
msgstr "Projekte"
#: yms/ui/main.ui:2357
msgid "Projects"
msgstr "Projekte"
#: yms/ui/main.ui:382
#: yms/ui/main.ui:2425
msgid "Type"
msgstr ""
#: yms/ui/main.ui:2436
msgid "Reference"
msgstr ""
#: yms/ui/main.ui:2490
#, fuzzy
msgid "Filter Documents"
msgstr "Dokumente"
#: yms/ui/main.ui:2587
msgid "Documents"
msgstr "Dokumente"
#: yms/ui/main.ui:2618
msgid ""
"This is an early release of YMS native GUI.\n"
"Please use the web frontend wich is already \n"
"in an usable state.\n"
"\n"
"For further assistance please consult the related\n"
"thread in \"Segeln Forum\"\n"
msgstr ""
#: yms/ui/main.ui:2647
msgid "YMS-GUI version 0.2.1"
msgstr ""
#~ msgid "Configuration file not found"
#~ msgstr "Konfigurationsdatei nicht gefunden"
+3 -3
View File
@@ -17,9 +17,9 @@ define('APP_ILLUSTRATION', 'sailboat.svg');
// database connection
$g_db_host = 'localhost';
$g_db_username = 'ymsweb';
$g_db_password = 'changeme!';
$g_db_schema = 'yms';
$g_db_username = '@DB_USERNAME@';
$g_db_password = '@DB_PASSWORD@';
$g_db_schema = '@DB_SCHEMA@';
// mail settings
$g_mail_enable = FALSE;
+1 -1
View File
@@ -5,7 +5,7 @@ GenericName=Yacht Management
GenericName[de]=Yacht-Verwaltungssoftware
Comment=Yacht Management Software
Comment[de]=Verwaltung von Yachten, Dokumenten und technischen Daten
Exec=/usr/local/bin/yms
Exec=@PREFIX@/bin/yms
Icon=yms
StartupNotify=true
Terminal=false
+2 -2
View File
@@ -1,7 +1,7 @@
table Icon
Caption: Yacht Management
Command: /usr/local/bin/yms
Icon: /usr/local/share/icons/hicolor/48x48/apps/yms.png
Command: @PREFIX@/bin/yms
Icon: @PREFIX@/share/icons/hicolor/48x48/apps/yms.png
Width: 48
Height: 48
X: 168
+2 -2
View File
@@ -275,8 +275,8 @@ if __name__ == "__main__":
errno, errtxt = db.last_error()
gtkutils.messagebox(
_("Database connection cannot be established.\n\n"
"Server: %s\nDatabase: %s\n"
"Error: %s (%d)") % (cfg['host'], cfg['db'], errtxt, errno),
"Server: {}\nDatabase: {}\n"
"Error: {} ({})").format(cfg['host'], cfg['db'], errtxt, errno),
title="YMS")
# Another fine product of the sirius cybernetics corporation