summaryrefslogtreecommitdiff
path: root/.old/mime
blob: 7c6a649d4fea5082be1bd08ea597c7fae704a9fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/bin/sh
# Media type csv caching
cachedir="${XDG_CACHE_HOME:-$HOME/.cache}/mimewiz"
mtypesrc="https://www.iana.org/assignments/media-types"
mtypes="`grep -v '#'`" << TYPES
#application
audio
font
#example
image
#message
#model
#multipart
text
video
TYPES
nmtypes="`cat`" << TYPES
pdf,
spreadsheet ms-excel,
wordprocessing ms-word,
presentation ms-powerpoint,
drawing,
zip gzip,
TYPES

dlcsv() { curl -sS -C - -o "$2" "$1" || exit; }

# Download all media type csv's if they're not avaliable
mkdir -p "$cachedir"
for mtype in $mtypes; do
	mtypefile="$cachedir/$mtype.csv"
	[ -e "$mtypefile" ] || dlcsv "$mtypesrc/$mtype.csv" "$mtypefile"
done

interactiveopt() {
	# Usage: interactiveopt "options" "prompt" "maxopts (if unset than equal to inf)" "col"
	# Purpose: give the user a numbered list of options. User can specify multiple choices. User can specify either the number or the name of the option.
	# Output: saved in variable "opt"
	unset opt # This won't be set if using recursion, do it in a while loop instead
	while [ -z $opt ] 2>/dev/null; do
		# Column option
		[ -n "$4" ] && [ "$4" = "col" ] \
			&& echo "$1" | nl -s': ' | column \
			|| echo "$1" | nl -s': '
		# Parse user input
		read -p "$2" choices \
			&& choices="$(echo $choices | cut -d' ' -f1-$3)"
		for choice in $choices; do
			case "$choice" in
				[0-9]*)	opt="$(echo "$1" | head -"$(echo $choice | tr -cd '[:digit:]')" | tail -1) $opt"	;;
				*) 	opt="$(echo "$1" | grep "^$choice$" 2>/dev/null) $opt"					;;
			esac || ( echo "Invalid option \"$choice\"" && undet opt && break ) # Why wont this unset opt or break???????
		done
	done
}


# Choose mimetype:
mtypes="$mtypes\n$(echo "$nmtypes" | cut -d',' -f1)"
interactiveopt "$mtypes" "Choose mimetype: " 1
mtype="$(echo "$opt" | cut -d' ' -f1)"
echo "$mtype"
echo

# Choose subtype
mtypefile="$cachedir/$mtype.csv"
[ -e "$mtypefile" ] && interactiveopt "all\n$(cut -d',' -f1 "$mtypefile" | tail -n +2)" "Choose $mtype subtype: " "" col
mfiletypes=" $opt "
echo

# Choose program
interactiveopt "$(ls /usr/share/applications | sed 's/\.desktop//')" "Choose program to open with: " "" col
program="$opt"
echo "$program"
echo

#echo "$mfiletypes" | grep ' all ' && mfiletypes="$(cut -d',' -f1 "$cachedir/$mtype.csv" | tail -n +2)"

# Xdg-mime commands
#cut -d',' -f2 "$cachedir/image.csv"

for mfiletype in $(cut -d',' -f1 "$cachedir/$mtype.csv" | tail -n +2); do
	echo "Changing default program for $mfiletype to $program"
	xdg-mime default "$program.desktop" $mfiletype
done