File size: 5,332 Bytes
235af27
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#!/usr/bin/env bash

WGET=$(which wget 2>/dev/null)
CONDA_VERSION=$(conda --version 2>/dev/null)
DOCKER_UTILS=$(which docker 2>/dev/null)
DOCKER_UTILS_NEEDED=false
PACK_MGR=""
PACK_MGR_OPTIONS=""

if [[ "$OSTYPE" == "darwin"* ]]; then
	PACK_MGR="brew install"
elif command -v emerge &> /dev/null; then
	PACK_MGR="sudo emerge"
elif command -v dnf &> /dev/null; then
	PACK_MGR="sudo dnf install"
	PACK_MGR_OPTIONS="-y"
elif command -v yum &> /dev/null; then
	PACK_MGR="sudo yum install"
	PACK_MGR_OPTIONS="-y"
elif command -v zypper &> /dev/null; then
	PACK_MGR="sudo zypper install"
	PACK_MGR_OPTIONS="-y"
elif command -v pacman &> /dev/null; then
	PACK_MGR="sudo pacman -Sy"
elif command -v apt-get &> /dev/null; then
	sudo apt-get update
	PACK_MGR="sudo apt-get install"
	PACK_MGR_OPTIONS="-y"
elif command -v apk &> /dev/null; then
	PACK_MGR="sudo apk add"
fi

check_programs_installed() {
	local programs=("$@")
	declare -a programs_missing
	
	for program in "${programs[@]}"; do
		if command -v "$program" >/dev/null 2>&1; then
			echo "$program is installed."
		else
			echo "$program is not installed."
			programs_missing+=($program)
		fi
	done
	
	local count=${#programs_missing[@]}
	
	if [[ $count -eq 0 || "$PKG_MGR" = "" ]]; then
		DOCKER_UTILS_NEEDED=true
	else
		for program in "${programs_missing[@]}"; do
			if [ "$program" = "ffmpeg" ];then
				eval "$PKG_MGR ffmpeg $PKG_MGR_OPTIONS"				
				if command -v ffmpeg >/dev/null 2>&1; then
					echo "FFmpeg installed successfully!"
				else
					echo "FFmpeg installation failed."
					DOCKER_UTILS_NEEDED=true
					break
				fi
			elif [ "$program" = "calibre" ];then				
				# avoid conflict with calibre builtin lxml
				pip uninstall lxml -y 2>/dev/null
				
				if [[ "$OSTYPE" == "Linux" ]]; then
					echo "Installing Calibre for Linux..."
					$WGET -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sh /dev/stdin
				elif [[ "$OSTYPE" == "Darwin"* ]]; then
					echo "Installing Calibre for macOS using Homebrew..."
					eval "$PACK_MGR --cask calibre"
				fi

				if command -v calibre >/dev/null 2>&1; then
					echo "Calibre installed successfully!"
				else
					echo "Calibre installation failed."
				fi
			fi
		done
	fi
}

# Check for Homebrew on macOS
if [[ "$OSTYPE" == "darwin"* ]]; then
	echo "Detected macOS."
	if ! command -v brew &> /dev/null; then
		echo "Homebrew is not installed. Installing Homebrew..."
		/usr/bin/env bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
		echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
		eval "$(/opt/homebrew/bin/brew shellenv)"
	fi
fi

if [ -z "$WGET" ]; then
	echo -e "\e[33m wget is missing! trying to install it... \e[0m"
	if [ "$PACK_MGR" != "" ]; then
		eval "$PACK_MGR wget $PACK_MGR_OPTIONS"
	else
		echo "Cannot recognize your package manager. Please install wget manually."
	fi
	WGET=$(which wget 2>/dev/null)
fi

if [[ -n "$WGET" && -z "$CONDA_VERSION" ]]; then
	echo -e "\e[33m conda is missing! trying to install it... \e[0m"
	
	if [[ "$OSTYPE" == "darwin"* ]]; then
		$WGET https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh -O Miniconda3-latest.sh
	else
		$WGET https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O Miniconda3-latest.sh
	fi

	chmod +x Miniconda3-latest.sh
	./Miniconda3-latest.sh -b -u && \
	~/miniconda3/bin/conda init && \
	rm -f Miniconda3-latest.sh

	# Source the appropriate shell configuration file
	SHELL_RC=~/miniconda3/etc/profile.d/conda.sh
	source $SHELL_RC

	CONDA_VERSION=$(conda --version 2>/dev/null)
	echo -e "\e[32m===============>>> conda is installed! <<===============\e[0m"
fi

check_programs_installed()

if [ $DOCKER_UTILS_NEEDED = true ]; then
	if [[ -n "$WGET" && -z "$DOCKER_UTILS" ]]; then
		echo -e "\e[33m docker is missing! trying to install it... \e[0m"
		if [[ "$OSTYPE" == "darwin"* ]]; then
			echo "Installing Docker using Homebrew..."
			brew install --cask docker
		else
			$WGET -qO get-docker.sh https://get.docker.com && \
			sudo sh get-docker.sh && \
			sudo systemctl start docker && \
			sudo systemctl enable docker && \
			docker run hello-world && \
			DOCKER_UTILS=$(which docker 2>/dev/null)
			rm -f get-docker.sh
		fi
		echo -e "\e[32m===============>>> docker is installed! <<===============\e[0m"
	fi
fi

if [[ -n "$WGET" && -n "$CONDA_VERSION" ]]; then
	SHELL_RC=~/miniconda3/etc/profile.d/conda.sh
	echo -e "\e[33m Installing ebook2audiobook... \e[0m"
	if [ $DOCKER_UTILS_NEEDED = true ]; then
		conda create --prefix $(pwd)/python_env python=3.11 -y
		source $SHELL_RC
		conda activate $(pwd)/python_env
		$DOCKER_UTILS build -f DockerfileUtils -t utils .
	fi
	pip install --upgrade pip && \
	pip install pydub nltk beautifulsoup4 ebooklib translate coqui-tts tqdm mecab mecab-python3 unidic gradio>=4.44.0 docker && \
	python -m unidic download && \
	python -m spacy download en_core_web_sm && \
	pip install -e .
	if [ $DOCKER_UTILS_NEEDED = true ]; then
		conda deactivate
		conda deactivate
	fi
	echo -e "\e[32m******************* ebook2audiobook installation successful! *******************\e[0m"
	echo -e "\e[33mTo launch ebook2audiobook:\e[0m"
	echo -e "- in command line mode: ./ebook2audiobook.sh --headless [other options]"
	echo -e "- in graphic web mode: ./ebook2audiobook.sh [--share]"
fi

exit 0