#!/usr/bin/env sh set -eu app_id="io.github.comicviewer.Comicviewer" script_dir="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" install_dir="${HOME}/.local/opt/comicviewer" bin_dir="${HOME}/.local/bin" data_home="${XDG_DATA_HOME:-${HOME}/.local/share}" config_home="${XDG_CONFIG_HOME:-${HOME}/.config}" cache_home="${XDG_CACHE_HOME:-${HOME}/.cache}" applications_dir="${data_home}/applications" icons_dir="${data_home}/icons/hicolor/scalable/apps" installed_appimage="${install_dir}/Comicviewer.AppImage" launcher="${bin_dir}/comicviewer" installed_desktop="${applications_dir}/${app_id}.desktop" installed_icon="${icons_dir}/${app_id}.svg" temporary_appimage="" temporary_desktop="" cleanup() { [ -z "${temporary_appimage}" ] || rm -f "${temporary_appimage}" [ -z "${temporary_desktop}" ] || rm -f "${temporary_desktop}" } trap cleanup EXIT HUP INT TERM refresh_desktop() { if command -v update-desktop-database >/dev/null 2>&1; then update-desktop-database "${applications_dir}" >/dev/null 2>&1 || true fi } install_dependencies() { if [ "${COMICVIEWER_SKIP_DEPENDENCIES:-0}" = "1" ]; then return fi if ! command -v pacman >/dev/null 2>&1; then printf '%s\n' "필수 패키지 자동 설치는 Arch Linux와 CachyOS만 지원합니다." >&2 exit 1 fi set -- for package in fuse2 gtk4 dav1d gvfs gvfs-smb gstreamer curl gst-plugins-base \ gst-plugins-good gst-plugins-bad gst-libav; do if ! pacman -Q "${package}" >/dev/null 2>&1; then set -- "$@" "${package}" fi done if [ "$#" -eq 0 ]; then return fi printf '필수 패키지를 설치합니다: %s\n' "$*" if [ "$(id -u)" -eq 0 ]; then pacman -S --needed "$@" else if ! command -v sudo >/dev/null 2>&1; then printf '%s\n' "필수 패키지를 설치하려면 sudo가 필요합니다." >&2 exit 1 fi sudo pacman -S --needed "$@" fi } if [ "${1:-}" = "--uninstall" ]; then rm -f "${launcher}" "${installed_desktop}" "${installed_icon}" \ "${installed_appimage}" rm -rf "${config_home}/comicviewer" "${data_home}/comicviewer" \ "${cache_home}/comicviewer" rmdir "${install_dir}" 2>/dev/null || true refresh_desktop printf '%s\n' "Comicviewer와 설정, 읽기 기록, 캐시를 모두 제거했습니다." exit 0 fi if [ "$#" -ne 0 ]; then printf '사용법: %s [--uninstall]\n' "$(basename -- "$0")" >&2 exit 2 fi install_dependencies set -- "${script_dir}"/Comicviewer-*-x86_64.AppImage if [ "$#" -ne 1 ] || [ ! -f "$1" ]; then printf '%s\n' "번들에서 Comicviewer AppImage 한 개를 찾을 수 없습니다." >&2 exit 1 fi appimage="$1" checksum="${appimage}.sha256" desktop_file="${script_dir}/${app_id}.desktop" icon_file="${script_dir}/${app_id}.svg" for required_file in "${checksum}" "${desktop_file}" "${icon_file}"; do if [ ! -f "${required_file}" ]; then printf '필수 파일이 없습니다: %s\n' "$(basename -- "${required_file}")" >&2 exit 1 fi done (cd "${script_dir}" && sha256sum -c "$(basename -- "${checksum}")") mkdir -p "${install_dir}" "${bin_dir}" "${applications_dir}" "${icons_dir}" temporary_appimage="${install_dir}/.Comicviewer.AppImage.tmp.$$" temporary_desktop="${applications_dir}/.${app_id}.desktop.tmp.$$" install -m 0755 "${appimage}" "${temporary_appimage}" mv -f "${temporary_appimage}" "${installed_appimage}" temporary_appimage="" ln -sfn "${installed_appimage}" "${launcher}" while IFS= read -r line || [ -n "${line}" ]; do case "${line}" in Exec=*) printf 'Exec="%s" %%f\n' "${launcher}" ;; *) printf '%s\n' "${line}" ;; esac done < "${desktop_file}" > "${temporary_desktop}" chmod 0644 "${temporary_desktop}" mv -f "${temporary_desktop}" "${installed_desktop}" temporary_desktop="" install -m 0644 "${icon_file}" "${installed_icon}" refresh_desktop if ! command -v gio >/dev/null 2>&1; then printf '%s\n' "주의: 원격 파일 접근을 위해 gvfs와 gvfs-smb를 설치하세요." >&2 fi printf '%s\n' "Comicviewer 설치 또는 업데이트를 완료했습니다." printf '실행: %s\n' "${launcher}"