#!/bin/sh
# Lanceur de Plume pour Linux : copie l'éditeur dans un dossier de données et l'ouvre dans une fenêtre d'application
# (Chrome, Chromium, Edge, Brave ou Vivaldi, sans barre d'adresse). Sans ces navigateurs, Plume s'ouvre dans Firefox
# ou le navigateur par défaut. Au premier lancement, Plume s'ajoute au menu des applications.
# Les mises à jour sont installées par le bouton « Mise à jour » de Plume lui-même (elles restent dans le profil du navigateur).

here=$(dirname "$(readlink -f "$0")")
# Langue du système, transmise à Plume pour son premier lancement
langue=${LANGUAGE:-${LC_ALL:-${LC_MESSAGES:-$LANG}}}
langue=${langue%%[_.:@]*}
case "$langue" in [a-z][a-z]) ;; *) langue= ;; esac
share="${XDG_DATA_HOME:-$HOME/.local/share}"

# Entrée dans le menu des applications (refaite si le dossier de Plume a été déplacé)
desktop="$share/applications/plume.desktop"
if ! grep -qF "Exec=\"$here/plume\"" "$desktop" 2>/dev/null || ! grep -q "^Comment\[de\]" "$desktop"; then
  mkdir -p "$share/applications" "$share/icons/hicolor/256x256/apps"
  cp -f "$here/plume.png" "$share/icons/hicolor/256x256/apps/plume.png"
  cat > "$desktop" <<EOF
[Desktop Entry]
Type=Application
Name=Plume
GenericName=Traitement de texte
Comment=Écrire et mettre en page des documents
GenericName[en]=Word processor
GenericName[es]=Procesador de textos
GenericName[de]=Textverarbeitung
GenericName[pt]=Processador de texto
Comment[en]=Write and lay out documents
Comment[es]=Escribir y maquetar documentos
Comment[de]=Dokumente schreiben und gestalten
Comment[pt]=Escrever e formatar documentos
Exec="$here/plume"
Icon=plume
Terminal=false
Categories=Office;WordProcessor;
StartupWMClass=plume
EOF
  command -v update-desktop-database >/dev/null && update-desktop-database "$share/applications" 2>/dev/null
fi

# Chrome, Edge, Brave… : fenêtre d'application. Les versions « snap » ne lisent que leur propre dossier dans ~/snap.
start_app() { # $1 = navigateur, $2 = dossier de données
  mkdir -p "$2" && cp -f "$here/Plume.html" "$2/Plume.html" || return 1
  exec "$1" --app="file://$(echo "$2" | sed 's/ /%20/g')/Plume.html${langue:+?langue=$langue}" --user-data-dir="$2/profil" --class=plume \
    --window-size=1300,880 --no-first-run --no-default-browser-check
}
is_snap() { # lien vers /snap, ou petit script qui lance /snap/bin/… (cas de chromium-browser et firefox sur Ubuntu)
  case "$(readlink -f "$1")" in /snap/*|/usr/bin/snap) return 0 ;; esac
  [ "$(head -c 2 "$1" 2>/dev/null)" = "#!" ] && grep -q '/snap/bin/' "$1"
}
for b in google-chrome google-chrome-stable microsoft-edge microsoft-edge-stable brave-browser brave vivaldi-stable vivaldi chromium chromium-browser; do
  p=$(command -v "$b") || continue
  if is_snap "$p"; then start_app "$p" "$HOME/snap/${b%-browser}/common/plume"
  else start_app "$p" "$share/plume"; fi
done

# Sinon : Firefox (dans une nouvelle fenêtre) ou le navigateur par défaut
if p=$(command -v firefox); then
  dir="$share/plume"; is_snap "$p" && dir="$HOME/snap/firefox/common/plume"
  mkdir -p "$dir" && cp -f "$here/Plume.html" "$dir/Plume.html" && exec "$p" --new-window "file://$(echo "$dir" | sed 's/ /%20/g')/Plume.html${langue:+?langue=$langue}"
fi
mkdir -p "$share/plume" && cp -f "$here/Plume.html" "$share/plume/Plume.html" && exec xdg-open "$share/plume/Plume.html"
