File: ltsp-genmenu

package info (click to toggle)
ltsp 5.5.4-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 5,440 kB
  • ctags: 359
  • sloc: sh: 5,106; ansic: 1,590; perl: 280; python: 197; makefile: 171; lex: 152; yacc: 59
file content (119 lines) | stat: -rwxr-xr-x 4,389 bytes parent folder | download | duplicates (2)
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
#!/bin/sh
LANG=C

setup() {
    if [ ! -d ${TMP_XDG_DIR_LOCAL} ]; then
        exit
    fi

    for d in applications icons; do
        mkdir -p "${TMP_XDG_DIR_LOCAL}/${d}"
    done
}

generate_local() {
    # Build desktop file list
    if [ -n "${LOCAL_APPS_MENU_ITEMS}" ]; then
        DESKTOP_FILES=""
        local oldifs="${IFS-not set}"
        IFS=,
        for i in ${LOCAL_APPS_MENU_ITEMS}; do 
            if [ -e "/usr/share/applications/${i}.desktop" ]; then 
                DESKTOP_FILES="${DESKTOP_FILES} /usr/share/applications/${i}.desktop" 
            elif [ -d "/usr/share/applications/${i%-*}" ] && [ -e "/usr/share/applications/${i%-*}/${i##*-}.desktop" ]; then
                DESKTOP_FILES="${DESKTOP_FILES} /usr/share/applications/${i%-*}/${i##*-}.desktop" 
            fi
        done
        test "$oldifs" = "not set" && unset IFS || IFS="$oldifs"
    else
        DESKTOP_FILES=$(find /usr/share/applications -regex '.*\.desktop$')
    fi

    # Cycle through all .desktop files in client's system applications dir
    for desktop in ${DESKTOP_FILES}; do
        local_desktop=${TMP_XDG_DIR_LOCAL}/applications/${desktop##/usr/share/applications/}

        # Copy client's .desktop file to local
        [ ! -d ${local_desktop%/*} ] && mkdir -p ${local_desktop%/*}
        cp ${desktop} ${local_desktop}

        # Change Exec and TryExec to our localapps command
        if [ -z "$(grep 'X-LTSP-NoChange=1' ${local_desktop})" ]; then
            sed -i -e 's/^TryExec=\(.*\)/TryExec=xprop/' -e 's/^Exec=\(.*\)/Exec=xprop -root -f LTSP_COMMAND 8s -set LTSP_COMMAND "\1"/' ${local_desktop}
        fi

        # Find the appropriate icon and copy it into the local icons dir
        ICON=$(grep ^Icon ${local_desktop}|sed -e 's/^Icon=\(.*\)/\1/')

        # If icon is relative path, find the real icon file
        if [ -n "${ICON}" ] && [ "${ICON}" = "${ICON##*/}" ]; then
            ICON=$(find -L /usr/share/icons /usr/share/pixmaps -type f -regex '.*'${ICON}'.*\(png\|xpm\|svg\)'|head -1)
        fi

        # If the icon file exists, copy it
        if [ -e ${ICON} ]; then
            base_ICON="${ICON##*/}" 
            local_ICON=${TMP_XDG_DIR_LOCAL}/icons/${base_ICON}
            cp ${ICON} ${local_ICON}
        fi
    done
}

generate_remote() {
    # Build desktop file list
    DESKTOP_FILES=""
    local oldifs="${IFS-not set}"
    IFS=,
    for i in ${REMOTE_APPS_MENU_ITEMS}; do 
        if [ -e "${TMP_SHARE}/applications/${i}.desktop" ]; then 
            DESKTOP_FILES="${DESKTOP_FILES} ${TMP_SHARE}/applications/${i}.desktop" 
        elif [ -d "/usr/share/applications/${i%-*}" ] && [ -e "/usr/share/applications/${i%-*}/${i##*-}.desktop" ]; then
            DESKTOP_FILES="${DESKTOP_FILES} /usr/share/applications/${i%-*}/${i##*-}.desktop"
        fi
    done
    test "$oldifs" = "not set" && unset IFS || IFS="$oldifs"

    # Cycle through all .desktop files in client's system applications dir
    for desktop in ${DESKTOP_FILES}; do
        local_desktop=${TMP_XDG_DIR_LOCAL}/applications/${desktop##/usr/share/applications/}

        # Copy client's .desktop file to local
        [ ! -d ${local_desktop%/*} ] && mkdir -p ${local_desktop%/*}
        cp ${desktop} ${local_desktop}

        # Change Exec and TryExec to our localapps command
        if [ -z "$(grep 'X-LTSP-NoChange=1' ${local_desktop})" ]; then
            sed -i -e 's/^TryExec=\(.*\)/TryExec=xprop/' -e 's/^Exec=\(.*\)/Exec=ltsp-remoteapps "\1"/' ${local_desktop}
        fi

        # Find the appropriate icon and copy it into the local icons dir
        ICON=$(grep ^Icon ${local_desktop}|sed -e 's/^Icon=\(.*\)/\1/')

        # If icon is relative path, find the real icon file
        if [ -n "${ICON}" ] && [ "${ICON}" = "${ICON##*/}" ]; then
            ICON=$(find -L /usr/share/icons /usr/share/pixmaps -type f -regex '.*'${ICON}'.*\(png\|xpm\|svg\)'|head -1)
        fi

        # If the icon file exists, copy it
        if [ -e ${ICON} ]; then
            base_ICON="${ICON##*/}" 
            local_ICON=${TMP_XDG_DIR_LOCAL}/icons/${base_ICON}
            cp ${ICON} ${local_ICON}
        fi
    done
}

case "$1" in
    install)
        setup
        if [ -n "${REMOTE_APPS_MENU_ITEMS}" ]; then
            generate_remote
        else
            generate_local
        fi
    ;;
    *)
        echo "Usage: $0 install"
        exit
    ;;
esac