File: rayproxy_to_rayhack.sh

package info (click to toggle)
raysession 0.17.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 19,168 kB
  • sloc: python: 44,371; sh: 1,538; makefile: 208; xml: 86
file content (130 lines) | stat: -rwxr-xr-x 4,307 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
120
121
122
123
124
125
126
127
128
129
130
#!/bin/bash

print_help(){
    echo "usage: $1 arguments
    where options can be
        --help          print this help
        all_sessions    convert ray-proxy clients to RayHack in all sessions
        all_templates   convert all ray-proxy templates to Ray-Hack
        running_client CLIENT_ID
                convert running CLIENT_ID to ray_hack if it is a ray-proxy
"
}

proxy_to_ray_hack(){
    client_id="$1"
    echo "  treating $client_id"
    c_project_path=$(ray_control client $client_id list_files)
    proxy_properties=$(ray_control client $client_id get_proxy_properties)
    
    # more than 1 path for this client, skip
    [[ $(echo "$c_project_path"|wc -l) == "1" ]] || continue
    
    # move the folder didn't work, skip
    if ! mv "$c_project_path" "${c_project_path}__bak";then
        echo "error while moving files, ignore it"
        continue
    fi
    
    echo "trash $client_id"
    ray_control client $client_id trash
    echo "remove_definitely $client_id"
    ray_control trashed_client $client_id remove_definitely
    
    normal_lines=$(ray_control client $client_id get_properties|grep -e ^label: -e ^description: -e ^icon: -e ^desktop_file:)
    exec_line=$(echo "$proxy_properties"|grep ^executable:)
    good_lines=$(echo "$proxy_properties"|grep -e ^arguments: -e ^no_save_level:)
    save_sig_line=$(echo "$proxy_properties"|grep ^save_signal:)
    stop_sig_line=$(echo "$proxy_properties"|grep ^stop_signal:)
    wait_win_line=$(echo "$proxy_properties"|grep ^wait_window:)
    config_file_line=$(echo "$proxy_properties"|grep ^config_file:)

    config_file="${config_file_line#*:}"
    if [ -z "$config_file" ] && [[ "${save_sig_line#*:}" != "0" ]];then
        config_file=anything
    fi

    # mmmh, on very old proxies, stop signal was always saved to SIGUSR1
    stop_sig=${stop_sig_line#*:}
    [[ "$stop_sig" == "10" ]] && stop_sig=15
    
    new_client_id=$(ray_control add_executable "${exec_line#*:}" ray_hack not_start client_id:${client_id})
    if [ -n "$new_client_id" ];then
        echo "set properties of new client '$new_client_id'"
        ray_control client $new_client_id set_properties "$good_lines
config_file:${config_file}
save_sig:${save_sig_line#*:}
stop_sig:$stop_sig
wait_win:${wait_win_line#*:}
$normal_lines"
        rm -R "$c_project_path"
    else
        echo "Add executable failed, sorry, no more client"
    fi
    
    mv "${c_project_path}__bak" "$c_project_path"
}

all_sessions(){
    IFS=$'\n'
    
    for session in $(ray_control list_sessions);do
        echo "____"
        echo "session:"$session
        ray_control open_session_off "$session" || continue

        clients=$(ray_control list_clients executable:ray-proxy)
        for client_id in $clients;do
            proxy_to_ray_hack "$client_id"
        done
    done
    ray_control save
}

all_templates(){
    ray_control open_session_off $(mktemp -u)

    IFS=$'\n'

    for client_template in $(ray_control list_user_client_templates);do
        echo "  client_template:$client_template"
        client_id=$(ray_control add_user_client_template "$client_template" not_start) || continue
        echo "  client_id:$client_id"
        if ray_control client $client_id get_properties|grep ^executable:ray-proxy;then
            echo "     ray-proxy -> Ray-Hack"
            proxy_to_ray_hack $client_id
            echo "      save as template $client_template"
            ray_control client $client_id save_as_template "$client_template"
        fi
        ray_control client $client_id trash
        ray_control trashed_client $client_id remove_definitely
    done
}

argument=$1
shift
case $argument in
    all_sessions|all_templates)
        export RAY_CONTROL_PORT=$(ray_control start_new_hidden)
        $argument
        ray_control quit
    ;;
    running_client)
        client_id="$1"
        [ -z "$client_id" ] && print_help && exit 1
        echo -n "session_path:"
        ray_control get_session_path || exit 1
        if ! ray_control list_clients|grep ^$client_id$;then
            echo "no client with $client_id client_id"
            exit 1
        fi
        ray_control client "$client_id" stop
        proxy_to_ray_hack "$client_id"
    ;;
    --help )
        print_help
    ;;
    *)
        print_help
        exit 1
esac