OSDN Git Service

[update] : Added vote package
authorhayao <shun819.mail@gmail.com>
Tue, 22 Dec 2020 11:28:26 +0000 (20:28 +0900)
committerhayao <shun819.mail@gmail.com>
Tue, 22 Dec 2020 11:28:26 +0000 (20:28 +0900)
wfa

diff --git a/wfa b/wfa
index 2c20361..8267664 100755 (executable)
--- a/wfa
+++ b/wfa
@@ -54,8 +54,9 @@ declare -A ja_JP=(
     ["Install dependent packages..."]="依存パッケージをインストールします..."
     ["Found %s"]="%s を見つけました"
     ["Packages to cleanBuild? [n] :"]="パッケージをクリーンビルドしますか? [n] :"
-    ["Could not find all required packages:\n  %s"]="必要なすべてのパッケージが見つかりませんでした     %s"
+    ["Could not find all required packages: %s"]="必要なすべてのパッケージが見つかりませんでした: %s"
     ["This is a feature that has not been implemented yet"]="まだ実装されていない機能です"
+    ["Package not found on AUR: %s"]="パッケージがAUR上から見つかりませんでした: "
 
     ["(Orphaned)"]="(メンテナ不在)"
     ["[Installed]"]="[インストール済み]"
@@ -590,6 +591,7 @@ usage (){
         echo
         echo "operations:"
         echo "    ${wfa_command} {-h --help}"
+        echo "    ${wfa_command} {-A --vote}"
         echo "    ${wfa_command} {-V --version}"
        #echo "    ${wfa_command} {-D --database}    <options> <package(s)>"
        #echo "    ${wfa_command} {-F --files}       [options] [package(s)]"
@@ -809,7 +811,7 @@ install_aur_package() {
     msg_info "Searching in AUR ..."
     local _aur_json=$("${curl_command}" ${curl_args} -sL "https://aur.archlinux.org/rpc/?v=5&type=search&by=name&arg=${_package}" | jq -r)
     if (( "$(echo "${_aur_json}" | jq -r ".resultcount")" == 0 )); then
-        msg_error "Could not find all required packages:\n     ${_package}"
+        msg_error "Could not find all required packages: %s" "${_package}"
         exit 1
     fi
 
@@ -964,7 +966,7 @@ search_aur_package() {
     local _aur_json=$("${curl_command}" ${curl_args} -sL "https://aur.archlinux.org/rpc/?v=5&type=search&by=name-desc&arg=${_package}" | jq -r )
     local _found_result_count="$(echo "${_aur_json}" | jq -r ".resultcount")"
     if (( "${_found_result_count}" == 0 )); then
-        msg_error "Could not find all required packages:\n     %s" "${_package}"
+        msg_error "Could not find all required packages: %s" "${_package}"
         exit 1
     fi
     _aur_json=$(echo "${_aur_json}" | jq -r ".results[]")
@@ -1097,9 +1099,46 @@ operation_sync(){
 }
 
 
+operation_vote() {
+    local _package _aur_json _found_result_count _pkgver _before_popularity _before_vote
+    for _package in ${specified_packages[@]}; do
+
+        # 存在するパッケージか確認
+        _aur_json=$("${curl_command}" ${curl_args} -sL "https://aur.archlinux.org/rpc/?v=5&type=search&by=name-desc&arg=${_package}" | jq -r)
+        _found_result_count="$(echo "${_aur_json}" | jq -r ".resultcount")"
+        _aur_json=$(echo "${_aur_json}" | jq -r ".results[] | select(.Name == \"${_package}\")")
+        if (( "${_found_result_count}" == 0 )) || [[ -z "${_aur_json}" ]]; then
+            msg_error "Package not found on AUR: %s" "${_package}"
+            exit 1
+        fi
+
+        # jsonから値を取り出して整形
+        _pkgver="$(echo "${_aur_json}" | jq -r ".Version" )"
+        _before_popularity="$(printf "%g\n" "$(echo "${_aur_json}" | jq -r ".Popularity" )" | awk '{printf("%4.2f", $1)}')"
+        _before_vote="$(echo "${_aur_json}" | jq -r ".NumVotes" )"
+
+        # 投票を操作
+        if [[ "$(aurvote --check "${_package}")" = "not voted" ]]; then
+            msg_info "Voted for %s" "${_package}"
+            aurvote --vote "${_package}" 1> /dev/null
+        else
+            msg_info "Unvoted for %s" "${_package}"
+            aurvote --unvote "${_package}" 1> /dev/null
+        fi
+
+        # 投票後の値を取得
+        _aur_json=$("${curl_command}" ${curl_args} -sL "https://aur.archlinux.org/rpc/?v=5&type=search&by=name-desc&arg=${_package}" | jq -r ".results[] | select(.Name == \"${_package}\")")
+        _after_popularity="$(printf "%g\n" "$(echo "${_aur_json}" | jq -r ".Popularity" )" | awk '{printf("%4.2f", $1)}')"
+        _after_vote="$(echo "${_aur_json}" | jq -r ".NumVotes" )"
+
+        # 結果を出力
+        msg_info "%s %s (+%s) → (+%s)" "$(text -b "${_package}")" "$(text -c cyan "${_pkgver}")" "$(text -b "${_before_vote} ${_before_popularity}")" "$(text -b "${_after_vote} ${_after_popularity}")"
+    done
+}
+
 # Parse options
 ARGUMENT="${@}"
-_opt_short="QRShVdb:aysuc"q
+_opt_short="AQRShVdb:aysuc"q
 _opt_long="query,remove,sync,help,version,debug,dbpath:,aururl,aur,noconfirm,config:,makepkg:,mflags:,pacman:,git:,gitflags:,gpg:,gpgflags:,makepkgconf:,nomakepkgconf,nodeps,refresh,bash-debug,msg-debug,sysupgrade,color:,nocolor,clean,quiet,arch:,confirm,disable-download-timeout,curl:,curlflags:"
 
 OPT=$(getopt -o ${_opt_short} -l ${_opt_long} -- ${ARGUMENT})
@@ -1111,6 +1150,10 @@ msg_debug "Argument: ${OPT}"
 
 while :; do
     case ${1} in
+        -A | --vote)
+            set_operation "vote"
+            shift 1
+            ;;
         -Q | --query)
             set_operation "query"
             shift 1
@@ -1307,6 +1350,7 @@ elif (( "${option_y_count}" >= 2 )); then
     run_pacman -Syy
 fi
 
+# set_operationで設定された操作を実行
 case "${operation}" in
     "version")
         operation_version
@@ -1317,6 +1361,9 @@ case "${operation}" in
     "remove")
         operation_remove
         ;;
+    "vote")
+        operation_vote
+        ;;
     "none")
         exit 0
         ;;