# HG changeset patch # User Aleksej Bobylev # Date 1419688952 -7200 # Node ID a16752d6a1b1842b28d3ef190a669078933849e1 # Parent f32370a207125afef25f54942ad44eab00d4dd39 pkgs.cgi: empty "cat" shows list of categories; introduce "tag": list packages by tag, or list of all tags if empty list packages by tag not shows installed/blocked at the moment; "tag cloud" will be soon diff -r f32370a20712 -r a16752d6a1b1 tazpanel/pkgs.cgi --- a/tazpanel/pkgs.cgi Fri Dec 26 15:14:01 2014 +0200 +++ b/tazpanel/pkgs.cgi Sat Dec 27 16:02:32 2014 +0200 @@ -306,21 +306,23 @@ # Print links to the pages pager() { - awk -F'"' -vpage="$page" -vcached="$1" -vnum_lines="$(wc -l < $1)" -vtext="$(_ 'Pages:') " -vurl="cat=$category&repo=$repo&page=" ' + awk -F'"' -vpage="$page" -vnum_lines="$(wc -l < $1)" -vtext="$(_ 'Pages:') " -vurl="?cat=$category&repo=$repo&page=" ' BEGIN{ num_pages = int(num_lines / 100) + (num_lines % 100 != 0) if (num_pages != 1) printf "

%s", text } { if (num_pages == 1) exit - p = int(NR/100) + 1 - - if (NR%100 == 1) printf "%s ", $6, p - 1 + r = NR % 100 + if (r == 1) { + p = int(NR / 100) + 1 + printf "%s ", $6, int(NR / 100) } END{ if (num_pages == 1) exit - if (NR%100 != 0) printf "%s\">%s", $6, p + if (r != 0) printf "%s\">%s", $6, int(NR / 100) + 1 print "

" }' $1 } @@ -332,7 +334,7 @@ if [ -n "$1" ]; then echo -n "$2" echo $1 | tr ' ' $'\n' | awk -vt="$3" '{ - printf "%s ", t?("?"t"="):"", gensub(/\+/, "%2B", "g", $1), $1 + printf "%s ", t, gensub(/\+/, "%2B", "g", $1), $1 }' echo "" fi @@ -453,18 +455,39 @@ *\ cat\ *) # - # List all available packages by category on mirror. Listing all - # packages is too resource intensive and not useful. + # List all available packages by category on mirror. # cd $PKGS_DB repo=$(GET repo) category=$(GET cat) - [ -z "$category" ] && category="base-system" search_form sidebar | sed "s/active_$category/active/;s/repo_$repo/active/" - LOADING_MSG="$(_ 'Listing packages...')" - loading_msg - cat << EOT + if [ -z "$category" ] || [ "$category" == 'cat' ]; then + cat << EOT +

$(_ 'Categories list')

+ + + + +EOT + { + awk -F$'\t' '{print $3}' $PKGS_DB/packages.info | sort | uniq -c + awk -F$'\t' '{print $3}' $PKGS_DB/installed.info | sed 's|.*|& i|' | sort | uniq -c + } | sort -k2,2 | awk ' + { + c [$2] = "." + if ($3) { i[$2] = $1; } else { m[$2] = $1; } + } + END { + for (n in c) print n, m[n], i[n] + }' | sort | awk '{ + printf "", $1, $1, $2, $3 + }' + echo '
$(_ 'Category')$(_ 'Repository')$(_ 'Installed')
%s%d%d
' + else + LOADING_MSG="$(_ 'Listing packages...')" + loading_msg + cat << EOT

$(_ 'Category: %s' $category)

@@ -482,35 +505,35 @@ EOT - for i in $(repo_list ""); do - if [ "$repo" != "Public" ]; then - Repo_Name="$(repo_name $i)" - cat << EOT + for i in $(repo_list ""); do + if [ "$repo" != "Public" ]; then + Repo_Name="$(repo_name $i)" + cat << EOT

$(_ 'Repository: %s' $Repo_Name)

EOT - fi + fi - case $category in - extra) - echo '' - table_head - echo '' - NA="$(_n 'n/a')" - for pkg in $(cat $i/extra.list); do - PKG="$(grep ^$pkg$'\t' $i/installed.info)" - if [ -n "$PKG" ]; then - echo "$PKG" - else - echo "$pkg $NA - $NA http://mirror.slitaz.org/packages/get/$pkg - - -" - fi - done | parse_packages_info - echo "
" - ;; - *) - cached="$CACHE_DIR/$repo-$category" - make_mixed_list | sort -t$'\t' -k1,1 | awk -F$'\t' -vc="$category" ' + case $category in + extra) + echo '' + table_head + echo '' + NA="$(_n 'n/a')" + for pkg in $(cat $i/extra.list); do + PKG="$(grep ^$pkg$'\t' $i/installed.info)" + if [ -n "$PKG" ]; then + echo "$PKG" + else + echo "$pkg $NA - $NA http://mirror.slitaz.org/packages/get/$pkg - - -" + fi + done | parse_packages_info + echo "
" + ;; + *) + cached="$CACHE_DIR/$repo-$category" + make_mixed_list | sort -t$'\t' -k1,1 | tee /tmp/mixed_list | awk -F$'\t' -vc="$category" ' { - if (PKG && PKG != $1) { + if (PKG && (PKG != $1)) { if (CAT) { if (DSCL) DSC = DSCL printf "%s%s%s\n", PKG, INS, BLK, gensub(/\+/, "%2B", "g", PKG), PKG, VER, DSC, WEB @@ -527,21 +550,23 @@ if (! INS) { PKG = $1; VER = $2; DSC = $4; WEB = $5 } } }' > $cached - page=$(GET page); [ -z "$page" ] && page=1 - pager="$(pager $cached)" + page=$(GET page); [ -z "$page" ] && page=1 + pager="$(pager $cached)" - echo "$pager" - echo '' - table_head - echo '' - tail -n+$((($page-1)*100+1)) $cached | head -n100 - echo "
" - echo "$pager" - rm -f $cached - ;; - esac - done - echo '
' ;; + echo "$pager" + echo '' + table_head + echo '' + tail -n+$((($page-1)*100+1)) $cached | head -n100 + echo "
" + echo "$pager" + rm -f $cached + ;; + esac + done + echo '' + fi + ;; *\ search\ *) @@ -1131,6 +1156,31 @@ ;; + *\ tag\ *) + # + # Show packages with matching tag; show tag cloud + # + search_form + sidebar + tag=$(GET tag) + if [ -n "$tag" ]; then + echo "

$(_ 'Tag "%s"' $tag)

" + echo '' + table_head + echo '' + awk -F$'\t' '$6 ~ /(^| )'$tag'( |$)/{ + printf "\n", $1, INS, BLK, gensub(/\+/, "%2B", "g", $1), $1, $2, $4, $5 + }' $PKGS_DB/packages.info + echo "
%s%s%s
" + else + echo "

$(_ 'Tags list')

" + echo "

" + awk -F$'\t' '{if($6){print $6}}' $PKGS_DB/packages.info | tr ' ' $'\n' | sort -u | sed 's|.*|& |' + echo "

" + fi + ;; + + *) # # Default to summary