summaryrefslogtreecommitdiff
path: root/kakaotalk
blob: 04216a20218835fd7c365307f029ab2418f34042 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/bin/bash
# Copyright (c) 2023-2024 Ho Kim (ho.kim@ulagbulag.io). All rights reserved.
# Use of this source code is governed by The Unlicense license that can be
# found in the LICENSE file.

# Prehibit errors
set -e -o pipefail

###########################################################
#   Install Checker                                       #
###########################################################

function _check_wine() {
    WINE_EXE="$1"

    ls "${WINE_EXE}" >/dev/null 2>/dev/null
}

###########################################################
#   Installer                                             #
###########################################################

function _install_wine() {
    SRC_URL='https://app-pc.kakaocdn.net/talk/win32/KakaoTalk_Setup.exe'
    DST_FILE="$(mktemp)"
    WINE_EXE="$1"

    # Mock home directory
    HOME_ORIGIN="${HOME}"
    HOME_PATCH="${WINEPREFIX}/tmp"
    export HOME="${HOME_PATCH}"

    echo 'Installing Kakaotalk...'
    curl -s "${SRC_URL}" -o "${DST_FILE}"
    wineboot
    wine "${DST_FILE}" /S
    rm "${DST_FILE}"

    # Install Fonts
    _font_install

    # Remove tmp home directory
    rm -rf "${HOME_PATCH}"

    # Restore home directory
    export HOME="${HOME_ORIGIN}"

    # Link the wine home directory to the wild
    HOME_WINE="$(
        find "${WINEPREFIX}/drive_c/users" \
            -mindepth 1 -maxdepth 1 -type d -not -name 'Public'
    )"

    dirs="Desktop Documents Downloads Music Pictures Videos"
    [ -n "$HOME_WINE" ] && for dir in $dirs; do
        [ -d "${HOME_WINE}/${dir}" ] && rm -rf "${HOME_WINE}/${dir:?}"
        ln -sf "${HOME}/${dir:?}" "${HOME_WINE}/${dir:?}"
    done

    # Create a desktop shortcut
    if [ -d "${XDG_DATA_HOME:-${HOME}/.local/share}/applications" ]; then
        ICON_SRC='/usr/share/applications/kakaotalk.desktop'
        ICON_DST="${XDG_DATA_HOME:-${HOME}/.local/share}/applications/kakaotalk.desktop"

        if [ -f "${ICON_SRC}" ] && [ ! -f "${ICON_DST}" ]; then
            mkdir -p "$(dirname "${ICON_DST}")"
            cp "${ICON_SRC}" "${ICON_DST}"
            chmod u+x "${ICON_DST}"

            # # Mark as trusted
            # if which gio >/dev/null 2>/dev/null; then
            #     gio set -t string "${ICON_DST}" metadata::xfce-exe-checksum "$(sha256sum "${ICON_SRC}" | awk '{print $1}')"
            # fi
        fi
    fi
}

###########################################################
#   Font Installer                                              #
###########################################################

function _font_install() {
    FONT_URL='https://campaign-cdn.pstatic.net/0/hangeul/2022/zip_v2/nanum-all.zip'
    DST_FONT="$(mktemp -d)"
    FONT_DIR="${WINEPREFIX}/drive_c/windows/Fonts"

    echo 'Installing Fonts...'
    curl -s "${FONT_URL}" -o "${DST_FONT}/nanum-all.zip" >/dev/null 2>&1
    ! command -v unzip &>/dev/null && sudo pacman -Sy unzip
    unzip "${DST_FONT}/nanum-all.zip" -d "${DST_FONT}" >/dev/null 2>&1
    find "${DST_FONT}" -type f -name "*.ttf" -exec mv -f {} "${FONT_DIR}" \;
    rm -rf "${DST_FONT}"
}

###########################################################
#   Executor                                              #
###########################################################

function _exec_wine() {
    WINE_EXE="$1"

    echo 'Executing Kakaotalk...'
    exec ${TERMINAL:-st} -e wine "${WINE_EXE}"
}

###########################################################
#   Main Function                                         #
###########################################################

# Define a main function
function main() {
    # Configure environment variables
    export LANG='en_US.UTF-8'
    export LC_ALL='en_US.UTF-8'
    export WINEARCH='win64'
    export WINEPREFIX="${HOME}/.local/share/kakaotalk"

    # Install
    WINE_EXE="${WINEPREFIX}/drive_c/Program Files (x86)/Kakao/KakaoTalk/KakaoTalk.exe"
    if ! _check_wine "${WINE_EXE}"; then
        _install_wine "${WINE_EXE}"
    fi

    # Exec
    _exec_wine "${WINE_EXE}"
}

# Execute main function
main "$@"