scripts / flightgear / fgfs_function /
Newer Older
717 lines | 39.011kb
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
1
#!/bin/zsh
2

            
3
#FGDIR=$HOME/scripts/flightgear
4
#FGADDON=$HOME/.fgfs/flightgear-fgaddon
5
function fgfs () {
6
    local fgfs_source=$FGDIR/source
7
    local fgfs_build=$FGDIR/build
8
    local fgfs_install=$FGDIR/install
9
    function update_fg () {
10
        case $1 in
11
            fgaddon)
just cosmetic
Sébastien MARQUE authored on 2021-12-19
12
                test -r $HOME/.fgfs/fgaddon && DB="$FGADDON/fgaddon.db" bash $HOME/.fgfs/fgaddon
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
13
                ;;
14
            check)
15
                test -r $HOME/.fgfs/jenkins-status && bash $HOME/.fgfs/jenkins-status
16
                ;;
17
            rss)
18
                test -r $HOME/.fgfs/fgcoderss && bash $HOME/.fgfs/fgcoderss
19
                ;;
20
            data)
21
                for control_system update_command in ${(kv)control_system_data}; do
22
                    find $FGADDON \
23
                        -maxdepth 3 \
24
                        -mindepth 1 \
25
                        -type d \
26
                        -name .${control_system} \
27
                        -printf "\n[ %h ]\n" \
28
                        -execdir ${control_system} ${update_command} \;
29
                done
30
                ;;
31
            source)
32
                for component in $(<$fgfs_source/.$2); do
33
                    for control_system update_command in ${(kv)control_system_data}; do
34
                        find $fgfs_source/$component \
35
                            -maxdepth 1 \
36
                            -type d \
37
                            -name .${control_system} \
38
                            -printf "\n[ %h ]\n" \
39
                            -execdir ${control_system} ${update_command} \;
40
                    done
41
                done
42
                ;;
43
            build)
44
                local simultaneous=$(nproc)
45
                local previously_installed=()
46
                mkdir -p $fgfs_install
47
                for component in $(<$fgfs_source/.$2); do
48
                    if test -d $fgfs_source/$component/.git; then
49
                        local branch=$(git -C $fgfs_source/$component name-rev --name-only --no-undefined --always HEAD)
50
                    elif test -d $fgfs_source/${component}/.svn; then
51
                        local branch=${${(s:/:)$(svn info --show-item relative-url $fgfs_source/$component)}[2]}
52
                    fi
53

            
54
# TODO: prendre en compte les cas sans cmake
55
                    if test -r $fgfs_source/$component/CMakeLists.txt; then
56
                        local cmake_options=("-DCMAKE_BUILD_TYPE=Release" "-DCMAKE_INSTALL_PREFIX=$fgfs_install/$component")
57
                        test -e $fgfs_source/${component}.specific && source $fgfs_source/${component}.specific
58
                        if test ${#previously_installed[@]} -gt 0; then
59
                            cmake_options+=(${(j. .)${:--DCMAKE_PREFIX_PATH=$fgfs_install/${^previously_installed}}})
60
                            cmake_options+=(${(j. .)${:--DCMAKE_INCLUDE_PATH=$fgfs_install/${^previously_installed}/include}})
61
                        fi
62

            
63
                        title="*** ${component:u}${branch:+ [$branch]} ***"
64
                        printf "\n%s\n%s\n%s\n" "${(l:${#title}::*:)}" "$title" "${(l:${#title}::*:)}"
65
                        mkdir -p $fgfs_build/$component
66
                        cd $fgfs_build/$component
67

            
68
                        echo cmake ${cmake_options[@]//$HOME/\$HOME} ${fgfs_source/#$HOME/\$HOME}/$component
69

            
70
                        cmake ${cmake_options[@]} $fgfs_source/$component > /dev/null \
71
                        && make -j$simultaneous > /dev/null \
72
                        && {
améliore sortie
Sébastien MARQUE authored on 2023-01-15
73
                            make install | sed -r "s,$HOME,\$HOME,; /^-- Up-to-date:/d"
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
74
                        } \
75
                        || {
76
                            echo "erreur construction $component"
77
                            cd $FGDIR
78
                            return
79
                        }
80

            
81
                        cd - > /dev/null
82
                    fi
83

            
84
                    previously_installed+=($component)
85
                done
86
                unset component
87
                ;;
88
        esac
89
    }
90
    function ld_library_path () {
fixe problème avec bibliothè...
Sébastien MARQUE authored on 2022-03-02
91
        for component in $(<$fgfs_source/.flightgear); do
92
            if test -d $fgfs_install/$component/lib; then
93
                lib="$fgfs_install/$component/lib"
94
                egrep -q "(^|:)$lib(:|$)" <<< "${LD_LIBRARY_PATH}" || LD_LIBRARY_PATH="${lib}${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
95
            fi
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
96
        done
97
        export LD_LIBRARY_PATH
98
    }
améliore la vérification de ...
Sébastien MARQUE authored on 2022-06-01
99
    function check_fgaddon () {
100
        if ! test -r $FGADDON/fgaddon.db; then
101
            echo "aircraft DB not found at $FGADDON/fgaddon.db"
102
            echo "please run $0 --update-fgaddon"
103
            return 1
104
        fi
105
        if ! command -v sqlite3 > /dev/null; then
106
            which sqlite3
107
            return 1
108
        fi
109
    }
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
110
    local aircrafts="$FGADDON/Aircraft"
111
    local fgfs_args=("--fg-root=$FGDIR/source/fgdata")
112
    local aircraft=
113
    local airport=
114
    if [[ -o BASH_REMATCH ]]; then
115
        local bash_rematch_set=1
116
    fi
117

            
118
    for fgfs_arg in $@; do
119
        if test ${fgfs_arg#--} = ${fgfs_arg}; then
120
############ APPAREIL DANS FGADDON ?
121
            if test -n "$(find $aircrafts -maxdepth 2 -type f -name ${fgfs_arg}-set.xml -print -quit)"; then
122
                fgfs_args+=("--aircraft=$fgfs_arg")
123
                fgfs_args+=("--fg-aircraft=$FGADDON/Aircraft")
124

            
125
############ APPAREIL DANS FGDIR/source/fgdata ?
126
            elif official_aircraft=$(find "$fgfs_source/fgdata/Aircraft" -maxdepth 2 -type f -name ${fgfs_arg}-set.xml -printf "%h" -quit) && test -n "$official_aircraft"; then
127
                fgfs_args+=("--aircraft=$fgfs_arg")
128
                fgfs_args+=("--aircraft-dir=$official_aircraft")
129
                unset official_aircraft
130

            
131
############ APPAREIL DISPONIBLE DANS UN HANGAR CONNU ?
132
            elif which sqlite3 > /dev/null 2>&1 \
133
            && test -r $FGADDON/fgaddon.db \
134
            && test $(sqlite3 $FGADDON/fgaddon.db <<< "select count(file) from setxml where file is '${fgfs_arg}'") -gt 0; then
135
                local PS3='which aircraft ? '
136
                local IFS=$'\n'
137
                select ac in $(sqlite3 $FGADDON/fgaddon.db <<< "select distinct printf('%s [%s, %s]',
138
                                                               aircrafts.name,
139
                                                               hangars.name,
140
                                                               date(aircrafts.date, 'unixepoch'))
141
                                                 from aircrafts
142
                                                 inner join setxml, hangars
143
                                                 where
144
                                                   aircrafts.hangar = hangars.id
145
                                                 and
146
                                                   setxml.variantof = aircrafts.id
147
                                                 and
148
                                                     setxml.file = '${fgfs_arg}'
149
                                                 order by aircrafts.date desc"); do
150
                    test -z "$ac" && continue
151
                    read -q "REPLY?download ${${(@s/ /)ac}[1]} ? (y/N) "
152
                    if test -n "$REPLY" && test ${REPLY:l} = "y"; then
153
                        declare -A hangar
154
                        eval $(sqlite3 $FGADDON/fgaddon.db <<< "select printf('hangar[type]=%s;hangar[url]=%s;', type, url)
zsh 5.9 est plus restrictif
Sébastien MARQUE authored on 2023-07-23
155
                                                                from hangars where name = '${${${(@s/ /)ac}[2]}:1:-1}'")
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
156
                        case ${hangar[type]} in
157
                            git)
158
                                git -C $FGADDON/Aircraft clone ${hangar[url]}/${${(@s/ /)ac}[1]}.git;;
159
                            svn)
160
                                svn checkout ${hangar[url]}/${${(@s/ /)ac}[1]} $FGADDON/Aircraft/${${(@s/ /)ac}[1]};;
161
                        esac
162
                        fgfs_args+=("--aircraft=$fgfs_arg")
163
                        fgfs_args+=("--fg-aircraft=$FGADDON/Aircraft")
164
                        unset -v hangar
165
                    else
166
                        echo "falling back to default"
167
                    fi
168
                    break
169
                done
170

            
171
############ SERVEUR MULTIPLAY ?
172
            elif set -o BASH_REMATCH && [[ $fgfs_arg =~ "^mp([0-9]+)$" ]]; then
173
                fgfs_args+=("--multiplay=out,10,mpserver${BASH_REMATCH[2]}.flightgear.org,5000")
option --callsign déterminée...
Sébastien MARQUE authored on 2022-06-02
174
                if test -n "$(ls -rt1 $HOME/.fgfs/autosave_*.xml | tail -1)"; then
175
                    callsign=$(sed -rn 's/^.*<callsign.*>(.+)<.callsign>.*$/\1/p' $(ls -rt1 $HOME/.fgfs/autosave_*.xml | tail -1))
176
                fi
177
                if test -n "$callsign"; then
178
                    fgfs_args+=("--callsign=$callsign")
179
                fi
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
180
                test -z "$bash_rematch_set" && set +o BASH_REMATCH
181

            
182
############ DEMANDE DE TRACE DE VOL ?
183
            elif [[ $fgfs_arg == "log" ]]; then
184
                # option construite plus tard avec nom de l'appareil
185
                local log_requested=1
186

            
187
############ AEROPORT ?
188
            else 
189
                local candidate_airport=${fgfs_arg%:*}; [[ $candidate_airport == $fgfs_arg ]] && candidate_airport=${fgfs_arg%+*}
190
                local candidate_parking=${fgfs_arg#*:}; [[ $candidate_parking == $fgfs_arg ]] && unset candidate_parking
191
                local candidate_runway=${fgfs_arg#*+};  [[ $candidate_runway  == $fgfs_arg ]] && unset candidate_runway
192

            
gère le montage par terrafs
Sébastien MARQUE authored on 2023-08-02
193
                if [[ -x $HOME/.fgfs/terrafs && -d $HOME/.fgfs/terrafs.d ]]; then
194
                    if test $(grep -Ec "^terrafs\s+$HOME/.fgfs/terrafs.d" /proc/mounts) -eq 0 \
195
                    && echo "$HOME/.fgfs/terrafs.d present but not mounted !"                 \
196
                    && test -x $HOME/.fgfs/mount.terrafs                                      \
197
                    && read -q "mount_terrafs?go to mount it ? (y/N) "                        \
198
                    && [[ "${mount_terrafs:-n}" = "y" ]]; then
199
                        $HOME/.fgfs/mount.terrafs || return 1
200
                    else
201
                        echo "mount it manually, or remove it to use TerraSync"
202
                        return 1
203
                    fi
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
204
                    fgfs_args+=(--fg-scenery=$HOME/.fgfs/terrafs.d)
205
                    fgfs_args+=(--disable-terrasync)
206
                    local scenes_dir=$HOME/.fgfs/terrafs.d
207
                else
208
                    fgfs_args+=(--terrasync-dir=$HOME/.fgfs/TerraSync)
209
                    fgfs_args+=(--enable-terrasync)
210
                    local scenes_dir=$HOME/.fgfs/TerraSync
211
                fi
212

            
213
                local airport_data="$scenes_dir/Airports/$candidate_airport[1]:u/$candidate_airport[2]:u/$candidate_airport[3]:u/${candidate_airport:u}"
214
                if ! test -r "${airport_data}.threshold.xml"; then
215
                    echo "airport ${candidate_airport:u} not found !"
216
                fi
217

            
218
                if test -n "$candidate_parking" && test "$candidate_parking" = '?'; then
219
                    if test -r "${airport_data}.groundnet.xml"; then
220
                        echo "Parkings ${candidate_airport:u}:"
221
                        sed -rn "/<parkingList/,/parkingList>/s/^.* name=\"([^\"]+).*$/\1/p" "${airport_data}.groundnet.xml"
222
                    else
223
                        echo "no information for parkings available on ${candidate_airport:u}"
224
                    fi
225
                    return
226
                elif test -n "$candidate_runway" && test "$candidate_runway" = '?'; then
227
                    if test -r "${airport_data}.threshold.xml"; then
228
                        echo "Runways ${candidate_airport:u}:"
229
                        sed -rn 's|^.*<rwy>(.+)</rwy>.*$|\1|p' "${airport_data}.threshold.xml"
230
                    else
231
                        echo "no information for runways available on ${candidate_airport:u}"
232
                    fi
233
                    return
234
                fi
235

            
236
                if test -r "${airport_data}.threshold.xml"; then
237
                    fgfs_args+=(--airport=$candidate_airport)
238
                    if [[ -a "${airport_data}.groundnet.xml" && -n "$candidate_parking" ]]; then
239
                        if sed -rn "/<parkingList/,/parkingList>/p" "${airport_data}.groundnet.xml" | grep -q "name=\"${candidate_parking}\""; then
240
                            fgfs_args+=("--parkpos='$candidate_parking'")
241
                        else
242
                            echo "$candidate_parking isn't a valid parking position"
243
                        fi
244
                    elif test -n "$candidate_runway"; then
245
                        if grep -q "<rwy>${candidate_runway}</rwy>" "${airport_data}.threshold.xml"; then
246
                            fgfs_args+=("--runway=$candidate_runway")
247
                        else
248
                            echo "$candidate_runway isn't a valid runway"
249
                        fi
250
                    fi
251
                fi
252
            fi
253

            
254
######## AUTRE OPTION
255
        else
256
            case $fgfs_arg in
257
                --update(-data|-source|-build|))
ajout système d'aide intégré...
Sébastien MARQUE authored on 2022-06-02
258
                    echo 10 met à jour les data, les sources, ou compile. Prend en option le projet > /dev/null
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
259
                    if test ! -r $fgfs_source/.${2:-flightgear}; then
260
                        echo "${2:+unknown set $2\n}usage: --update|--update-data|--update-source|--update-build <set>"
261
                        echo "available sets :" ${$(find $fgfs_source -maxdepth 1 -type f -name ".*" -printf "%f ")//#.}
262
                        return 1
263
                    fi
264
                    for component in $(<$fgfs_source/.${2:-flightgear}); do
265
                        if ! test -d $fgfs_source/$component; then
266
                            echo component $component not found
267
                            return 1
268
                        fi
269
                    done
270
                    typeset -A control_system_data=(
271
                        git pull
272
                        svn up
273
                    )
274
                    for up in ${${=${fgfs_arg#--update}:-data source build}#-}; do
275
                        update_fg $up ${2:-flightgear}
276
                    done
277
                    unset control_system_data control_system update_command up
278
                    return
279
                    ;;
280
                --update-(fgaddon|check|rss))
ajout système d'aide intégré...
Sébastien MARQUE authored on 2022-06-02
281
                    echo 11 utilise les scripts externe fgaddon, check ou rss > /dev/null
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
282
                    update_fg ${fgfs_arg#--update-}
283
                    return
284
                    ;;
ajout système d'aide intégré...
Sébastien MARQUE authored on 2022-06-02
285
                --help)
286
                    echo 1 affiche cette aide et quitte > /dev/null
287
                    (
288
                     cat << EOH
289
VARIABLES IMPORTANTES:
290
FGDIR   = ${FGDIR:-/!\\ ATTENTION FGDIR VIDE /!\\}
291
FGADDON = ${FGADDON:-/!\\ ATTENTION FGADDON VIDE /!\\}
292

            
293
OPTIONS SPÉCIFIQUES AU SCRIPT:
294
les options commençant par "--" sont:
295
$(declare -f $0 \
296
    | sed -rn "s|^\s*\((--.+)\) echo ([0-9]+) \"?(.+)\"? > /dev/null$|\1:\2:\3|p" \
297
    | sed 's/"$//' \
298
    | awk -F':' -v dq='"' '
299
        BEGIN {
300
            maxlength = 0
301
        }
302
        {
303
            order[$1]  = strtonum($2)
304
            option[$1] = $3
305
            if (length($1) > maxlength) maxlength = length($1)
306
        }
307
        END {
308
            PROCINFO["sorted_in"] = "@val_num_asc"
309
            for (o in order)
310
                printf("%s%s%*s%s\n", order[o] % 10 == 0 ? "\n" : "", o, maxlength - length(o) + 1, " ", option[o])
311
        }')
312

            
313
les options ne commençant pas par "--" peuvent être
314
* log: crée un log au format igc et enregistré dans le fichier au nom comprenant date, heure et nom de l'appareil,
315
       avec une fréquence de 1Hz
316
* mp[0-9]+: un serveur de multiplayer sur lequel se connecter, le callsign sera aussi configuré avec celui trouvé dans autosave,
317
            par exemple mp01 pour une connexion sur mpserver01.flightgear.org:5000
318
* un appareil: c172p, si l'appareil n'est pas installé mais présent dans la base de données, il sera proposé de l'installer
319
* un aéroport:
320
  * sans emplacement précisé: lfbd
321
  * avec une piste: lfbd+09, si la piste n'est pas trouvée sortie en erreur
322
    il est possible de lister les pistes disponible avec lfbt+\\? (notez l'échappement \\ pour éviter une
323
    interprétation du caractère \`?' par le shell:
324
       $ fgfs ksfo+\\?
325
       Runways KSFO:
326
       01L
327
       19R
328
       01R
329
       19L
330
       10L
331
       28R
332
       10R
333
       28L
334
  * avec un emplacement de parking: lfbt:parking_1, si le parking n'est pas trouvé un message l'indique et il est ignoré
335
    comme avec les pistes il est possible de lister les emplacements disponibles:
336
       $ fgfs biis:\\?
337
       Parkings BIIS:
338
       Gate
339
       Ramp_Start_1
340
       Ramp_Start_2
341

            
342
Au lancement, la ligne de commande utilisée est affichée (dans l'exemple ci-dessous les options montrées mais son stipulées dans les paramètres proviennent de fgfsrc:
343
$  fgfs ercoupe biis
344
--fg-root=\$HOME/scripts/flightgear/source/fgdata --aircraft=ercoupe --fg-aircraft=\$HOME/.fgfs/flightgear-fgaddon/Aircraft --terrasync-dir=\$HOME/.fgfs/TerraSync --enable-terrasync --airport=biis --addon=\$HOME/.fgfs/flightgear-fgaddon/Addons/SpokenATC
345
...
346

            
347
OPTIONS SPÉCIFIQUES À FG:
348
$(ld_library_path; $FGDIR/install/flightgear/bin/fgfs $fgfs_arg --verbose 2>/dev/null | sed '1d; /: fgfs \[/,+1d')
349
EOH
350
                    ) | pager
351
                    return
352
                    ;;
353
                --show-aircraft)
préparation pour l'ajout d'u...
Sébastien MARQUE authored on 2022-06-05
354
                    echo 32 liste les appareils (wrapper pour la même option de FG) > /dev/null
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
355
                    ld_library_path
ajout système d'aide intégré...
Sébastien MARQUE authored on 2022-06-02
356
                    $FGDIR/install/flightgear/bin/fgfs --show-aircraft --fg-aircraft=$FGADDON/Aircraft 2>/dev/null | pager
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
357
                    return
358
                    ;;
359
                --info)
préparation pour l'ajout d'u...
Sébastien MARQUE authored on 2022-06-05
360
                    echo 33 "donne des infos sur l'appareil en paramètre" > /dev/null
améliore la vérification de ...
Sébastien MARQUE authored on 2022-06-01
361
                    check_fgaddon || return 1
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
362
                    local IFS=$'\n'
363
                    function _info () {
364
                        local _info=$(sqlite3 $FGADDON/fgaddon.db <<< "select \`$1\`
365
                                                     from setxml
366
                                                     inner join aircrafts, hangars
367
                                                     where
368
                                                       aircrafts.hangar = hangars.id
369
                                                     and
370
                                                       setxml.variantof = aircrafts.id
371
                                                     and
372
                                                       setxml.file = '$file'
373
                                                     and
zsh 5.9 est plus restrictif
Sébastien MARQUE authored on 2023-07-23
374
                                                       hangars.name = '${${${(@s/ /)ac}[2]}:1:-1}'")
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
375
                        if test -n "$_info"; then
376
                            printf "%s: %s\n" "$2" "$_info"
377
                        fi
378
                    }
improve aircraft selection f...
Sébastien MARQUE authored on 2022-01-16
379
                    local ac_list=($(sqlite3 $FGADDON/fgaddon.db <<< "select distinct printf('%s [%s, %s]',
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
380
                                                                   aircrafts.name,
381
                                                                   hangars.name,
382
                                                                   date(aircrafts.date, 'unixepoch'))
383
                                                     from aircrafts
384
                                                     inner join setxml, hangars
385
                                                     where
386
                                                       aircrafts.hangar = hangars.id
387
                                                     and
388
                                                       setxml.variantof = aircrafts.id
389
                                                     and
390
                                                         setxml.file = '$2'
improve aircraft selection f...
Sébastien MARQUE authored on 2022-01-16
391
                                                     order by aircrafts.date desc"))
392
                    if test ${#ac_list[@]} -gt 1; then
393
                        local PS3='which aircraft ? '
394
                        select ac in ${ac_list[@]}; do
395
                            test -z "$ac" && continue
396
                            break
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
397
                        done
improve aircraft selection f...
Sébastien MARQUE authored on 2022-01-16
398
                    elif test ${#ac_list[@]} -eq 1; then
399
                        ac=${ac_list[1]}
400
                    else
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
401
                        return
improve aircraft selection f...
Sébastien MARQUE authored on 2022-01-16
402
                    fi
403
                    local file=$2
404
                    _info /sim/description      "Short description"
405
                    _info /sim/long-description "Long description"
406
                    _info /sim/author           "Author(s)"
407
                    _info /sim/flight-model     "Flight model"
408
                    _info /sim/type             "Type"
409
                    echo Ratings
410
                    for r in FDM systems cockpit model; do
411
                        _info /sim/rating/$r "  $r"
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
412
                    done
413
                    return
414
                    ;;
415
                --show-thumbnail)
ajout système d'aide intégré...
Sébastien MARQUE authored on 2022-06-02
416
                    echo 32 "affiche la vignette de l'appareil en paramètre (cf. fgaddon)" > /dev/null
améliore la vérification de ...
Sébastien MARQUE authored on 2022-06-01
417
                    check_fgaddon || return 1
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
418
                    local PS3='which aircraft ? '
419
                    local IFS=$'\n'
improve aircraft selection f...
Sébastien MARQUE authored on 2022-01-16
420
                    local ac_list=($(sqlite3 $FGADDON/fgaddon.db <<< "select distinct printf('%s [%s, %s]',
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
421
                                                                   aircrafts.name,
422
                                                                   hangars.name,
423
                                                                   date(aircrafts.date, 'unixepoch'))
424
                                                     from aircrafts
425
                                                     inner join setxml, hangars
426
                                                     where
427
                                                       aircrafts.hangar = hangars.id
428
                                                     and
429
                                                       setxml.variantof = aircrafts.id
430
                                                     and (
431
                                                         setxml.file like '%$2%'
432
                                                       or
433
                                                         aircrafts.name like '%$2%'
434
                                                     )
improve aircraft selection f...
Sébastien MARQUE authored on 2022-01-16
435
                                                     order by aircrafts.date desc"))
436
                    if test ${#ac_list[@]} -gt 1; then
437
                        local PS3='which aircraft ? '
438
                        select ac in ${ac_list[@]}; do
439
                            test -z "$ac" && continue
440
                            break
441
                        done
442
                    elif test ${#ac_list[@]} -eq 1; then
443
                        ac=${ac_list[1]}
444
                    else
445
                        return
446
                    fi
447
                    local url=$(sqlite3 $FGADDON/fgaddon.db <<< "select printf('%s/${${(@s/ /)ac}[1]}', url)
zsh 5.9 est plus restrictif
Sébastien MARQUE authored on 2023-07-23
448
                                                                 from hangars where name = '${${${(@s/ /)ac}[2]}:1:-1}'")
449
                    if test ${${${(@s/ /)ac}[2]}:1:-1} = 'FGMEMBERS'; then
improve aircraft selection f...
Sébastien MARQUE authored on 2022-01-16
450
                        url="https://raw.githubusercontent.com/FGMEMBERS/${${(@s/ /)ac}[1]}/master"
451
                    fi
452
                    if wget --quiet --spider "$url/thumbnail.jpg"; then
453
                        curl -s "$url/thumbnail.jpg" \
454
                        | convert - -resize '200%' -normalize -sharpen '0.0x1.0' - \
455
                        | display
456
                    else
zsh 5.9 est plus restrictif
Sébastien MARQUE authored on 2023-07-23
457
                        echo "can't find or get thumbnail for ${${(@s/ /)ac}[1]} (${${${(@s/ /)ac}[2]}:1:-1}'s hangar)"
improve aircraft selection f...
Sébastien MARQUE authored on 2022-01-16
458
                    fi
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
459
                    return
460
                    ;;
461
                --search)
préparation pour l'ajout d'u...
Sébastien MARQUE authored on 2022-06-05
462
                    echo 30 "cherche un appareil dans la base de données par le nom" > /dev/null
améliore la vérification de ...
Sébastien MARQUE authored on 2022-06-01
463
                    check_fgaddon || return 1
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
464
                    sqlite3 $FGADDON/fgaddon.db <<< "select printf('[%s, %s] %s (%s): %s ',
465
                                                                   hangars.name,
466
                                                                   date(aircrafts.date, 'unixepoch'),
467
                                                                   setxml.file,
468
                                                                   setxml.\`/sim/flight-model\`,
469
                                                                   setxml.\`/sim/description\`)
470
                                                     from setxml
471
                                                     inner join aircrafts, hangars
472
                                                     where
473
                                                       aircrafts.hangar = hangars.id
474
                                                     and
475
                                                       setxml.variantof = aircrafts.id
476
                                                     and (
477
                                                         setxml.file like '%$2%'
478
                                                       or
479
                                                         aircrafts.name like '%$2%'
480
                                                     )
481
                                                     order by aircrafts.date desc"
482
                    return
483
                    ;;
ajout recherche par évaluati...
Sébastien MARQUE authored on 2022-06-05
484
                --search-rating)
485
                    echo 31 "cherche un appareil dans la base de données par l'évaluation" > /dev/null
486
                    check_fgaddon || return 1
487
                    if test -z $(sqlite3 $FGADDON/fgaddon.db <<< "select 1 from pragma_table_info('setxml')
488
                            where name == '/sim/rating/${2:-void}'"); then
489
                        echo "rating ${2:-void} non trouvé, ratings disponibles:"
490
                        sqlite3 $FGADDON/fgaddon.db <<< "select name from pragma_table_info('setxml')
491
                            where name like '/sim/rating/%'" | sed 's,/sim/rating/, - ,'
492
                        return
493
                    fi
494
                    sqlite3 $FGADDON/fgaddon.db <<< "select printf('[%s, %s] %s (%s): %s ',
495
                                                                   hangars.name,
496
                                                                   date(aircrafts.date, 'unixepoch'),
497
                                                                   setxml.file,
498
                                                                   setxml.\`/sim/flight-model\`,
499
                                                                   setxml.\`/sim/description\`)
500
                                                     from setxml
501
                                                     inner join aircrafts, hangars
502
                                                     where
503
                                                       aircrafts.hangar = hangars.id
504
                                                     and
505
                                                       setxml.variantof = aircrafts.id
506
                                                     and
507
                                                        setxml.\`/sim/rating/$2\` >= ${3:-4}
508
                                                     order by aircrafts.date desc"
509
                    return
510
                    ;;
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
511
                --mp-list)
ajout système d'aide intégré...
Sébastien MARQUE authored on 2022-06-02
512
                    echo 40 renvoie la liste des appareils visibles sur multiplayer depuis mpserver01 > /dev/null
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
513
                    local mplist=$(mktemp --dry-run /dev/shm/XXXXXXXXX)
514
                    declare -A installed_model fgaddon_model unknown_model
515
                    local ac_name=
ajoute la possibilité de cho...
Sébastien MARQUE authored on 2022-06-02
516
                    local MPSERVER=${MPSERVER:-mpserver01.flightgear.org}
517
                    local MPPORT=${MPPORT:-5001}
518
                    echo data from $MPSERVER:$MPPORT
519
                    telnet $MPSERVER $MPPORT 2>/dev/null > $mplist
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
520
                    grep 'pilot(s) online' $mplist
521
                    echo
522
                    local IFS=$'\n'
523
                    for model in $(awk '/@/{a[$NF]++}END{for (i in a) printf("%s (%i)\n", i, a[i])}' $mplist); do
524
                        if test -r $FGADDON/${model% *} \
525
                             -o -r $FGDIR/source/fgdata/${model% *}; then
526

            
527
                            ((++installed_model[${${(s:/:)model}[2]} ${model#* }]))
528

            
529
                        elif test -r $FGDIR/source/fgdata/AI/${model% *}; then
530

            
531
                            ((++installed_model[*${${(s:/:)model}[2]} ${model#* }]))
532

            
533
                        elif test -n "$(command -v sqlite3)" -a -r $FGADDON/fgaddon.db; then
534
                            ac_name=$(sqlite3 $FGADDON/fgaddon.db <<< 'select     printf("%s/%s", aircrafts.name, setxml.file)
535
                                                                       from       aircrafts
536
                                                                       inner join setxml
537
                                                                       where      aircrafts.id = setxml.variantof
538
                                                                       and        setxml.`/sim/model/path` = "'${model% *}'"
539
                                                                       limit      1')
540
                            if test -n "$ac_name"; then
541
                                ((++fgaddon_model[${ac_name} ${model#* }]))
542
                            else
543
                                ((++unknown_model[${model}]))
544
                            fi
545

            
546
                        else
547
                            ((++unknown_model[${model}]))
548
                        fi
549
                    done
550
                    if test ${#installed_model[@]} -gt 0; then
551
                        echo "${(j:\n:)${(Ok)installed_model[@]}}" > $mplist
552
                        echo -e "${#installed_model[@]} models installed (*AI model only):\n$(column -c$(tput cols) $mplist)\n"
553
                    fi
554
                    if test ${#fgaddon_model[@]} -gt 0; then
555
                        echo "${(j:\n:)${(Ok)fgaddon_model[@]}}" > $mplist
556
                        echo -e "${#fgaddon_model[@]} models available in FGADDON:\n$(column -c$(tput cols) $mplist)\n"
557
                    fi
558
                    if test ${#unknown_model[@]} -gt 0; then
559
                        echo "${(j:\n:)${(Ok)unknown_model[@]}}" > $mplist
560
                        echo -e "${#unknown_model[@]} unknown models:\n$(column -c$(tput cols) $mplist)"
561
                    fi
562
                    unset installed_model unknown_model fgaddon_model
563
                    rm $mplist
564
                    return
565
                    ;;
566
                --install)
ajout système d'aide intégré...
Sébastien MARQUE authored on 2022-06-02
567
                    echo 35 "installe l'appareil donné en paramètre" > /dev/null
améliore la vérification de ...
Sébastien MARQUE authored on 2022-06-01
568
                    check_fgaddon || return 1
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
569
                    local PS3='which aircraft ? '
570
                    local IFS=$'\n'
571
                    select ac in $(sqlite3 $FGADDON/fgaddon.db <<< "select distinct printf('%s [%s, %s]',
572
                                                                   aircrafts.name,
573
                                                                   hangars.name,
574
                                                                   date(aircrafts.date, 'unixepoch'))
575
                                                     from aircrafts
576
                                                     inner join setxml, hangars
577
                                                     where
578
                                                       aircrafts.hangar = hangars.id
579
                                                     and
580
                                                       setxml.variantof = aircrafts.id
581
                                                     and (
582
                                                         setxml.file like '%$2%'
583
                                                       or
584
                                                         aircrafts.name like '%$2%'
585
                                                     )
586
                                                     order by aircrafts.date desc"); do
587
                        test -z "$ac" && continue
588
                    done
589
                    test -z "$ac" && return
590
                    declare -A hangar
591
                    eval $(sqlite3 $FGADDON/fgaddon.db <<< "select printf('hangar[type]=%s;hangar[url]=%s;', type, url)
zsh 5.9 est plus restrictif
Sébastien MARQUE authored on 2023-07-23
592
                                                            from hangars where name = '${${${(@s/ /)ac}[2]}:1:-1}'")
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
593
                    case ${hangar[type]} in
594
                        git)
595
                            git -C $FGADDON/Aircraft clone ${hangar[url]}/${${(@s/ /)ac}[1]}.git;;
596
                        svn)
597
                            svn checkout ${hangar[url]}/${${(@s/ /)ac}[1]} $FGADDON/Aircraft/${${(@s/ /)ac}[1]};;
598
                    esac
599
                    unset hangar
600
                    return
601
                    ;;
améliore lancement mumble et...
Sébastien MARQUE authored on 2022-01-21
602
                --mumble)
ajout système d'aide intégré...
Sébastien MARQUE authored on 2022-06-02
603
                    echo 90 lance FG avec mumble > /dev/null
améliore lancement mumble et...
Sébastien MARQUE authored on 2022-01-21
604
                    if pgrep -u $USER mumble > /dev/null; then
605
                        echo "there is already a mumble instance launched"
606
                    else
607
                        mumble_desktop_entry=($(if test -n "$XDG_DATA_DIRS"; then find "${(s/:/)XDG_DATA_DIRS}" -type f,l -iname "*mumble*desktop"; fi))
608
                        if test ${#mumble_desktop_entry[@]} -gt 0; then
609
                            echo lauching ${mumble_desktop_entry[1]}
610
                            nohup gtk-launch ${mumble_desktop_entry[1]##*/} > /dev/null 2>&1 &
611
                        else
612
                            echo "no desktop entry found for mumble (XDG_DATA_DIRS=$XDG_DATA_DIRS)"
613
                            return 1
614
                        fi
615
                    fi
616
                    ;& # on continue avec l'addon fgcom
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
617
                --fgcom)
ajout système d'aide intégré...
Sébastien MARQUE authored on 2022-06-02
618
                    echo 91 lance FG avec fgcom-mumble > /dev/null
améliore lancement mumble et...
Sébastien MARQUE authored on 2022-01-21
619
                    if test -r $fgfs_source/fgcom-mumble/client/fgfs-addon/addon-metadata.xml; then
620
                        fgfs_args+=("--addon=$fgfs_source/fgcom-mumble/client/fgfs-addon")
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
621
                    else
améliore lancement mumble et...
Sébastien MARQUE authored on 2022-01-21
622
                        echo "can't find addon fgcom-mumble"
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
623
                        return 1
624
                    fi
625
                    ;;
626
                --map|--lnm)
ajout système d'aide intégré...
Sébastien MARQUE authored on 2022-06-02
627
                    echo 92 lance LittleNavMap en parallèle ainsi que la liaison avec FG > /dev/null
meilleure gestion de fgconne...
Sébastien MARQUE authored on 2022-03-06
628
                    if ! pgrep -u $USER -f "python3 ./fgconnect.py" > /dev/null; then
remplacement de littlefgconn...
Sébastien MARQUE authored on 2022-01-16
629
                        if test -d $FGADDON/Addons/littlenavmap -a -x $fgfs_source/fgconnect/fgconnect.py; then
meilleure gestion de fgconne...
Sébastien MARQUE authored on 2022-03-06
630
                            ( cd $fgfs_source/fgconnect; python3 ./fgconnect.py -s )&
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
631
                        else
remplacement de littlefgconn...
Sébastien MARQUE authored on 2022-01-16
632
                            echo "can't find FGconnect or littlenavmap addon"
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
633
                            return 1
634
                        fi
635
                    else
remplacement de littlefgconn...
Sébastien MARQUE authored on 2022-01-16
636
                        echo "FGconnect already lauched"
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
637
                    fi
638
                    fgfs_args+=("--addon=$FGADDON/Addons/littlenavmap")
639
                    ;;
640
                --addon=*)
ajout système d'aide intégré...
Sébastien MARQUE authored on 2022-06-02
641
                    echo 99 lance FG avec un addon spécifique installé > /dev/null
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
642
                    addon_path="${fgfs_arg#*=}"
643
                    if test -d "$addon_path"; then
644
                        fgfs_args+=("--addon=$addon_path")
645
                    elif test -d "$FGADDON/Addons/$addon_path"; then
646
                        fgfs_args+=("--addon=$FGADDON/Addons/$addon_path")
647
                    else
648
                        echo "can't find requested addon in $addon_path or $FGADDON/$addon_path !"
649
                    fi
650
                    ;;
améliore l'utilisation de --...
Sébastien MARQUE authored on 2023-07-22
651
                --ws3|--ws3=.*)
652
                    echo 80 "utilise World Scenery 3.0 (chemin par défaut $FGADDON/WS3.0)" > /dev/null
653
                    fgfs_args=("${(@)fgfs_args:#--terrasync-dir=$HOME/.fgfs/TerraSync}")
654
                    fgfs_args=("${(@)fgfs_args:#--enable-terrasync}")
655

            
656
                    if test "${fgfs_arg#*=}" = "$fgfs_arg"; then
657
                        fgfs_args+=("--fg-scenery=$FGADDON/WS3.0")
658
                    elif test -d "${fgfs_arg#*=}/vpb"; then
659
                        fgfs_args+=("--fg-scenery='${fgfs_arg#*=}'")
660
                    else
661
                        echo "${fgfs_arg#*=} isn't a valid WS3 directory"
662
                        return 1
663
                    fi
tweak WS3
Sébastien MARQUE authored on 2023-05-17
664
                    fgfs_args+=("--prop:bool:/scenery/use-vpb=true")
665
                    fgfs_args+=("--prop:int:/sim/rendering/max-paged-lod=300")
666
                    fgfs_args+=("--prop:double:/sim/rendering/plod-minimum-expiry-time-secs=30")
améliore l'utilisation de --...
Sébastien MARQUE authored on 2023-07-22
667
                    fgfs_args+=("--prop:int:/sim/rendering/database-pager/threads=8")
ajoute les options pour Worl...
Sébastien MARQUE authored on 2023-01-15
668
                    ;;
669
                --ortho)
670
                    echo 81 utilise Orthoscenery > /dev/null
ajoute le compositeur HDR (e...
Sébastien MARQUE authored on 2023-05-17
671
                    fgfs_args+=("--prop:bool:/sim/rendering/photoscenery/enabled=true")
672
                    ;;
673
                --hdr)
674
                    echo 82 utilise le compositor HDR > /dev/null
675
                    local compositor=Compositor/HDR/hdr
676
                    if test -r $fgfs_source/fgdata/$compositor.xml; then
677
                        fgfs_args+=("--compositor=$compositor")
678
                        fgfs_args+=("--prop:bool:/sim/rendering/osm-buildings=false")
679
                        fgfs_args+=("--prop:bool:/sim/rendering/random-buildings=false")
680
                    else
681
                        echo "Compositor $compositor inaccessible"
682
                    fi
ajoute les options pour Worl...
Sébastien MARQUE authored on 2023-01-15
683
                    ;;
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
684
                *)
améliore la vérification des...
Sébastien MARQUE authored on 2021-11-12
685
                    completion_source="$FGDIR/install/flightgear/share/zsh/site-functions/_fgfs"
686
                    if test -r "$completion_source"; then
l'option --prop:[] n'est pas...
Sébastien MARQUE authored on 2023-05-17
687
                        if egrep --quiet "^\s*'(${fgfs_arg%=*}=?|)\[" "$completion_source" \
688
                        || [[ ${fgfs_arg} =~ ^--prop(:(string|double|float|long|int|bool))?:/[[:print:]]+= ]]; then
améliore la vérification des...
Sébastien MARQUE authored on 2021-11-12
689
                            fgfs_args+=($fgfs_arg)
690
                        else
691
                            echo unknown option: ${fgfs_arg%=*}
692
                            return 1
693
                        fi
694
                    else
695
                        fgfs_args+=($fgfs_arg)
696
                    fi
697
                    ;;
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
698
            esac
699
        fi
700
    done
701
    unset fgfs_arg
702
    if [[ -n "$log_requested" && -z "${fgfs_args[(r)--igc=*]}" ]]; then
703
        fgfs_args+=(--igc=file,out,1,$(date +%Y%m%d-%H%M-${${${fgfs_args[(r)--aircraft=*]}#--aircraft=}:-$(sed -rn 's|^.+aircraft>(.+)</aircraft.+$|\1|p' $FGDIR/source/fgdata/defaults.xml)}.igc))
704
    fi
705

            
706
    ld_library_path
707

            
708
    fgfsrc=$HOME/.fgfs/fgfsrc
améliore l'affichage de la c...
Sébastien MARQUE authored on 2022-06-01
709
    echo ${fgfs_args[@]//$HOME/\$HOME} $(test -r $fgfsrc && sed -r "/^\s*(#|$)/d;s|$HOME|\$HOME|" $fgfsrc | tr '\n' ' ')
Using NVIDIA PRIME Render Of...
Sébastien MARQUE authored on 2023-07-15
710
    export ${DISCRETE_GPU[@]}
711
    $FGDIR/install/flightgear/bin/fgfs ${fgfs_args[@]}
712
    unset fgfs_args ${DISCRETE_GPU[@]%=*}
gère le montage par terrafs
Sébastien MARQUE authored on 2023-08-02
713

            
714
    if test ${mount_terrafs:-n} = y; then
715
        $HOME/.fgfs/mount.terrafs
déplacement depuis dépôt con...
Sébastien MARQUE authored on 2021-05-28
716
    fi
717
}