diff --git a/.github/workflows/build-test-installer-release.yml b/.github/workflows/build-test-installer-release.yml index 74769182..9a9790ad 100644 --- a/.github/workflows/build-test-installer-release.yml +++ b/.github/workflows/build-test-installer-release.yml @@ -79,8 +79,6 @@ jobs: - name: Setup MSBuild uses: microsoft/setup-msbuild@v2 - with: - vs-version: '[17.0,18.0)' - name: Build run: msbuild build\SayMore.proj /t:Build /p:Configuration=$env:Configuration /p:Version=$env:Version /m @@ -96,14 +94,10 @@ jobs: if-no-files-found: warn path: output/x64/${{ env.Configuration }}/net48/TestResults.xml - - name: Copy CHM file into DistFiles - run: copy "docs\SayMore.chm" "DistFiles\SayMore.chm" - - name: Create HTML release notes run: msbuild build\SayMore.proj /t:ConvertReleaseNotesToHtml /p:Version=$env:Version /m - name: Build installer - if: ${{ github.event_name != 'pull_request' }} run: msbuild build\SayMore.proj /t:Installer /p:Configuration=$env:Configuration /p:Version=$env:Version /m - name: Sign installer @@ -115,7 +109,6 @@ jobs: files-folder-filter: SayMoreInstaller*.msi - name: Upload installer artifacts - if: ${{ github.event_name != 'pull_request' }} uses: actions/upload-artifact@v4 with: name: saymore-installer diff --git a/.gitignore b/.gitignore index d88d8e35..48b8bb03 100644 --- a/.gitignore +++ b/.gitignore @@ -31,8 +31,6 @@ UpgradeLog.XML RAMP, REAP, METS/cat_mets.ppt UpgradeLog2.XML Interface Design Strategies for Computer-Assisted Speech Transcription.pdf -DistFiles/SayMore.chm -SayMore.chm HG Setup.eml *.orig @@ -48,7 +46,6 @@ SayMore Lightning Talk (Conf. 2011).docx SayMore Presentation.docx DistFiles/mplayer/media/* artwork/layer1-9.png -DistFiles/SayMore.chw Thumbs.db src/AutoSegmenter/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache /DistFiles/Palaso.*.xlf diff --git a/DistFiles/.guidsForInstaller.xml b/DistFiles/.guidsForInstaller.xml index 3070e86b..872be1a7 100644 --- a/DistFiles/.guidsForInstaller.xml +++ b/DistFiles/.guidsForInstaller.xml @@ -9,8 +9,6 @@ - - diff --git a/DistFiles/aboutBox.htm b/DistFiles/aboutBox.htm index 718f9034..7cbb893e 100644 --- a/DistFiles/aboutBox.htm +++ b/DistFiles/aboutBox.htm @@ -7,7 +7,7 @@ -

Copyright © 2011-2025 SIL Global

+

Copyright © 2011-2026 SIL Global

License

Open source (MIT).

@@ -35,7 +35,6 @@

Thanks

Payap University Linguistics Institute, Chiang Mai, Thailand

Steven Bird (University of Melbourne)

Sarah Moeller, Tim Gaved, Cambell Prince, Michael Cochran, Gary Simons, John Wickberg, Will Reiman (SIL Global)

-

JetBrains for Resharper, which helps keep our C# code clean and agile, and TeamCity, which we use for continuous integration and builds.

Microsoft for Github, the repository where our open-source code is hosted for free, and also for free use of Visual Studio Community, our preferred IDE.

Atlassian, for a free open-source license for Jira, where we keep bug reports.

diff --git a/build/TestInstallerBuild.bat b/build/TestInstallerBuild.bat index c78ef84d..de77879b 100644 --- a/build/TestInstallerBuild.bat +++ b/build/TestInstallerBuild.bat @@ -1,18 +1,10 @@ -REM IF NOT "%msbuildpath%"=="" GOTO unexpectedsystemvariableinuse -pushd . -copy "..\..\SaymoreDocumentation\SayMore.chm" ..\DistFiles -REM IF EXIST "\Program Files (x86)\MSBuild\14.0\Bin" SET msbuildpath="\Program Files (x86)\MSBuild\14.0\Bin\MSbuild" -REM ELSE IF EXIST "\Program Files (x86)\MSBuild\12.0\Bin" SET msbuildpath="\Program Files (x86)\MSBuild\12.0\Bin\MSbuild" -REM ELSE SET msbuildpath=MSbuild -REM %msbuildpath% /target:installer /property:teamcity_build_checkoutDir=..\ /verbosity:detailed /property:teamcity_dotnet_nunitlauncher_msbuild_task="notthere" /property:BUILD_NUMBER="*.*.6.789" /property:Configuration=Release" +pushd .\ +FOR /F "tokens=*" %%i IN ('"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -latest -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe') DO SET msbuildexe="%%i" dotnet restore ..\SayMore.sln -msbuild /target:Build /verbosity:detailed -msbuild /target:ConvertReleaseNotesToHtml;installer /property:Version=3.8.2000 /verbosity:detailed +%msbuildexe% /target:Build /verbosity:detailed +%msbuildexe% /target:ConvertReleaseNotesToHtml;installer /property:Version=3.8.2000 /verbosity:detailed popd GOTO pauseforusertoseeoutput - -REM :unexpectedsystemvariableinuse -REM @ECHO Unexpected system variable msbuildpath is in use. Value: %msbuildpath% :pauseforusertoseeoutput ECHO %CMDCMDLINE% | findstr /i "/c" >nul -IF NOT errorlevel 1 PAUSE \ No newline at end of file +IF NOT errorlevel 1 PAUSE diff --git a/build/getDependencies-windows.sh b/build/getDependencies-windows.sh deleted file mode 100644 index d42f8f86..00000000 --- a/build/getDependencies-windows.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/bash -# server=build.palaso.org -# build_type=bt34 -# root_dir=.. -# Auto-generated by https://github.com/chrisvire/BuildUpdate. -# Do not edit this file by hand! - -cd "$(dirname "$0")" - -# *** Functions *** -force=0 -clean=0 - -while getopts fc opt; do -case $opt in -f) force=1 ;; -c) clean=1 ;; -esac -done - -shift $((OPTIND - 1)) - -copy_auto() { -if [ "$clean" == "1" ] -then -echo cleaning $2 -rm -f ""$2"" -else -where_curl=$(type -P curl) -where_wget=$(type -P wget) -if [ "$where_curl" != "" ] -then -copy_curl "$1" "$2" -elif [ "$where_wget" != "" ] -then -copy_wget "$1" "$2" -else -echo "Missing curl or wget" -exit 1 -fi -fi -} - -copy_curl() { -echo "curl: $2 <= $1" -if [ -e "$2" ] && [ "$force" != "1" ] -then -curl -# -L -z "$2" -o "$2" "$1" -else -curl -# -L -o "$2" "$1" -fi -} - -copy_wget() { -echo "wget: $2 <= $1" -f1=$(basename $1) -f2=$(basename $2) -cd $(dirname $2) -wget -q -L -N "$1" -# wget has no true equivalent of curl's -o option. -# Different versions of wget handle (or not) % escaping differently. -# A URL query is the only reason why $f1 and $f2 should differ. -if [ "$f1" != "$f2" ]; then mv $f2\?* $f2; fi -cd - -} - - -# *** Results *** -# build: SayMore-win-default Continuous (bt34) -# project: SayMore -# URL: http://build.palaso.org/viewType.html?buildTypeId=bt34 -# VCS: https://github.com/sillsdev/SayMore.git [master] -# dependencies: -# [0] build: SayMore-Documentation (bt76) -# project: SayMore -# URL: http://build.palaso.org/viewType.html?buildTypeId=bt76 -# clean: false -# revision: latest.lastSuccessful -# paths: {"*.chm"=>"DistFiles"} -# VCS: https://github.com/sillsdev/saymore-doc.git [master] - -# make sure output directories exist -mkdir -p ../DistFiles - -# download artifact dependencies -copy_auto http://build.palaso.org/guestAuth/repository/download/bt76/latest.lastSuccessful/SayMore.chm ../DistFiles/SayMore.chm -# End of script diff --git a/src/Installer/Installer.wxs b/src/Installer/Installer.wxs index 01071197..7fc72a12 100644 --- a/src/Installer/Installer.wxs +++ b/src/Installer/Installer.wxs @@ -358,6 +358,10 @@ are trying to support, you're better off using non-advertised shortcuts. "--> + + + + @@ -419,6 +423,7 @@ are trying to support, you're better off using non-advertised shortcuts. "--> + diff --git a/src/SayMore/Program.cs b/src/SayMore/Program.cs index af639de5..1971d7b6 100644 --- a/src/SayMore/Program.cs +++ b/src/SayMore/Program.cs @@ -684,10 +684,29 @@ public static void ResumeBackgroundProcesses(bool processAllPendingEventsNow) WaitCursor.Hide(); } + /// ------------------------------------------------------------------------------------ + internal static string GetHelpFilePath() + { + const string kHelpFileName = "SayMore.chm"; + var path = FileLocationUtilities.GetFileDistributedWithApplication(true, kHelpFileName); + if (path != null) + return path; + // In the dev environment, SayMore.chm is in the docs submodule, not DistFiles. + // TODO: Replace once SIL.IO's FileLocationUtilities supports AdditionalSearchDirectories. + var docsDir = FileLocationUtilities.GetDirectoryDistributedWithApplication(true, "docs"); + if (docsDir != null) + { + path = Path.Combine(docsDir, kHelpFileName); + if (File.Exists(path)) + return path; + } + return null; + } + /// ------------------------------------------------------------------------------------ public static void ShowHelpTopic(string topicLink) { - var path = FileLocationUtilities.GetFileDistributedWithApplication("SayMore.chm"); + var path = GetHelpFilePath(); Help.ShowHelp(new Label(), path, topicLink); Analytics.Track("Show Help Topic", new Dictionary { diff --git a/src/SayMore/UI/ProjectWindow/ProjectWindow.cs b/src/SayMore/UI/ProjectWindow/ProjectWindow.cs index cc050716..8eec4b97 100644 --- a/src/SayMore/UI/ProjectWindow/ProjectWindow.cs +++ b/src/SayMore/UI/ProjectWindow/ProjectWindow.cs @@ -33,6 +33,7 @@ using SIL.Windows.Forms.Miscellaneous; using static System.String; using static SayMore.Utilities.FileSystemUtils; +using System.ComponentModel; namespace SayMore.UI.ProjectWindow { @@ -316,16 +317,32 @@ private static void HandleAboutDialogCheckForUpdatesClick(object sender, EventAr /// ------------------------------------------------------------------------------------ private void HandleHelpClick(object sender, EventArgs e) { - //nb: when the file is in our source code, and not in the program directory, windows security will squawk and then not show content. - var path = FileLocationUtilities.GetFileDistributedWithApplication(false,"SayMore.chm"); + // Windows Security Zone restrictions may silently block content when the help file + // is opened from a dev source path rather than the installed program directory. + string helpFilePath = null; try { - Process.Start(path); + helpFilePath = Program.GetHelpFilePath(); + if (helpFilePath == null) + { + throw new ApplicationException(Format( + LocalizationManager.GetString("MainWindow.HelpFileMissing", + "Could not locate the {0} Help file.", + "Parameter is \"SayMore\" (product name)"), Program.ProductName)); + } + Process.Start(helpFilePath); + } + catch (Win32Exception ex) + { + // User cancelling a security warning here shouldn't lead to a crash. + Logger.WriteEvent($"Error trying to open help file ({helpFilePath ?? "null"}): " + + ex.Message); } catch (Exception ex) { - //user cancelling a security warning here shouldn't lead to a crash - Debug.Print(ex.Message); + ErrorReport.ReportNonFatalExceptionWithMessage(ex, + LocalizationManager.GetString("MainWindow.PossibleInstallationProblem", + "There might be a problem with your installation.")); } Analytics.Track("Show Help from main menu"); }