diff options
| author | 2019-04-18 20:27:35 +0530 | |
|---|---|---|
| committer | 2019-04-18 20:32:53 +0530 | |
| commit | 5cf34717161bd866a634d8a9ad209afb4004857b (patch) | |
| tree | e63a1f4849c7ebb7658725a4369caa48a0710af4 /user-scripts/imgur | |
| parent | 12ce9451ee1c24ad245d33e8944ba77a1108b5b2 (diff) | |
| download | nnn-5cf34717161bd866a634d8a9ad209afb4004857b.tar.gz | |
Plugins!
Diffstat (limited to 'user-scripts/imgur')
| -rwxr-xr-x | user-scripts/imgur | 557 |
1 files changed, 0 insertions, 557 deletions
diff --git a/user-scripts/imgur b/user-scripts/imgur deleted file mode 100755 index 0a660fc..0000000 --- a/user-scripts/imgur +++ /dev/null @@ -1,557 +0,0 @@ -#!/usr/bin/env bash -# https://github.com/jomo/imgur-screenshot -# https://imgur.com/tools -# -# Slightly modified for `nnn` integration -# -# Shell: bash -# Description: Upload an image file to imgur - -if [ "${1}" = "--debug" ]; then - echo "########################################" - echo "Enabling debug mode" - echo "Please remove credentials before pasting" - echo "########################################" - echo "" - uname -a - for arg in ${0} "${@}"; do - echo -n "'${arg}' " - done - echo -e "\n" - shift - set -x -fi - -current_version="v1.7.4" - -function is_mac() { - uname | grep -q "Darwin" -} - -### IMGUR-SCREENSHOT DEFAULT CONFIG #### - -# You can override the config in ~/.config/imgur-screenshot/settings.conf - -imgur_anon_id="ea6c0ef2987808e" -imgur_icon_path="${HOME}/Pictures/imgur.png" - -imgur_acct_key="" -imgur_secret="" -login="false" -album_title="" -album_id="" -credentials_file="${HOME}/.config/imgur-screenshot/credentials.conf" - -file_name_format="imgur-%Y_%m_%d-%H:%M:%S.png" # when using scrot, must end with .png! -file_dir="${HOME}/Pictures" - -upload_connect_timeout="5" -upload_timeout="120" -upload_retries="1" - -if is_mac; then - screenshot_select_command="screencapture -i %img" - screenshot_window_command="screencapture -iWa %img" - screenshot_full_command="screencapture %img" - open_command="open %url" -else - screenshot_select_command="scrot -s %img" - screenshot_window_command="scrot %img" - screenshot_full_command="scrot %img" - open_command="xdg-open %url" -fi -open="true" - -mode="select" -edit_command="gimp %img" -edit="false" -exit_on_album_creation_fail="true" - -log_file="${HOME}/.imgur-screenshot.log" - -auto_delete="" -copy_url="true" -keep_file="true" -check_update="true" - -# NOTICE: if you make changes here, also edit the docs at -# https://github.com/jomo/imgur-screenshot/wiki/Config - -# You can override the config in ~/.config/imgur-screenshot/settings.conf - -############## END CONFIG ############## - -settings_path="${HOME}/.config/imgur-screenshot/settings.conf" -if [ -f "${settings_path}" ]; then - source "${settings_path}" -fi - -# dependency check -if [ "${1}" = "--check" ]; then - (which grep &>/dev/null && echo "OK: found grep") || echo "ERROR: grep not found" - if is_mac; then - if which growlnotify &>/dev/null; then - echo "OK: found growlnotify" - elif which terminal-notifier &>/dev/null; then - echo "OK: found terminal-notifier" - else - echo "ERROR: growlnotify nor terminal-notifier found" - fi - (which screencapture &>/dev/null && echo "OK: found screencapture") || echo "ERROR: screencapture not found" - (which pbcopy &>/dev/null && echo "OK: found pbcopy") || echo "ERROR: pbcopy not found" - else - (which notify-send &>/dev/null && echo "OK: found notify-send") || echo "ERROR: notify-send (from libnotify-bin) not found" - (which scrot &>/dev/null && echo "OK: found scrot") || echo "ERROR: scrot not found" - (which xclip &>/dev/null && echo "OK: found xclip") || echo "ERROR: xclip not found" - fi - (which curl &>/dev/null && echo "OK: found curl") || echo "ERROR: curl not found" - exit 0 -fi - - -# notify <'ok'|'error'> <title> <text> -function notify() { - if is_mac; then - if which growlnotify &>/dev/null; then - growlnotify --icon "${imgur_icon_path}" --iconpath "${imgur_icon_path}" --title "${2}" --message "${3}" - else - terminal-notifier -appIcon "${imgur_icon_path}" -contentImage "${imgur_icon_path}" -title "imgur: ${2}" -message "${3}" - fi - else - if [ "${1}" = "error" ]; then - notify-send -a ImgurScreenshot -u critical -c "im.error" -i "${imgur_icon_path}" -t 500 "imgur: ${2}" "${3}" - else - notify-send -a ImgurScreenshot -u low -c "transfer.complete" -i "${imgur_icon_path}" -t 500 "imgur: ${2}" "${3}" - fi - fi -} - -function take_screenshot() { - echo "Please select area" - is_mac || sleep 0.1 # https://bbs.archlinux.org/viewtopic.php?pid=1246173#p1246173 - - cmd="screenshot_${mode}_command" - cmd=${!cmd//\%img/${1}} - - shot_err="$(${cmd} &>/dev/null)" #takes a screenshot with selection - if [ "${?}" != "0" ]; then - echo "Failed to take screenshot '${1}': '${shot_err}'. For more information visit https://github.com/jomo/imgur-screenshot/wiki/Troubleshooting" | tee -a "${log_file}" - notify error "Something went wrong :(" "Information has been logged" - exit 1 - fi -} - -function check_for_update() { - # exit non-zero on HTTP error, output only the body (no stats) but output errors, follow redirects, output everything to stdout - remote_version="$(curl --compressed -fsSL --stderr - "https://api.github.com/repos/jomo/imgur-screenshot/releases" | egrep -m 1 --color 'tag_name":\s*".*"' | cut -d '"' -f 4)" - if [ "${?}" -eq "0" ]; then - if [ ! "${current_version}" = "${remote_version}" ] && [ ! -z "${current_version}" ] && [ ! -z "${remote_version}" ]; then - echo "Update found!" - echo "Version ${remote_version} is available (You have ${current_version})" - notify ok "Update found" "Version ${remote_version} is available (You have ${current_version}). https://github.com/jomo/imgur-screenshot" - echo "Check https://github.com/jomo/imgur-screenshot/releases/${remote_version} for more info." - elif [ -z "${current_version}" ] || [ -z "${remote_version}" ]; then - echo "Invalid empty version string" - echo "Current (local) version: '${current_version}'" - echo "Latest (remote) version: '${remote_version}'" - else - echo "Version ${current_version} is up to date." - fi - else - echo "Failed to check for latest version: ${remote_version}" - fi -} - -function check_oauth2_client_secrets() { - if [ -z "${imgur_acct_key}" ] || [ -z "${imgur_secret}" ]; then - echo "In order to upload to your account, register a new application at:" - echo "https://api.imgur.com/oauth2/addclient" - echo "Select 'OAuth 2 authorization without a callback URL'" - echo "Then, set the imgur_acct_key (Client ID) and imgur_secret in your config." - exit 1 - fi -} - -function load_access_token() { - token_expire_time=0 - # check for saved access_token and its expiration date - if [ -f "${credentials_file}" ]; then - source "${credentials_file}" - fi - current_time="$(date +%s)" - preemptive_refresh_time="$((10*60))" - expired="$((current_time > (token_expire_time - preemptive_refresh_time)))" - if [ ! -z "${refresh_token}" ]; then - # token already set - if [ "${expired}" -eq "0" ]; then - # token expired - refresh_access_token "${credentials_file}" - fi - else - acquire_access_token "${credentials_file}" - fi -} - -function acquire_access_token() { - check_oauth2_client_secrets - # prompt for a PIN - authorize_url="https://api.imgur.com/oauth2/authorize?client_id=${imgur_acct_key}&response_type=pin" - echo "Go to" - echo "${authorize_url}" - echo "and grant access to this application." - read -rp "Enter the PIN: " imgur_pin - - if [ -z "${imgur_pin}" ]; then - echo "PIN not entered, exiting" - exit 1 - fi - - # exchange the PIN for access token and refresh token - response="$(curl --compressed -fsSL --stderr - \ - -F "client_id=${imgur_acct_key}" \ - -F "client_secret=${imgur_secret}" \ - -F "grant_type=pin" \ - -F "pin=${imgur_pin}" \ - https://api.imgur.com/oauth2/token)" - save_access_token "${response}" "${1}" -} - -function refresh_access_token() { - check_oauth2_client_secrets - token_url="https://api.imgur.com/oauth2/token" - # exchange the refresh token for access_token and refresh_token - response="$(curl --compressed -fsSL --stderr - -F "client_id=${imgur_acct_key}" -F "client_secret=${imgur_secret}" -F "grant_type=refresh_token" -F "refresh_token=${refresh_token}" "${token_url}")" - if [ ! "${?}" -eq "0" ]; then - # curl failed - handle_upload_error "${response}" "${token_url}" - exit 1 - fi - save_access_token "${response}" "${1}" -} - -function save_access_token() { - if ! grep -q "access_token" <<<"${1}"; then - # server did not send access_token - echo "Error: Something is wrong with your credentials:" - echo "${1}" - exit 1 - fi - - access_token="$(egrep -o 'access_token":".*"' <<<"${1}" | cut -d '"' -f 3)" - refresh_token="$(egrep -o 'refresh_token":".*"' <<<"${1}" | cut -d '"' -f 3)" - expires_in="$(egrep -o 'expires_in":[0-9]*' <<<"${1}" | cut -d ':' -f 2)" - token_expire_time="$(( $(date +%s) + expires_in ))" - - # create dir if not exist - mkdir -p "$(dirname "${2}")" 2>/dev/null - touch "${2}" && chmod 600 "${2}" - cat <<EOF > "${2}" -access_token="${access_token}" -refresh_token="${refresh_token}" -token_expire_time="${token_expire_time}" -EOF -} - -function fetch_account_info() { - response="$(curl --compressed --connect-timeout "${upload_connect_timeout}" -m "${upload_timeout}" --retry "${upload_retries}" -fsSL --stderr - -H "Authorization: Bearer ${access_token}" https://api.imgur.com/3/account/me)" - if egrep -q '"success":\s*true' <<<"${response}"; then - username="$(egrep -o '"url":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)" - echo "Logged in as ${username}." - echo "https://${username}.imgur.com" - else - echo "Failed to fetch info: ${response}" - fi -} - -function delete_image() { - response="$(curl --compressed -X DELETE -fsSL --stderr - -H "Authorization: Client-ID ${1}" "https://api.imgur.com/3/image/${2}")" - if egrep -q '"success":\s*true' <<<"${response}"; then - echo "Image successfully deleted (delete hash: ${2})." >> "${3}" - else - echo "The Image could not be deleted: ${response}." >> "${3}" - fi -} - -function upload_authenticated_image() { - echo "Uploading '${1}'..." - title="$(echo "${1}" | rev | cut -d "/" -f 1 | cut -d "." -f 2- | rev)" - if [ -n "${album_id}" ]; then - response="$(curl --compressed --connect-timeout "${upload_connect_timeout}" -m "${upload_timeout}" --retry "${upload_retries}" -fsSL --stderr - -F "title=${title}" -F "image=@\"${1}\"" -F "album=${album_id}" -H "Authorization: Bearer ${access_token}" https://api.imgur.com/3/image)" - else - response="$(curl --compressed --connect-timeout "${upload_connect_timeout}" -m "${upload_timeout}" --retry "${upload_retries}" -fsSL --stderr - -F "title=${title}" -F "image=@\"${1}\"" -H "Authorization: Bearer ${access_token}" https://api.imgur.com/3/image)" - fi - - # JSON parser premium edition (not really) - if egrep -q '"success":\s*true' <<<"${response}"; then - img_id="$(egrep -o '"id":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)" - img_ext="$(egrep -o '"link":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4 | rev | cut -d "." -f 1 | rev)" # "link" itself has ugly '\/' escaping and no https! - del_id="$(egrep -o '"deletehash":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)" - - if [ ! -z "${auto_delete}" ]; then - export -f delete_image - echo "Deleting image in ${auto_delete} seconds." - nohup /bin/bash -c "sleep ${auto_delete} && delete_image ${imgur_anon_id} ${del_id} ${log_file}" & - fi - - handle_upload_success "https://i.imgur.com/${img_id}.${img_ext}" "https://imgur.com/delete/${del_id}" "${1}" - else # upload failed - err_msg="$(egrep -o '"error":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)" - test -z "${err_msg}" && err_msg="${response}" - handle_upload_error "${err_msg}" "${1}" - fi -} - -function upload_anonymous_image() { - echo "Uploading '${1}'..." - title="$(echo "${1}" | rev | cut -d "/" -f 1 | cut -d "." -f 2- | rev)" - if [ -n "${album_id}" ]; then - response="$(curl --compressed --connect-timeout "${upload_connect_timeout}" -m "${upload_timeout}" --retry "${upload_retries}" -fsSL --stderr - -H "Authorization: Client-ID ${imgur_anon_id}" -F "title=${title}" -F "image=@\"${1}\"" -F "album=${album_id}" https://api.imgur.com/3/image)" - else - response="$(curl --compressed --connect-timeout "${upload_connect_timeout}" -m "${upload_timeout}" --retry "${upload_retries}" -fsSL --stderr - -H "Authorization: Client-ID ${imgur_anon_id}" -F "title=${title}" -F "image=@\"${1}\"" https://api.imgur.com/3/image)" - fi - # JSON parser premium edition (not really) - if egrep -q '"success":\s*true' <<<"${response}"; then - img_id="$(egrep -o '"id":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)" - img_ext="$(egrep -o '"link":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4 | rev | cut -d "." -f 1 | rev)" # "link" itself has ugly '\/' escaping and no https! - del_id="$(egrep -o '"deletehash":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)" - - if [ ! -z "${auto_delete}" ]; then - export -f delete_image - echo "Deleting image in ${auto_delete} seconds." - nohup /bin/bash -c "sleep ${auto_delete} && delete_image ${imgur_anon_id} ${del_id} ${log_file}" & - fi - - handle_upload_success "https://i.imgur.com/${img_id}.${img_ext}" "https://imgur.com/delete/${del_id}" "${1}" - else # upload failed - err_msg="$(egrep -o '"error":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)" - test -z "${err_msg}" && err_msg="${response}" - handle_upload_error "${err_msg}" "${1}" - fi -} - -function handle_upload_success() { - echo "" - echo "image link: ${1}" - echo "delete link: ${2}" - - if [ "${copy_url}" = "true" ] && [ -z "${album_title}" ]; then - if is_mac; then - echo -n "${1}" | pbcopy - else - echo -n "${1}" | xclip -selection clipboard - fi - echo "URL copied to clipboard" - fi - - # print to log file: image link, image location, delete link - echo -e "${1}\t${3}\t${2}" >> "${log_file}" - - notify ok "Upload done!" "${1}" - -# if [ ! -z "${open_command}" ] && [ "${open}" = "true" ]; then -# open_cmd=${open_command//\%url/${1}} -# open_cmd=${open_cmd//\%img/${2}} -# echo "Opening '${open_cmd}'" -# eval "${open_cmd}" -# fi -} - -function handle_upload_error() { - error="Upload failed: \"${1}\"" - echo "${error}" - echo -e "Error\t${2}\t${error}" >> "${log_file}" - notify error "Upload failed :(" "${1}" -} - -function handle_album_creation_success() { - echo "" - echo "Album link: ${1}" - echo "Delete hash: ${2}" - echo "" - - notify ok "Album created!" "${1}" - - if [ "${copy_url}" = "true" ]; then - if is_mac; then - echo -n "${1}" | pbcopy - else - echo -n "${1}" | xclip -selection clipboard - fi - echo "URL copied to clipboard" - fi - - # print to log file: album link, album title, delete hash - echo -e "${1}\t\"${3}\"\t${2}" >> "${log_file}" -} - -function handle_album_creation_error() { - error="Album creation failed: \"${1}\"" - echo -e "Error\t${2}\t${error}" >> "${log_file}" - notify error "Album creation failed :(" "${1}" - if [ ${exit_on_album_creation_fail} ]; then - exit 1 - fi -} - -while [ ${#} != 0 ]; do - case "${1}" in - -h | --help) - echo "usage: ${0} [--debug] [-c | --check | -v | -h | -u]" - echo " ${0} [--debug] [option]... [file]..." - echo "" - echo " --debug Enable debugging, must be first option" - echo " -h, --help Show this help, exit" - echo " -v, --version Show current version, exit" - echo " --check Check if all dependencies are installed, exit" - echo " -c, --connect Show connected imgur account, exit" - echo " -o, --open <true|false> Override 'open' config" - echo " -e, --edit <true|false> Override 'edit' config" - echo " -i, --edit-command <command> Override 'edit_command' config (include '%img'), sets --edit 'true'" - echo " -l, --login <true|false> Override 'login' config" - echo " -a, --album <album_title> Create new album and upload there" - echo " -A, --album-id <album_id> Override 'album_id' config" - echo " -k, --keep-file <true|false> Override 'keep_file' config" - echo " -d, --auto-delete <s> Automatically delete image after <s> seconds" - echo " -u, --update Check for updates, exit" - echo " file Upload file instead of taking a screenshot" - exit 0;; - -v | --version) - echo "${current_version}" - exit 0;; - -s | --select) - mode="select" - shift;; - -w | --window) - mode="window" - shift;; - -f | --full) - mode="full" - shift;; - -o | --open) - open="${2}" - shift 2;; - -e | --edit) - edit="${2}" - shift 2;; - -i | --edit-command) - edit_command="${2}" - edit="true" - shift 2;; - -l | --login) - login="${2}" - shift 2;; - -c | --connect) - load_access_token - fetch_account_info - exit 0;; - -a | --album) - album_title="${2}" - shift 2;; - -A | --album-id) - album_id="${2}" - shift 2;; - -k | --keep-file) - keep_file="${2}" - shift 2;; - -d | --auto-delete) - auto_delete="${2}" - shift 2;; - -u | --update) - check_for_update - exit 0;; - *) - upload_files=("${@}") - break;; - esac -done - -if [ "${login}" = "true" ]; then - # load before changing directory - load_access_token -fi - - -if [ -n "${album_title}" ]; then - if [ "${login}" = "true" ]; then - response="$(curl -fsSL --stderr - \ - -F "title=${album_title}" \ - -H "Authorization: Bearer ${access_token}" \ - https://api.imgur.com/3/album)" - else - response="$(curl -fsSL --stderr - \ - -F "title=${album_title}" \ - -H "Authorization: Client-ID ${imgur_anon_id}" \ - https://api.imgur.com/3/album)" - fi - if egrep -q '"success":\s*true' <<<"${response}"; then # Album creation successful - echo "Album '${album_title}' successfully created" - album_id="$(egrep -o '"id":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)" - del_id="$(egrep -o '"deletehash":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)" - handle_album_creation_success "http://imgur.com/a/${album_id}" "${del_id}" "${album_title}" - - if [ "${login}" = "false" ]; then - album_id="${del_id}" - fi - else # Album creation failed - err_msg="$(egrep -o '"error":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)" - test -z "${err_msg}" && err_msg="${response}" - handle_album_creation_error "${err_msg}" "${album_title}" - fi -fi - -if [ -z "${upload_files}" ]; then - upload_files[0]="" -fi - -for upload_file in "${upload_files[@]}"; do - - if [ -z "${upload_file}" ]; then - cd "${file_dir}" || exit 1 - - # new filename with date - img_file="$(date +"${file_name_format}")" - take_screenshot "${img_file}" - else - # upload file instead of screenshot - img_file="${upload_file}" - fi - - # get full path - img_file="$(cd "$( dirname "${img_file}")" && echo "$(pwd)/$(basename "${img_file}")")" - - # check if file exists - if [ ! -f "${img_file}" ]; then - echo "file '${img_file}' doesn't exist !" - exit 1 - fi - - # open image in editor if configured - if [ "${edit}" = "true" ]; then - edit_cmd=${edit_command//\%img/${img_file}} - echo "Opening editor '${edit_cmd}'" - if ! (eval "${edit_cmd}"); then - echo "Error for image '${img_file}': command '${edit_cmd}' failed, not uploading. For more information visit https://github.com/jomo/imgur-screenshot/wiki/Troubleshooting" | tee -a "${log_file}" - notify error "Something went wrong :(" "Information has been logged" - exit 1 - fi - fi - - if [ "${login}" = "true" ]; then - upload_authenticated_image "${img_file}" - else - upload_anonymous_image "${img_file}" - fi - - # delete file if configured - if [ "${keep_file}" = "false" ] && [ -z "${1}" ]; then - echo "Deleting temp file ${file_dir}/${img_file}" - rm -rf "${img_file}" - fi - - echo "" -done - - -if [ "${check_update}" = "true" ]; then - check_for_update -fi |