more improvements and add nord theme

This commit is contained in:
ksyasuda 2022-01-09 02:33:29 -08:00
parent 9be6dccf79
commit ce27ce7684
4 changed files with 186 additions and 53 deletions

View File

@ -193,13 +193,13 @@ aniwrapper -C
aniwrapper -Q <query> aniwrapper -Q <query>
# Choose rofi theme from presets # Choose rofi theme from presets
aniwrapper -t [aniwrapper (default)|dracula|fancy|flamingo|material|onedark] aniwrapper -t <aniwrapper (default)|dracula|fancy|flamingo|material|nord|onedark>
# Specify custom rofi config # Specify custom rofi config
aniwrapper -T <path_to_config> aniwrapper -T <path_to_config>
# Specify starting directory for play_from_file mode, bypassing main menu # Specify starting directory for play_from_file mode, bypassing main menu
aniwrapper -f <starting_directory> (no trailing slash in path) aniwrapper -f <starting_directory>
# Use ani-cli command-line mode (rofi disabled) # Use ani-cli command-line mode (rofi disabled)
aniwrapper -c aniwrapper -c
@ -258,13 +258,13 @@ ani-cli -H
ani-cli -s ani-cli -s
# choose quality # choose quality
ani-cli -q [high|normal (default)|low] ani-cli -q <high|normal (default)|low>
# choose rofi theme from presets # choose rofi theme from presets
ani-cli -t [aniwrapper (default)|dracula|fancy|flamingo|material|onedark] ani-cli -t <aniwrapper (default)|dracula|fancy|flamingo|material|nord|onedark>
# Specify starting directory for play_from_file mode (does not work with -c) # Specify starting directory for play_from_file mode (does not work with -c)
ani-cli -f <starting_directory> (no trailing slash in path) ani-cli -f <starting_directory>
# run ani-cli in command-line mode (rofi disabled) # run ani-cli in command-line mode (rofi disabled)
ani-cli -c ani-cli -c

68
ani-cli
View File

@ -10,7 +10,7 @@ MAISAN_ICON_PATH="$CFG_DIR/icons/MYsan.png"
ROFI_THEME="aniwrapper.rasi" ROFI_THEME="aniwrapper.rasi"
ROFI_CFG="$CFG_DIR/themes/$ROFI_THEME" ROFI_CFG="$CFG_DIR/themes/$ROFI_THEME"
PLAYER_CMD="mpv" PLAYER_CMD="mpv"
THEMES="aniwrapper (default)|dracula|fancy|flamingo|material|onedark" THEMES="aniwrapper (default)|dracula|fancy|flamingo|material|nord|onedark"
# dependencies: grep, sed, curl, video_player, rofi, sqlite3 # dependencies: grep, sed, curl, video_player, rofi, sqlite3
# video_player ( needs to be able to play urls ) # video_player ( needs to be able to play urls )
@ -318,21 +318,16 @@ sync_watch_history() {
play_file() { play_file() {
logger "Checking if file is playable" logger "Checking if file is playable"
if [[ "$1" =~ ($playable)$ ]]; then if [[ "$1" =~ ($playable)$ ]]; then
logger "File is playable..."
filename=$(grep -oE '[^/]*$' <<< "$1") filename=$(grep -oE '[^/]*$' <<< "$1")
directory=$(sed -E "s/\/$filename//" <<< "$1") directory=$(sed -E "s/\/$filename//" <<< "$1")
logger "FILENAME: $filename"
logger "DIRECTORY: $directory"
insert_history "file" "$directory" "$filename" & insert_history "file" "$directory" "$filename" &
if [[ "$1" =~ .mp3 ]]; then if [[ "$1" =~ .mp3 ]]; then
logger ".mp3 file found... playing without video" logger ".mp3 file found... playing without video"
logger "MPV COMMAND: $PLAYER_CMD --no-video $1"
notification "Playing $1" notification "Playing $1"
$PLAYER_CMD --no-video "$1" $PLAYER_CMD --no-video "$1"
else else
notification "Playing $1" notification "Playing $1"
logger "MPV COMMAND: $PLAYER_CMD $1" $PLAYER_CMD "$1" > /dev/null 2>&1 &
$PLAYER_CMD "$1"
fi fi
return $? return $?
else else
@ -340,41 +335,15 @@ play_file() {
fi fi
} }
# attempt to generate list of valid files and directories get_directory_data() {
generate_inputlist() {
# start at 2nd line, because first line out output from find is $1
outstr=""
while read -r directory; do
if [[ "${directory// /}" == "" ]]; then
continue
fi
[ "$outstr" = "" ] && outstr="$directory" || outstr="$outstr|$directory"
done <<< "$(find "$1" -maxdepth 1 -type d | sed "s|$1/||" | tail -n +2 | sort -V)"
# logger "DIRS: $outstr" 1> /dev/stderr
while read -r filename; do
if [[ "${filename// /}" == "" ]]; then
continue
fi
[ "$outstr" = "" ] && outstr="$filename" || outstr="$outstr|$filename"
done <<< "$(find "$1" -maxdepth 1 -type f | sed "s|$1/||" | grep -E "$playable$" | sort -V)"
# logger "DIRS + FILES: $outstr" 1> /dev/stderr
outstr="$outstr|Back|Quit"
printf "%s\n" "$outstr"
}
get_file_history_as_string() {
while read -r directory; do
continue
done <<< "$(run_stmt 'SELECT DISTINCT DIRECTORY FROM FILE_HISTORY;')"
}
generate_file_watchedlist() {
search_dir="$1" search_dir="$1"
inputlist=""
watched="" watched=""
cnt=0 cnt=1
while read -r directory; do while read -r directory; do
# sometimes direetory is empty string due to find parsing # sometimes direetory is empty string due to find parsing
[ -z "$directory" ] && continue [ -z "${directory// /}" ] && continue
[ "$inputlist" = "" ] && inputlist="$directory" || inputlist="$inputlist|$directory"
if ! check_db "directory" "$search_dir/$directory"; then if ! check_db "directory" "$search_dir/$directory"; then
logger "$search_dir/$directory opened before... adding $cnt to list" 1> /dev/stderr logger "$search_dir/$directory opened before... adding $cnt to list" 1> /dev/stderr
[ "$watched" = "" ] && watched="$cnt" || watched="$watched, $cnt" [ "$watched" = "" ] && watched="$cnt" || watched="$watched, $cnt"
@ -382,14 +351,17 @@ generate_file_watchedlist() {
((++cnt)) ((++cnt))
done <<< "$(find "$search_dir" -maxdepth 1 -type d | sed -E "s|$search_dir/||" | tail -n +2 | sort -V)" done <<< "$(find "$search_dir" -maxdepth 1 -type d | sed -E "s|$search_dir/||" | tail -n +2 | sort -V)"
while read -r filename; do while read -r filename; do
[ -z "${filename// /}" ] && continue
if ! check_db "file" "$search_dir" "$filename"; then if ! check_db "file" "$search_dir" "$filename"; then
logger "$filename watched before... adding $cnt to list" 1> /dev/stderr logger "$filename watched before... adding $cnt to list" 1> /dev/stderr
[ "$watched" = "" ] && watched="$cnt" || watched="$watched, $cnt" [ "$watched" = "" ] && watched="$cnt" || watched="$watched, $cnt"
fi fi
[ "$inputlist" = "" ] && inputlist="$filename" || inputlist="$inputlist|$filename"
((++cnt)) ((++cnt))
done <<< "$(find "$search_dir" -maxdepth 1 -type f | sed "s|$search_dir/||" | grep -E "$playable$" | sort -V)" done <<< "$(find "$search_dir" -maxdepth 1 -type f | sed "s|$search_dir/||" | grep -E "$playable$" | sort -V)"
[ "$search_dir" != "/" ] && inputlist="../|$inputlist|Back|Quit" || inputlist="$inputlist|Back|Quit"
logger "INPUT LIST: $inputlist" 1> /dev/stderr
logger "WATCHED LIST: $watched" 1> /dev/stderr logger "WATCHED LIST: $watched" 1> /dev/stderr
printf "%s\n" "$watched"
} }
# recursive function for finding path to video file given a starting directory # recursive function for finding path to video file given a starting directory
@ -405,17 +377,16 @@ find_media() {
return 0 return 0
fi fi
get_directory_data "$inp"
[ -z "$inputlist" ] && return 1
span=$(generate_span "Current directory: $inp") span=$(generate_span "Current directory: $inp")
# run in parallel in background?
inputlist=$(generate_inputlist "$inp" &)
watched_files=$(generate_file_watchedlist "$inp" &)
wait
selection=$(rofi -dmenu -only-match -async-pre-read 33 -config "$ROFI_CFG" \ selection=$(rofi -dmenu -only-match -async-pre-read 33 -config "$ROFI_CFG" \
-l 12 -i -sep '|' -mesg "$span" -a "$watched_files" \ -l 15 -i -sep '|' -mesg "$span" -a "$watched" \
-p "Enter selection" <<< "${inputlist[@]}") -p "Enter selection" <<< "$inputlist")
case "$selection" in case "$selection" in
Back) Back | ../)
# go up one directory # go up one directory
# dotdotslash=$(sed -E "s/(\/[^\/]*$)//" <<< "$inp") # dotdotslash=$(sed -E "s/(\/[^\/]*$)//" <<< "$inp")
if [ -z "$(sed -E "s/(\/[^\/]*$)//" <<< "$inp")" ]; then if [ -z "$(sed -E "s/(\/[^\/]*$)//" <<< "$inp")" ]; then
@ -798,6 +769,7 @@ while getopts 'hd:Hsvq:c-:f:t:T:CQ:' OPT; do
f) f)
scrape="file" scrape="file"
play_dir="$OPTARG" play_dir="$OPTARG"
[ "$play_dir" != "/" ] && play_dir="$(sed -E 's/\/$//' <<< "$play_dir")" # remove trailing slash... unless searching / for some reason
;; ;;
t) t)
theme="$OPTARG" theme="$OPTARG"
@ -820,6 +792,9 @@ while getopts 'hd:Hsvq:c-:f:t:T:CQ:' OPT; do
material) material)
ROFI_THEME=aniwrapper-material.rasi ROFI_THEME=aniwrapper-material.rasi
;; ;;
nord)
ROFI_THEME=aniwrapper-nord.rasi
;;
onedark) onedark)
ROFI_THEME=aniwrapper-onedark.rasi ROFI_THEME=aniwrapper-onedark.rasi
;; ;;
@ -919,7 +894,6 @@ case $scrape in
[ ! -d "$play_dir" ] && die "$play_dir does not exist" [ ! -d "$play_dir" ] && die "$play_dir does not exist"
video_path=$(find_media "$play_dir") video_path=$(find_media "$play_dir")
retcode="$?" retcode="$?"
echo "RETURN FROM find_media() -> $retcode"
if [ "$retcode" -ne 0 ]; then if [ "$retcode" -ne 0 ]; then
die "QUITTING" die "QUITTING"
elif [ -z "$video_path" ]; then elif [ -z "$video_path" ]; then

View File

@ -12,7 +12,7 @@ ROFI_THEME="aniwrapper.rasi"
CFG_FILE="$CFG_DIR/themes/$ROFI_THEME" CFG_FILE="$CFG_DIR/themes/$ROFI_THEME"
QUALITIES="1. high|2. normal (default)|3. low" QUALITIES="1. high|2. normal (default)|3. low"
QUALITY=normal QUALITY=normal
THEMES="aniwrapper (default)|dracula|fancy|flamingo|material|onedark" THEMES="aniwrapper (default)|dracula|fancy|flamingo|material|nord|onedark"
GET_QUALITY=0 GET_QUALITY=0
VERBOSE=0 VERBOSE=0
IS_ROFI=1 IS_ROFI=1
@ -151,6 +151,9 @@ parse_args() {
material) material)
ROFI_THEME=aniwrapper-material.rasi ROFI_THEME=aniwrapper-material.rasi
;; ;;
nord)
ROFI_THEME=aniwrapper-nord.rasi
;;
onedark) onedark)
ROFI_THEME=aniwrapper-onedark.rasi ROFI_THEME=aniwrapper-onedark.rasi
;; ;;

156
themes/aniwrapper-nord.rasi Normal file
View File

@ -0,0 +1,156 @@
* {
font: "Open Sans 15";
nord0: #2e3440;
nord1: #3b4252;
nord2: #434c5e;
nord3: #4c566a;
nord4: #d8dee9;
nord5: #e5e9f0;
nord6: #eceff4;
nord7: #8fbcbb;
nord8: #88c0d0;
nord9: #81a1c1;
nord10: #5e81ac;
nord11: #bf616a;
nord12: #d08770;
nord13: #ebcb8b;
nord14: #a3be8c;
nord15: #b48ead;
spacing: 2;
background-color: var(nord1);
background: var(nord1);
foreground: var(nord4);
normal-background: var(background);
normal-foreground: var(foreground);
alternate-normal-background: var(background);
alternate-normal-foreground: var(foreground);
selected-normal-background: var(nord8);
selected-normal-foreground: var(background);
active-background: var(background);
active-foreground: var(nord10);
alternate-active-background: var(background);
alternate-active-foreground: var(nord10);
selected-active-background: var(nord10);
selected-active-foreground: var(background);
urgent-background: var(background);
urgent-foreground: var(nord11);
alternate-urgent-background: var(background);
alternate-urgent-foreground: var(nord11);
selected-urgent-background: var(nord11);
selected-urgent-foreground: var(background);
}
element {
padding: 4px 0px 4px 7px;
spacing: 5px;
border: 0;
cursor: pointer;
margin: 1px 0px;
border-radius: 12px;
}
element normal.normal {
background-color: var(normal-background);
text-color: var(normal-foreground);
}
element normal.urgent {
background-color: var(urgent-background);
text-color: var(urgent-foreground);
}
element normal.active {
background-color: var(active-background);
text-color: var(active-foreground);
}
element selected.normal {
background-color: var(selected-normal-background);
text-color: var(selected-normal-foreground);
}
element selected.urgent {
background-color: var(selected-urgent-background);
text-color: var(selected-urgent-foreground);
}
element selected.active {
background-color: var(selected-active-background);
text-color: var(selected-active-foreground);
}
element alternate.normal {
background-color: var(alternate-normal-background);
text-color: var(alternate-normal-foreground);
}
element alternate.urgent {
background-color: var(alternate-urgent-background);
text-color: var(alternate-urgent-foreground);
}
element alternate.active {
background-color: var(alternate-active-background);
text-color: var(alternate-active-foreground);
}
element-text {
background-color: rgba(0, 0, 0, 0%);
text-color: inherit;
highlight: inherit;
cursor: inherit;
}
element-icon {
background-color: rgba(0, 0, 0, 0%);
size: 1.0000em;
text-color: inherit;
cursor: inherit;
}
window {
padding: 0;
border: 0;
background-color: var(background);
width: 60%;
border-radius: 12px;
}
mainbox {
padding: 0;
border: 0;
}
message {
margin: 0px 7px;
}
textbox {
text-color: var(foreground);
}
listview {
margin: 0px 0px 5px;
scrollbar: true;
spacing: 2px;
fixed-height: 0;
columns: 2;
}
scrollbar {
padding: 0;
handle-width: 14px;
border: 0;
handle-color: var(nord3);
}
button {
spacing: 0;
text-color: var(normal-foreground);
cursor: pointer;
}
button selected {
background-color: var(selected-normal-background);
text-color: var(selected-normal-foreground);
}
inputbar {
padding: 7px;
margin: 7px;
spacing: 0;
text-color: var(normal-foreground);
background-color: var(nord3);
children: [ entry ];
border-radius: 12px;
}
entry {
spacing: 0;
cursor: text;
text-color: var(normal-foreground);
background-color: var(nord3);
}