Ely Office: six offline-first desktop apps in Rust and GPUI
ElyDoc, ElyTable, ElyShow (LibreOfficeKit), ElyPDF (MuPDF), ElyTree (Git), ElyMark (Milkdown and CodeMirror in CEF). ElyMail and ElyAgent follow.
This commit is contained in:
817 files changed
+143101
No files matched your search
@@ -0,0 +1,77 @@
|
||||
; Per-user installer; pass APP_NAME, APP_SLUG, VERSION, EXE, ICON, TYPES.
|
||||
Unicode true
|
||||
!include "MUI2.nsh"
|
||||
|
||||
!ifndef APP_NAME
|
||||
!error "pass -DAPP_NAME"
|
||||
!endif
|
||||
!ifndef APP_SLUG
|
||||
!error "pass -DAPP_SLUG"
|
||||
!endif
|
||||
!ifndef VERSION
|
||||
!error "pass -DVERSION"
|
||||
!endif
|
||||
!ifndef EXE
|
||||
!error "pass -DEXE"
|
||||
!endif
|
||||
!ifndef ICON
|
||||
!error "pass -DICON"
|
||||
!endif
|
||||
!ifndef TYPES
|
||||
!error "pass -DTYPES, from packaging/windows/types.sh"
|
||||
!endif
|
||||
!include "${TYPES}"
|
||||
!ifndef OUTFILE
|
||||
!define OUTFILE "${APP_SLUG}-${VERSION}-setup.exe"
|
||||
!endif
|
||||
!define UNINSTALL_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\Ely Office ${APP_NAME}"
|
||||
|
||||
!define MUI_ICON "${ICON}"
|
||||
!define MUI_UNICON "${ICON}"
|
||||
Name "${APP_NAME}"
|
||||
OutFile "${OUTFILE}"
|
||||
RequestExecutionLevel user
|
||||
InstallDir "$LOCALAPPDATA\Programs\Ely Office\${APP_NAME}"
|
||||
InstallDirRegKey HKCU "Software\Ely Office\${APP_NAME}" "InstallDir"
|
||||
SetCompressor /SOLID lzma
|
||||
|
||||
!insertmacro MUI_PAGE_DIRECTORY
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
!insertmacro MUI_UNPAGE_CONFIRM
|
||||
!insertmacro MUI_UNPAGE_INSTFILES
|
||||
!insertmacro MUI_LANGUAGE "SimpChinese"
|
||||
!insertmacro MUI_LANGUAGE "English"
|
||||
|
||||
LangString DeleteData ${LANG_SIMPCHINESE} "同时删除 ${APP_NAME} 的缓存、账号与本地历史吗?你的文档不受影响。"
|
||||
LangString DeleteData ${LANG_ENGLISH} "Also delete the cache, accounts and local history of ${APP_NAME}? Your documents stay."
|
||||
|
||||
Section "Install"
|
||||
SetOutPath "$INSTDIR"
|
||||
File "/oname=${APP_SLUG}.exe" "${EXE}"
|
||||
File "/oname=${APP_SLUG}.ico" "${ICON}"
|
||||
WriteUninstaller "$INSTDIR\uninstall.exe"
|
||||
CreateShortcut "$SMPROGRAMS\${APP_NAME}.lnk" "$INSTDIR\${APP_SLUG}.exe" "" "$INSTDIR\${APP_SLUG}.ico"
|
||||
WriteRegStr HKCU "Software\Ely Office\${APP_NAME}" "InstallDir" "$INSTDIR"
|
||||
WriteRegStr HKCU "${UNINSTALL_KEY}" "DisplayName" "${APP_NAME}"
|
||||
WriteRegStr HKCU "${UNINSTALL_KEY}" "Publisher" "ZacharyZhang"
|
||||
WriteRegStr HKCU "${UNINSTALL_KEY}" "URLInfoAbout" "https://zacharyzhang.com"
|
||||
WriteRegStr HKCU "${UNINSTALL_KEY}" "DisplayVersion" "${VERSION}"
|
||||
WriteRegStr HKCU "${UNINSTALL_KEY}" "DisplayIcon" "$INSTDIR\${APP_SLUG}.ico"
|
||||
WriteRegStr HKCU "${UNINSTALL_KEY}" "UninstallString" '"$INSTDIR\uninstall.exe"'
|
||||
WriteRegDWORD HKCU "${UNINSTALL_KEY}" "NoModify" 1
|
||||
!insertmacro ElyTypesInstall
|
||||
SectionEnd
|
||||
|
||||
Section "Uninstall"
|
||||
Delete "$INSTDIR\${APP_SLUG}.exe"
|
||||
Delete "$INSTDIR\${APP_SLUG}.ico"
|
||||
Delete "$INSTDIR\uninstall.exe"
|
||||
RMDir "$INSTDIR"
|
||||
Delete "$SMPROGRAMS\${APP_NAME}.lnk"
|
||||
DeleteRegKey HKCU "Software\Ely Office\${APP_NAME}"
|
||||
DeleteRegKey HKCU "${UNINSTALL_KEY}"
|
||||
!insertmacro ElyTypesUninstall
|
||||
MessageBox MB_YESNO|MB_DEFBUTTON2 "$(DeleteData)" IDNO done
|
||||
RMDir /r "$LOCALAPPDATA\ElyOffice\${APP_SLUG}"
|
||||
done:
|
||||
SectionEnd
|
||||
Executable
+46
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env bash
|
||||
# Prints NSIS macros registering <slug>'s types, never as default.
|
||||
set -euo pipefail
|
||||
|
||||
root=$(cd "$(dirname "$0")/../.." && pwd)
|
||||
slug=${1:?app slug, such as ely-doc}
|
||||
name=$(awk -F'\t' -v slug="$slug" '$1 == slug { print $2 }' "$root/packaging/apps.tsv")
|
||||
[ -n "$name" ] || { echo "types.sh: unknown app $slug" >&2; exit 1; }
|
||||
progid="ElyOffice.$name"
|
||||
classes='Software\Classes'
|
||||
exts=$(awk -F'\t' -v slug="$slug" '$1 == slug && $2 != "/" { print $2 }' "$root/packaging/types.tsv")
|
||||
folder=$(awk -F'\t' -v slug="$slug" '$1 == slug && $2 == "/" { print "yes" }' "$root/packaging/types.tsv")
|
||||
|
||||
# Open With lists the app; the user's default stays theirs.
|
||||
echo '!macro ElyTypesInstall'
|
||||
if [ -n "$exts" ]; then
|
||||
echo " WriteRegStr HKCU \"$classes\\$progid\" \"\" \"$name\""
|
||||
echo " WriteRegStr HKCU \"$classes\\$progid\\DefaultIcon\" \"\" \"\$INSTDIR\\$slug.ico\""
|
||||
echo " WriteRegStr HKCU \"$classes\\$progid\\shell\\open\\command\" \"\" '\"\$INSTDIR\\$slug.exe\" \"%1\"'"
|
||||
echo " WriteRegStr HKCU \"$classes\\Applications\\$slug.exe\" \"FriendlyAppName\" \"$name\""
|
||||
for ext in $exts; do
|
||||
echo " WriteRegStr HKCU \"$classes\\.$ext\\OpenWithProgids\" \"$progid\" \"\""
|
||||
echo " WriteRegStr HKCU \"$classes\\Applications\\$slug.exe\\SupportedTypes\" \".$ext\" \"\""
|
||||
done
|
||||
fi
|
||||
if [ -n "$folder" ]; then
|
||||
echo " WriteRegStr HKCU \"$classes\\Directory\\shell\\$progid\" \"\" \"Open in $name\""
|
||||
echo " WriteRegStr HKCU \"$classes\\Directory\\shell\\$progid\" \"Icon\" \"\$INSTDIR\\$slug.ico\""
|
||||
echo " WriteRegStr HKCU \"$classes\\Directory\\shell\\$progid\\command\" \"\" '\"\$INSTDIR\\$slug.exe\" \"%1\"'"
|
||||
fi
|
||||
echo ' System::Call "shell32::SHChangeNotify(i 0x08000000, i 0, p 0, p 0)"'
|
||||
echo '!macroend'
|
||||
|
||||
echo '!macro ElyTypesUninstall'
|
||||
if [ -n "$exts" ]; then
|
||||
echo " DeleteRegKey HKCU \"$classes\\$progid\""
|
||||
echo " DeleteRegKey HKCU \"$classes\\Applications\\$slug.exe\""
|
||||
for ext in $exts; do
|
||||
echo " DeleteRegValue HKCU \"$classes\\.$ext\\OpenWithProgids\" \"$progid\""
|
||||
done
|
||||
fi
|
||||
if [ -n "$folder" ]; then
|
||||
echo " DeleteRegKey HKCU \"$classes\\Directory\\shell\\$progid\""
|
||||
fi
|
||||
echo ' System::Call "shell32::SHChangeNotify(i 0x08000000, i 0, p 0, p 0)"'
|
||||
echo '!macroend'
|
||||
Reference in new issue
Block a user