From 07b59d64680a9a7cf98b8cb3ab9584ea61ca49d4 Mon Sep 17 00:00:00 2001 From: Caelan Sayler Date: Fri, 29 Mar 2024 11:17:34 +0000 Subject: [PATCH] Add linux freedesktop category argument --- src/Velopack.Build/PackTask.cs | 2 ++ src/Velopack.Build/Velopack.Build.targets | 1 + .../Commands/LinuxPackCommandRunner.cs | 5 ++++- src/Velopack.Packaging.Unix/Commands/LinuxPackOptions.cs | 2 ++ src/Velopack.Vpk/Commands/LinuxPackCommand.cs | 7 +++++++ 5 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Velopack.Build/PackTask.cs b/src/Velopack.Build/PackTask.cs index 37f593eb..a7ab19a8 100644 --- a/src/Velopack.Build/PackTask.cs +++ b/src/Velopack.Build/PackTask.cs @@ -88,6 +88,8 @@ public class PackTask : MSBuildAsyncTask public string? SignTemplate { get; set; } + public string? Categories { get; set; } + protected override async Task ExecuteAsync() { //System.Diagnostics.Debugger.Launch(); diff --git a/src/Velopack.Build/Velopack.Build.targets b/src/Velopack.Build/Velopack.Build.targets index ee8b2aaf..2452b2f3 100644 --- a/src/Velopack.Build/Velopack.Build.targets +++ b/src/Velopack.Build/Velopack.Build.targets @@ -94,6 +94,7 @@ SignSkipDll="$(VelopackSignSkipDll)" SignParallel="$(VelopackSignParallel)" SignTemplate="$(VelopackSignTemplate)" + Categories="$(VelopackCategories)" /> diff --git a/src/Velopack.Packaging.Unix/Commands/LinuxPackCommandRunner.cs b/src/Velopack.Packaging.Unix/Commands/LinuxPackCommandRunner.cs index cac72d52..9cd32473 100644 --- a/src/Velopack.Packaging.Unix/Commands/LinuxPackCommandRunner.cs +++ b/src/Velopack.Packaging.Unix/Commands/LinuxPackCommandRunner.cs @@ -32,6 +32,9 @@ public class LinuxPackCommandRunner : PackageBuilder var iconFilename = Options.PackId + Path.GetExtension(icon); File.Copy(icon, Path.Combine(dir.FullName, iconFilename), true); + var categories = String.IsNullOrWhiteSpace(Options.Categories) ? "" : + $"Categories={Options.Categories.TrimEnd(';')};"; + File.WriteAllText(appRunPath, $$""" #!/bin/sh @@ -66,7 +69,7 @@ Comment={Options.PackTitle ?? Options.PackId} {Options.PackVersion} Icon={Options.PackId} Exec={mainExeName} StartupWMClass={Options.PackId} -Categories=Development; +{categories} """); // copy existing app files diff --git a/src/Velopack.Packaging.Unix/Commands/LinuxPackOptions.cs b/src/Velopack.Packaging.Unix/Commands/LinuxPackOptions.cs index 29b02097..36e7493b 100644 --- a/src/Velopack.Packaging.Unix/Commands/LinuxPackOptions.cs +++ b/src/Velopack.Packaging.Unix/Commands/LinuxPackOptions.cs @@ -35,4 +35,6 @@ public class LinuxPackOptions : IPackOptions public bool NoPortable { get; set; } public bool NoInst { get; set; } + + public string Categories { get; set; } } diff --git a/src/Velopack.Vpk/Commands/LinuxPackCommand.cs b/src/Velopack.Vpk/Commands/LinuxPackCommand.cs index 84dbbcaf..a91d70aa 100644 --- a/src/Velopack.Vpk/Commands/LinuxPackCommand.cs +++ b/src/Velopack.Vpk/Commands/LinuxPackCommand.cs @@ -4,12 +4,18 @@ public class LinuxPackCommand : PackCommand { public bool PackIsAppDir { get; private set; } + public string Categories { get; private set; } + public LinuxPackCommand() : base("pack", "Create's a Linux .AppImage bundle from a folder containing application files.") { this.RemoveOption(NoPortableOption); this.RemoveOption(NoInstOption); + var categories = AddOption((v) => Categories = v, "--categories") + .SetDescription("Categories from the freedesktop.org Desktop Menu spec") + .SetArgumentHelpName("NAMES"); + var appDir = AddOption((v) => { var t = v.ToFullNameOrNull(); if (t != null) { @@ -24,5 +30,6 @@ public class LinuxPackCommand : PackCommand this.AtLeastOneRequired(PackDirectoryOption, appDir); this.AreMutuallyExclusive(PackDirectoryOption, appDir); this.AreMutuallyExclusive(IconOption, appDir); + this.AreMutuallyExclusive(categories, appDir); } }