mirror of
https://github.com/narrrl/proton-stream.git
synced 2026-11-04 16:57:00 +01:00
init
This commit is contained in:
commit
a1b345a029
80 files changed
+28033
No files matched your search
@@ -0,0 +1,14 @@
|
||||
{\rtf1\ansi\ansicpg1252\deff0\nouicompat{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}}
|
||||
\viewkind4\uc1\pard\f0\fs20
|
||||
MIT License\par
|
||||
\par
|
||||
Copyright (c) 2026 Nils Pukropp\par
|
||||
\par
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par
|
||||
\par
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par
|
||||
\par
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par
|
||||
\par
|
||||
This text mirrors the license Cargo.toml declares. It is regenerated from the repository's LICENSE file by scripts/build.ps1 when one exists.\par
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 364 KiB |
@@ -0,0 +1,137 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
The Linux-hosted .msi definition, built by scripts/build-windows.sh with
|
||||
msitools' wixl:
|
||||
|
||||
wixl -a x64 -o dist/proton-stream-0.1.0-x64.msi packaging/windows/proton-stream.wixl.wxs \
|
||||
-D Version=0.1.0 -D BinDir=... -D MpvDll=... -D IconFile=...
|
||||
|
||||
Why a second file at all, next to proton-stream.wxs
|
||||
---------------------------------------------------
|
||||
The WiX toolset cannot build an .msi on Linux. Not "is unsupported" — it
|
||||
fails outright, in WixToolset.Core's BundleValidator.GetCanonicalRelativePath,
|
||||
which validates every Directory/@Name by prepending a drive letter and asking
|
||||
.NET to canonicalise it:
|
||||
|
||||
Path.GetFullPath("C:\\" + name) // on Linux: "/cwd/C:\name"
|
||||
if (fullPath.StartsWith("C:\\")) // never true off Windows
|
||||
|
||||
so every <Directory Name="..."> in any .wxs is rejected with WIX0389. That is
|
||||
true of WiX v5 and v6; v7 additionally requires accepting the Open Source
|
||||
Maintenance Fee EULA. There is no workaround in the XML, because the check
|
||||
runs before anything the document can influence.
|
||||
|
||||
wixl (from GNOME's msitools) writes the MSI tables directly and needs no
|
||||
Windows anything, but it speaks the WiX **v3** schema and implements a subset
|
||||
of it — hence this file rather than a preprocessor branch inside the v4 one.
|
||||
|
||||
What this loses against the WiX build
|
||||
-------------------------------------
|
||||
The dialog UI. WixUI_InstallDir, and with it the license page and the
|
||||
"choose a folder" page, is a WiX extension with no wixl equivalent, so this
|
||||
.msi installs with the plain Windows Installer progress UI and always lands in
|
||||
Program Files. Everything that matters after that — per-machine install,
|
||||
major-upgrade replacement, Add/Remove Programs entry with the icon, the PATH
|
||||
entry, clean uninstall — is authored here and identical.
|
||||
|
||||
Keep in sync with proton-stream.wxs
|
||||
-----------------------------------
|
||||
UpgradeCode and every Component Guid are shared with that file, deliberately.
|
||||
They are what lets an .msi built here upgrade one built on Windows (and the
|
||||
reverse) instead of the two stacking up or corrupting each other's component
|
||||
reference counts. Never regenerate them; a new *payload file* gets a new
|
||||
Component with a new Guid, in both files.
|
||||
-->
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||
|
||||
<Product Id="*"
|
||||
Name="Proton Stream"
|
||||
Language="1033"
|
||||
Version="$(var.Version)"
|
||||
Manufacturer="Nils Pukropp"
|
||||
UpgradeCode="0a5c3818-3401-469c-a2ac-a3172cef1938">
|
||||
|
||||
<Package InstallerVersion="500"
|
||||
Compressed="yes"
|
||||
InstallScope="perMachine"
|
||||
Manufacturer="Nils Pukropp"
|
||||
Description="Netflix-style desktop client for Proton Drive public links" />
|
||||
|
||||
<!-- Replace an older install rather than sitting beside it. Scheduled after
|
||||
InstallInitialize so the old product is torn down before the new files
|
||||
land: the reverse order leaves the uninstall of 0.1.0 deleting files
|
||||
0.2.0 just wrote. -->
|
||||
<Upgrade Id="0a5c3818-3401-469c-a2ac-a3172cef1938">
|
||||
<UpgradeVersion Minimum="0.0.0" IncludeMinimum="yes"
|
||||
Maximum="$(var.Version)" IncludeMaximum="yes"
|
||||
Property="OLDERVERSIONBEINGUPGRADED" />
|
||||
<UpgradeVersion Minimum="$(var.Version)" IncludeMinimum="no"
|
||||
OnlyDetect="yes"
|
||||
Property="NEWERVERSIONDETECTED" />
|
||||
</Upgrade>
|
||||
<Condition Message="A newer version of Proton Stream is already installed.">
|
||||
NOT NEWERVERSIONDETECTED
|
||||
</Condition>
|
||||
<InstallExecuteSequence>
|
||||
<RemoveExistingProducts After="InstallInitialize" />
|
||||
</InstallExecuteSequence>
|
||||
|
||||
<Media Id="1" Cabinet="proton_stream.cab" EmbedCab="yes" />
|
||||
|
||||
<Icon Id="proton-stream.ico" SourceFile="$(var.IconFile)" />
|
||||
<Property Id="ARPPRODUCTICON" Value="proton-stream.ico" />
|
||||
<Property Id="ARPURLINFOABOUT" Value="https://github.com/narrrl/proton-stream" />
|
||||
<Property Id="ARPNOREPAIR" Value="1" />
|
||||
|
||||
<Directory Id="TARGETDIR" Name="SourceDir">
|
||||
<Directory Id="ProgramFiles64Folder">
|
||||
<Directory Id="INSTALLDIR" Name="Proton Stream">
|
||||
|
||||
<Component Id="AppExe" Guid="623c8cb8-b826-4d57-a054-e5be56f24c19" Win64="yes">
|
||||
<File Id="AppExe" Source="$(var.BinDir)/proton-stream.exe"
|
||||
Name="proton-stream.exe" KeyPath="yes">
|
||||
<!-- Not advertised: an advertised shortcut needs the feature
|
||||
state machine that the dialog-less install does not drive. -->
|
||||
<Shortcut Id="StartMenuShortcut"
|
||||
Directory="ProgramMenuFolder"
|
||||
Name="Proton Stream"
|
||||
Description="Browse and stream a Proton Drive public link"
|
||||
WorkingDirectory="INSTALLDIR"
|
||||
Icon="proton-stream.ico"
|
||||
Advertise="no" />
|
||||
</File>
|
||||
</Component>
|
||||
|
||||
<!-- The CLI, and the PATH entry that makes it worth installing. Tied
|
||||
to the same component so uninstalling takes the PATH edit with
|
||||
it. -->
|
||||
<Component Id="CliExe" Guid="6440650e-281f-4842-a75a-4cbea8be0d71" Win64="yes">
|
||||
<File Id="CliExe" Source="$(var.BinDir)/pstr.exe" Name="pstr.exe" KeyPath="yes" />
|
||||
<Environment Id="PstrPath" Name="PATH" Value="[INSTALLDIR]"
|
||||
Part="last" Action="set" System="yes" Permanent="no" />
|
||||
</Component>
|
||||
|
||||
<!-- libmpv does the demuxing and decoding. There is no static build
|
||||
of it worth shipping, so the DLL sits beside the exe. -->
|
||||
<Component Id="MpvDll" Guid="ff74fc79-78e3-4ed8-881d-f322ed6ff6b4" Win64="yes">
|
||||
<File Id="MpvDll" Source="$(var.MpvDll)" Name="libmpv-2.dll" KeyPath="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Id="ReadMe" Guid="5bb65b44-f5df-423b-8dcc-a753d7aef565" Win64="yes">
|
||||
<File Id="ReadMe" Source="$(var.ReadMe)" Name="README.md" KeyPath="yes" />
|
||||
</Component>
|
||||
|
||||
</Directory>
|
||||
</Directory>
|
||||
<Directory Id="ProgramMenuFolder" />
|
||||
</Directory>
|
||||
|
||||
<Feature Id="Main" Title="Proton Stream" Level="1">
|
||||
<ComponentRef Id="AppExe" />
|
||||
<ComponentRef Id="CliExe" />
|
||||
<ComponentRef Id="MpvDll" />
|
||||
<ComponentRef Id="ReadMe" />
|
||||
</Feature>
|
||||
|
||||
</Product>
|
||||
</Wix>
|
||||
@@ -0,0 +1,82 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
WiX v4/v5/v6 installer definition. Built by scripts/build.ps1:
|
||||
|
||||
wix build -arch x64 -ext WixToolset.UI.wixext packaging/windows/proton-stream.wxs `
|
||||
-d Version=0.1.0 -d BinDir=... -d MpvDll=... -d IconFile=... -d LicenseRtf=... -d ReadMe=... `
|
||||
-o dist/proton-stream-0.1.0-x64.msi
|
||||
|
||||
UpgradeCode is fixed forever: it is what makes 0.2.0 replace 0.1.0 instead of
|
||||
installing beside it. Never regenerate it.
|
||||
-->
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
|
||||
xmlns:ui="http://wixtoolset.org/schemas/v4/wxs/ui">
|
||||
|
||||
<Package Name="Proton Stream"
|
||||
Manufacturer="Nils Pukropp"
|
||||
Version="$(var.Version)"
|
||||
UpgradeCode="0a5c3818-3401-469c-a2ac-a3172cef1938"
|
||||
Scope="perMachine"
|
||||
Compressed="yes"
|
||||
Language="1033">
|
||||
|
||||
<SummaryInformation Description="Netflix-style desktop client for Proton Drive public links" />
|
||||
|
||||
<MajorUpgrade AllowSameVersionUpgrades="yes"
|
||||
DowngradeErrorMessage="A newer version of Proton Stream is already installed." />
|
||||
<MediaTemplate EmbedCab="yes" />
|
||||
|
||||
<Icon Id="AppIcon" SourceFile="$(var.IconFile)" />
|
||||
<Property Id="ARPPRODUCTICON" Value="AppIcon" />
|
||||
<Property Id="ARPURLINFOABOUT" Value="https://github.com/narrrl/proton-stream" />
|
||||
<Property Id="ARPNOREPAIR" Value="1" />
|
||||
|
||||
<!-- 6432 resolves to Program Files (x64) because the build passes -arch x64. -->
|
||||
<StandardDirectory Id="ProgramFiles6432Folder">
|
||||
<Directory Id="INSTALLFOLDER" Name="Proton Stream" />
|
||||
</StandardDirectory>
|
||||
<StandardDirectory Id="ProgramMenuFolder" />
|
||||
|
||||
<!-- The Guids are written out rather than left to WiX's deterministic
|
||||
generation, and they match packaging/windows/proton-stream.wixl.wxs
|
||||
one for one. That is what lets the Linux-built .msi and this one
|
||||
upgrade each other instead of double-counting components. A new
|
||||
payload file gets a new Component and a new Guid, in both files. -->
|
||||
<ComponentGroup Id="AppComponents" Directory="INSTALLFOLDER">
|
||||
<Component Guid="623c8cb8-b826-4d57-a054-e5be56f24c19">
|
||||
<File Id="AppExe" Source="$(var.BinDir)\proton-stream.exe" KeyPath="yes" />
|
||||
<Shortcut Id="StartMenuShortcut"
|
||||
Directory="ProgramMenuFolder"
|
||||
Name="Proton Stream"
|
||||
Description="Browse and stream a Proton Drive public link"
|
||||
Icon="AppIcon"
|
||||
Advertise="yes" />
|
||||
</Component>
|
||||
|
||||
<!-- The CLI, and the PATH entry that makes it worth installing. Tied to
|
||||
the same component so uninstalling takes the PATH edit with it. -->
|
||||
<Component Guid="6440650e-281f-4842-a75a-4cbea8be0d71">
|
||||
<File Id="CliExe" Source="$(var.BinDir)\pstr.exe" KeyPath="yes" />
|
||||
<Environment Id="PstrPath" Name="PATH" Value="[INSTALLFOLDER]"
|
||||
Part="last" Action="set" System="yes" Permanent="no" />
|
||||
</Component>
|
||||
|
||||
<!-- libmpv does the demuxing and decoding. There is no static build of it
|
||||
worth shipping, so the DLL sits beside the exe. -->
|
||||
<Component Guid="ff74fc79-78e3-4ed8-881d-f322ed6ff6b4">
|
||||
<File Id="MpvDll" Source="$(var.MpvDll)" KeyPath="yes" />
|
||||
</Component>
|
||||
|
||||
<Component Guid="5bb65b44-f5df-423b-8dcc-a753d7aef565">
|
||||
<File Id="ReadMe" Source="$(var.ReadMe)" Name="README.md" KeyPath="yes" />
|
||||
</Component>
|
||||
</ComponentGroup>
|
||||
|
||||
<Feature Id="Main" Title="Proton Stream" Level="1">
|
||||
<ComponentGroupRef Id="AppComponents" />
|
||||
</Feature>
|
||||
|
||||
<WixVariable Id="WixUILicenseRtf" Value="$(var.LicenseRtf)" />
|
||||
<ui:WixUI Id="WixUI_InstallDir" InstallDirectory="INSTALLFOLDER" />
|
||||
</Package>
|
||||
</Wix>
|
||||
Reference in new issue
Block a user