Update Program.cs
This commit is contained in:
@@ -341,6 +341,8 @@ do_install() {{
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Create .desktop file
|
# Create .desktop file
|
||||||
|
# WM_CLASS is app name without spaces or underscores
|
||||||
|
WM_CLASS=$(echo ""$APPIMAGE_NAME"" | tr -d ' _')
|
||||||
cat > ""$APPS_DIR/${{SANITIZED}}.desktop"" << DESKTOP
|
cat > ""$APPS_DIR/${{SANITIZED}}.desktop"" << DESKTOP
|
||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Type=Application
|
Type=Application
|
||||||
@@ -350,6 +352,7 @@ Exec=$BIN_DIR/$APPIMAGE_BASENAME
|
|||||||
Icon=$SANITIZED
|
Icon=$SANITIZED
|
||||||
Categories=$APPIMAGE_CATEGORY;
|
Categories=$APPIMAGE_CATEGORY;
|
||||||
Terminal=false
|
Terminal=false
|
||||||
|
StartupWMClass=$WM_CLASS
|
||||||
X-AppImage-Version=$APPIMAGE_VERSION
|
X-AppImage-Version=$APPIMAGE_VERSION
|
||||||
DESKTOP
|
DESKTOP
|
||||||
|
|
||||||
@@ -363,22 +366,26 @@ DESKTOP
|
|||||||
return 0
|
return 0
|
||||||
}}
|
}}
|
||||||
|
|
||||||
# Check for first run - show zenity dialog
|
# Check for first run or if already installed - show zenity dialog
|
||||||
|
# Skip dialog entirely if running from installed location (~/.local/bin)
|
||||||
if [ -n ""$APPIMAGE"" ]; then
|
if [ -n ""$APPIMAGE"" ]; then
|
||||||
APPIMAGE_BASENAME=$(basename ""$APPIMAGE"")
|
APPIMAGE_BASENAME=$(basename ""$APPIMAGE"")
|
||||||
if [ ! -f ""$INSTALLED_MARKER/$APPIMAGE_BASENAME"" ] || [ ""$SHOW_INSTALLER"" = ""1"" ]; then
|
APPIMAGE_DIR=$(dirname ""$APPIMAGE"")
|
||||||
|
SANITIZED=$(echo ""$APPIMAGE_NAME"" | tr ' ' '_')
|
||||||
|
|
||||||
|
# If running from installed location, just run the app (no dialog)
|
||||||
|
if [ ""$APPIMAGE_DIR"" = ""$BIN_DIR"" ]; then
|
||||||
|
: # Skip to running the app
|
||||||
|
elif [ ""$SHOW_INSTALLER"" = ""1"" ]; then
|
||||||
|
# Forced install dialog
|
||||||
if command -v zenity &> /dev/null; then
|
if command -v zenity &> /dev/null; then
|
||||||
# Find app icon
|
|
||||||
SANITIZED=$(echo ""$APPIMAGE_NAME"" | tr ' ' '_')
|
|
||||||
ICON_PATH=""""
|
ICON_PATH=""""
|
||||||
for ext in svg png ico; do
|
for ext in svg png ico; do
|
||||||
[ -f ""$HERE/${{SANITIZED}}.${{ext}}"" ] && ICON_PATH=""$HERE/${{SANITIZED}}.${{ext}}"" && break
|
[ -f ""$HERE/${{SANITIZED}}.${{ext}}"" ] && ICON_PATH=""$HERE/${{SANITIZED}}.${{ext}}"" && break
|
||||||
done
|
done
|
||||||
|
|
||||||
ICON_OPT=""""
|
ICON_OPT=""""
|
||||||
[ -n ""$ICON_PATH"" ] && ICON_OPT=""--window-icon=$ICON_PATH""
|
[ -n ""$ICON_PATH"" ] && ICON_OPT=""--window-icon=$ICON_PATH""
|
||||||
|
|
||||||
# Run zenity and capture exit code properly
|
|
||||||
zenity --question --title=""$APPIMAGE_NAME"" \
|
zenity --question --title=""$APPIMAGE_NAME"" \
|
||||||
--text=""<b>$APPIMAGE_NAME</b>\nVersion $APPIMAGE_VERSION\n\n$APPIMAGE_COMMENT\n\nWould you like to install this application?"" \
|
--text=""<b>$APPIMAGE_NAME</b>\nVersion $APPIMAGE_VERSION\n\n$APPIMAGE_COMMENT\n\nWould you like to install this application?"" \
|
||||||
--ok-label=""Install"" --cancel-label=""Run Only"" \
|
--ok-label=""Install"" --cancel-label=""Run Only"" \
|
||||||
@@ -386,18 +393,85 @@ if [ -n ""$APPIMAGE"" ]; then
|
|||||||
ZENITY_EXIT=$?
|
ZENITY_EXIT=$?
|
||||||
|
|
||||||
if [ $ZENITY_EXIT -eq 0 ]; then
|
if [ $ZENITY_EXIT -eq 0 ]; then
|
||||||
# Install clicked
|
|
||||||
do_install
|
do_install
|
||||||
if [ $? -eq 0 ]; then
|
zenity --info --title=""Installation Complete"" \
|
||||||
zenity --info --title=""Installation Complete"" \
|
--text=""$APPIMAGE_NAME has been installed.\n\nYou can find it in your application menu."" \
|
||||||
--text=""$APPIMAGE_NAME has been installed.\n\nYou can find it in your application menu."" \
|
--width=300 $ICON_OPT 2>/dev/null
|
||||||
|
elif [ $ZENITY_EXIT -ne 1 ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
elif [ -f ""$APPS_DIR/${{SANITIZED}}.desktop"" ]; then
|
||||||
|
# Already installed and running from different location - show options
|
||||||
|
if command -v zenity &> /dev/null; then
|
||||||
|
ICON_PATH=""""
|
||||||
|
for ext in svg png ico; do
|
||||||
|
[ -f ""$HERE/${{SANITIZED}}.${{ext}}"" ] && ICON_PATH=""$HERE/${{SANITIZED}}.${{ext}}"" && break
|
||||||
|
done
|
||||||
|
ICON_OPT=""""
|
||||||
|
[ -n ""$ICON_PATH"" ] && ICON_OPT=""--window-icon=$ICON_PATH""
|
||||||
|
|
||||||
|
CHOICE=$(zenity --list --title=""$APPIMAGE_NAME"" \
|
||||||
|
--text=""<b>$APPIMAGE_NAME</b> is already installed.\n\nWhat would you like to do?"" \
|
||||||
|
--radiolist --column="" "" --column=""Action"" \
|
||||||
|
TRUE ""Run the application"" \
|
||||||
|
FALSE ""Reinstall (update)"" \
|
||||||
|
FALSE ""Uninstall"" \
|
||||||
|
--width=400 --height=280 $ICON_OPT 2>/dev/null)
|
||||||
|
ZENITY_EXIT=$?
|
||||||
|
|
||||||
|
if [ $ZENITY_EXIT -ne 0 ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
case ""$CHOICE"" in
|
||||||
|
""Run the application"")
|
||||||
|
:
|
||||||
|
;;
|
||||||
|
""Reinstall (update)"")
|
||||||
|
do_install
|
||||||
|
zenity --info --title=""Update Complete"" \
|
||||||
|
--text=""$APPIMAGE_NAME has been updated."" \
|
||||||
--width=300 $ICON_OPT 2>/dev/null
|
--width=300 $ICON_OPT 2>/dev/null
|
||||||
fi
|
;;
|
||||||
elif [ $ZENITY_EXIT -eq 1 ]; then
|
""Uninstall"")
|
||||||
# Run Only clicked - continue to run the app
|
rm -f ""$BIN_DIR/$APPIMAGE_BASENAME""
|
||||||
:
|
rm -f ""$APPS_DIR/${{SANITIZED}}.desktop""
|
||||||
else
|
rm -f ""$ICONS_DIR_SCALABLE/${{SANITIZED}}.svg""
|
||||||
# Dialog closed or error
|
rm -f ""$ICONS_DIR_256/${{SANITIZED}}.png""
|
||||||
|
rm -f ""$ICONS_DIR_256/${{SANITIZED}}.ico""
|
||||||
|
rm -f ""$INSTALLED_MARKER/$APPIMAGE_BASENAME""
|
||||||
|
command -v update-desktop-database &> /dev/null && update-desktop-database ""$APPS_DIR"" 2>/dev/null
|
||||||
|
command -v gtk-update-icon-cache &> /dev/null && gtk-update-icon-cache -f -t ""$HOME/.local/share/icons/hicolor"" 2>/dev/null
|
||||||
|
zenity --info --title=""Uninstall Complete"" \
|
||||||
|
--text=""$APPIMAGE_NAME has been removed."" \
|
||||||
|
--width=300 $ICON_OPT 2>/dev/null
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Not installed - show install dialog
|
||||||
|
if command -v zenity &> /dev/null; then
|
||||||
|
ICON_PATH=""""
|
||||||
|
for ext in svg png ico; do
|
||||||
|
[ -f ""$HERE/${{SANITIZED}}.${{ext}}"" ] && ICON_PATH=""$HERE/${{SANITIZED}}.${{ext}}"" && break
|
||||||
|
done
|
||||||
|
ICON_OPT=""""
|
||||||
|
[ -n ""$ICON_PATH"" ] && ICON_OPT=""--window-icon=$ICON_PATH""
|
||||||
|
|
||||||
|
zenity --question --title=""$APPIMAGE_NAME"" \
|
||||||
|
--text=""<b>$APPIMAGE_NAME</b>\nVersion $APPIMAGE_VERSION\n\n$APPIMAGE_COMMENT\n\nWould you like to install this application?"" \
|
||||||
|
--ok-label=""Install"" --cancel-label=""Run Only"" \
|
||||||
|
--width=350 $ICON_OPT 2>/dev/null
|
||||||
|
ZENITY_EXIT=$?
|
||||||
|
|
||||||
|
if [ $ZENITY_EXIT -eq 0 ]; then
|
||||||
|
do_install
|
||||||
|
zenity --info --title=""Installation Complete"" \
|
||||||
|
--text=""$APPIMAGE_NAME has been installed.\n\nYou can find it in your application menu."" \
|
||||||
|
--width=300 $ICON_OPT 2>/dev/null
|
||||||
|
elif [ $ZENITY_EXIT -ne 1 ]; then
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -426,6 +500,8 @@ fi
|
|||||||
|
|
||||||
private async Task CreateDesktopFile(string path, PackageOptions options)
|
private async Task CreateDesktopFile(string path, PackageOptions options)
|
||||||
{
|
{
|
||||||
|
// WM_CLASS is app name without spaces or underscores (matches X11Window.cs)
|
||||||
|
var wmClass = options.AppName.Replace(" ", "").Replace("_", "");
|
||||||
var desktop = $@"[Desktop Entry]
|
var desktop = $@"[Desktop Entry]
|
||||||
Type=Application
|
Type=Application
|
||||||
Name={options.AppName}
|
Name={options.AppName}
|
||||||
@@ -434,6 +510,7 @@ Exec={SanitizeFileName(options.AppName)}
|
|||||||
Icon={SanitizeFileName(options.AppName)}
|
Icon={SanitizeFileName(options.AppName)}
|
||||||
Categories={options.Category};
|
Categories={options.Category};
|
||||||
Terminal=false
|
Terminal=false
|
||||||
|
StartupWMClass={wmClass}
|
||||||
X-AppImage-Version={options.Version}
|
X-AppImage-Version={options.Version}
|
||||||
";
|
";
|
||||||
await File.WriteAllTextAsync(path, desktop);
|
await File.WriteAllTextAsync(path, desktop);
|
||||||
|
|||||||
Reference in New Issue
Block a user