wok-next annotate tramys-server/stuff/tramys.cgi @ rev 17082

Up: tramys-server and tramys-client (140824).
author Aleksej Bobylev <al.bobylev@gmail.com>
date Sun Aug 24 22:46:59 2014 +0300 (2014-08-24)
parents 096a77a2021d
children
rev   line source
al@17081 1 #!/bin/sh
al@17081 2 # tramys - TRAnslate MY Slitaz. Server solution
al@17081 3 # Tool for managing translation files for SliTaz GNU/Linux
al@17081 4 # Aleksej Bobylev <al.bobylev@gmail.com>, 2014
al@17081 5
al@17082 6 # How to use:
al@17082 7 # 1. tramys2.cgi?lang=$LANG&rel=$RELEASE to generate archive
al@17081 8 # Pass packages list in HTTP_USER_AGENT header
al@17081 9 # (seems it have no restrictions for length and no encoded symbols ' ' and '+')
al@17082 10 # 2. tramys2.cgi?dl=$DL_KEY to download archive (user can cancel downloading)
al@17081 11
al@17081 12 . /usr/bin/httpd_helper.sh
al@17081 13
al@17081 14 WORKING=$(mktemp -d)
al@17081 15 DATADIR=/home/lexeii/Public/tramys
al@17081 16
al@17082 17 # hide script
al@17082 18 if [ "x$(GET lang)$(GET rel)$(GET dl)" == "x" ]; then
al@17082 19 echo -e "HTTP/1.1 404 Not Found\nContent-Type: text/html\n\n<!DOCTYPE html><html><head><title>404 - Not Found</title></head><body><h1>404 - Not Found</h1></body></html>"
al@17082 20 exit
al@17082 21 fi
al@17082 22
al@17082 23 # begin: compress and give to client
al@17082 24 if [ "x$(GET dl)" != "x" ]; then
al@17082 25 WORKING="/tmp/tmp.$(echo $(GET dl) | tr -cd 'A-Za-z0-9')" # avoid relative paths
al@17082 26 cat <<EOT
al@17082 27 Content-Type: application/x-compressed-tar
al@17082 28 Content-Length: $(stat -c %s $WORKING.tgz)
al@17082 29 Content-Disposition: attachment; filename=tramys.tgz
al@17082 30
al@17082 31 EOT
al@17082 32 cat $WORKING.tgz
al@17082 33 rm -f $WORKING.tgz
al@17082 34 exit 0
al@17082 35 fi
al@17082 36 # end: compress and give to client
al@17082 37
al@17082 38
al@17081 39 # prepare list for search
al@17081 40 # original GNU gettext searches precisely in this order
al@17081 41 locales_list() {
al@17081 42 LL=$(echo $1 | sed 's|^\([^_.@]*\).*$|\1|')
al@17081 43 CC=$(echo $1 | sed -n '/_/s|^[^_]*\(_[^.@]*\).*$|\1|p')
al@17081 44 EE=$(echo $1 | sed -n '/./s|^[^\.]*\(\.[^@]*\).*$|\1|p')
al@17081 45 VV=$(echo $1 | sed -n '/@/s|^[^@]*\(@.*\)$|\1|p')
al@17081 46 ee=$(echo $EE | tr A-Z a-z | tr -cd a-z0-9); [ "$ee" ] && ee=.$ee
al@17081 47 [ "x$EE" == "x$ee" ] && ee=''
al@17081 48
al@17081 49 [ "$CC" -a "$EE" -a "$VV" ] && echo -n "$LL$CC$EE$VV "
al@17081 50 [ "$CC" -a "$ee" -a "$VV" ] && echo -n "$LL$CC$ee$VV "
al@17081 51 [ "$CC" -a "$VV" ] && echo -n "$LL$CC$VV "
al@17081 52 [ "$EE" -a "$VV" ] && echo -n "$LL$EE$VV "
al@17081 53 [ "$ee" -a "$VV" ] && echo -n "$LL$ee$VV "
al@17081 54 [ "$VV" ] && echo -n "$LL$VV "
al@17081 55 [ "$CC" -a "$EE" ] && echo -n "$LL$CC$EE "
al@17081 56 [ "$CC" -a "$ee" ] && echo -n "$LL$CC$ee "
al@17081 57 [ "$CC" ] && echo -n "$LL$CC "
al@17081 58 [ "$EE" ] && echo -n "$LL$EE "
al@17081 59 [ "$ee" ] && echo -n "$LL$ee "
al@17081 60 echo "$LL"
al@17081 61 }
al@17081 62 MY_LOCALES=$(locales_list $(GET lang))
al@17081 63
al@17081 64 # constants to use in lists
al@17081 65 US="/usr/share"
al@17081 66 LC="LC_MESSAGES"
al@17081 67 PY="/usr/lib/python2.7/site-packages"
al@17081 68 R="/usr/lib/R/library"
al@17081 69 RT="$R/translations/%/$LC"
al@17081 70
al@17082 71 # supported 4.0 (as stable now) an cooking (rolling, 5.0)
al@17082 72 # don't know what to do with "arm" and "x86_64" woks
al@17082 73 case $(GET rel) in
al@17082 74 4*) PREFIX="stable"; WOK="stable" ;;
al@17082 75 *) PREFIX=""; WOK="cooking" ;;
al@17082 76 esac
al@17082 77 WOK="/home/slitaz/$WOK/chroot/home/slitaz/wok"
al@17082 78
al@17082 79 PKGNUM=$(echo $HTTP_USER_AGENT | wc -w)
al@17082 80 NUM=1
al@17082 81
al@17082 82 echo -e "Content-Type: text/plain\n\n" # to Yad client
al@17082 83 echo "#Number of packages: $PKGNUM"
al@17082 84 echo "#Searching in progress..."
al@17082 85
al@17081 86 for P in $HTTP_USER_AGENT; do
al@17081 87
al@17082 88 echo "$((100*$NUM/$PKGNUM))" # percentage to Yad client
al@17082 89 NUM=$(($NUM+1))
al@17082 90
al@17081 91 for list_type in mo qm; do
al@17081 92 IFS=$'\n'
al@17082 93 for line in $(grep -e "^$P " $DATADIR/$PREFIX$list_type.list); do
al@17081 94 locales=$(echo $line | cut -d' ' -f2)
al@17081 95 names=$(echo $line | cut -d' ' -f3)
al@17081 96 [ "x$names" == "x" ] && names=$P
al@17081 97 pathes=$(echo $line | cut -d' ' -f4)
al@17081 98 [ "x$pathes" == "x" ] && pathes="$US/locale/%/$LC"
al@17081 99
al@17081 100 IFS=' '
al@17081 101 for locale in $MY_LOCALES; do
al@17081 102 if $(echo " $locales " | grep -q " $locale "); then
al@17081 103
al@17081 104 for name in $names; do
al@17081 105 for path in $pathes; do
al@17081 106 eval "fullname=${path//%/$locale}/${name//%/$locale}.$list_type"
al@17081 107 mkdir -p $WORKING$(dirname $fullname)
al@17082 108 cp -pf $WOK/$P/install$fullname $WORKING$fullname
al@17081 109 done
al@17081 110 done
al@17081 111 break
al@17081 112 fi
al@17081 113 done
al@17081 114 done
al@17081 115 done
al@17081 116 done
al@17081 117
al@17082 118 echo "#" # to Yad client log
al@17082 119 echo "#Preparing archive. Please wait"
al@17082 120
al@17081 121 busybox tar -czf $WORKING.tgz -C $WORKING .
al@17082 122 rm -rf $WORKING
al@17081 123
al@17082 124 echo "#" # to Yad client log
al@17082 125 echo "#Done!"
al@17082 126 echo "#Now you can proceed to downloading"
al@17082 127 echo "#and installing your translations."
al@17082 128 echo "#File size: $(stat -c %s $WORKING.tgz)"
al@17081 129
al@17082 130 echo "${WORKING#*.}" # give download key to Yad client
al@17082 131 exit 0