Skip to content

Commit 1e477b5

Browse files
Sky_slienceSky_slience
authored andcommitted
feat: add functions to build filenames and fetch latest version information for Alist updates
1 parent d5ecea1 commit 1e477b5

File tree

2 files changed

+485
-63
lines changed

2 files changed

+485
-63
lines changed

docs/.vuepress/public/v3-en.sh

Lines changed: 216 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,59 @@ CHECK() {
158158
ADMIN_USER=""
159159
ADMIN_PASS=""
160160

161+
# Function to build correct filename
162+
build_filename() {
163+
local version="$1"
164+
local os_name=$(uname -s | tr '[:upper:]' '[:lower:]')
165+
local arch_name=""
166+
167+
# Determine architecture part in filename based on system architecture
168+
if [ "$ARCH" = "amd64" ]; then
169+
arch_name="amd64"
170+
elif [ "$ARCH" = "arm64" ]; then
171+
arch_name="arm64"
172+
else
173+
echo "alist-linux-musl-$ARCH.tar.gz" # Fallback to original format
174+
return 0
175+
fi
176+
177+
# Determine filename based on operating system
178+
case "$os_name" in
179+
"linux")
180+
echo "alist-$version-linux-musl-$arch_name.tar.gz"
181+
;;
182+
"darwin")
183+
echo "alist-$version-darwin-$arch_name.tar.gz"
184+
;;
185+
"freebsd")
186+
echo "alist-$version-freebsd-$arch_name.tar.gz"
187+
;;
188+
*)
189+
echo "alist-$version-linux-musl-$arch_name.tar.gz" # Default to linux-musl
190+
;;
191+
esac
192+
}
193+
194+
# Function to get latest version information
195+
get_latest_version() {
196+
local api_url="https://dapi.alistgo.com/v0/version/latest"
197+
local version_info=$(curl -s --connect-timeout 10 "$api_url" 2>/dev/null)
198+
199+
if [ $? -eq 0 ] && [ -n "$version_info" ]; then
200+
# Parse JSON to get version and filename
201+
local version=$(echo "$version_info" | grep -o '"version":"[^"]*"' | cut -d'"' -f4)
202+
local platform=$(echo "$version_info" | grep -o '"platform":"[^"]*"' | cut -d'"' -f4)
203+
local download_url=$(echo "$version_info" | grep -o '"download_url":"[^"]*"' | cut -d'"' -f4)
204+
205+
if [ -n "$version" ] && [ -n "$platform" ] && [ -n "$download_url" ]; then
206+
echo "$version|$platform|$download_url"
207+
return 0
208+
fi
209+
fi
210+
211+
return 1
212+
}
213+
161214
# Download function with retry mechanism
162215
download_file() {
163216
local url="$1"
@@ -190,13 +243,67 @@ INSTALL() {
190243
# Save current directory
191244
CURRENT_DIR=$(pwd)
192245

193-
# Download Alist program
194-
echo -e "\r\n${GREEN_COLOR}Downloading Alist...${RES}"
246+
# Get latest version information
247+
echo -e "${GREEN_COLOR}Getting latest version information...${RES}"
248+
local version_info=$(get_latest_version)
195249

196-
# Download from GitHub source
197-
if ! download_file "${GH_DOWNLOAD_URL}/alist-linux-musl-$ARCH.tar.gz" "/tmp/alist.tar.gz"; then
198-
echo -e "${RED_COLOR}Download failed!${RES}"
199-
exit 1
250+
if [ $? -eq 0 ] && [ -n "$version_info" ]; then
251+
local version=$(echo "$version_info" | cut -d'|' -f1)
252+
local platform=$(echo "$version_info" | cut -d'|' -f2)
253+
local download_url=$(echo "$version_info" | cut -d'|' -f3)
254+
255+
echo -e "${GREEN_COLOR}Latest version: $version${RES}"
256+
257+
# Ask user to choose download source
258+
echo -e "${GREEN_COLOR}Please choose download source:${RES}"
259+
echo -e "${GREEN_COLOR}1. Use official mirror (recommended)${RES}"
260+
echo -e "${GREEN_COLOR}2. Use GitHub source${RES}"
261+
read -p "Please choose [1-2]: " download_choice
262+
263+
case "${download_choice:-1}" in
264+
1)
265+
# Use official mirror
266+
local filename=$(build_filename "$version")
267+
local official_url="https://alistgo.com/download/Alist/v$version/$filename"
268+
echo -e "${GREEN_COLOR}Using official mirror: $official_url${RES}"
269+
270+
# Download Alist program
271+
echo -e "\r\n${GREEN_COLOR}Downloading Alist...${RES}"
272+
if ! download_file "$official_url" "/tmp/alist.tar.gz"; then
273+
echo -e "${RED_COLOR}Official mirror download failed!${RES}"
274+
exit 1
275+
fi
276+
;;
277+
2)
278+
# Use GitHub source
279+
echo -e "${GREEN_COLOR}Using GitHub source${RES}"
280+
281+
# Download Alist program
282+
echo -e "\r\n${GREEN_COLOR}Downloading Alist...${RES}"
283+
local github_filename=$(build_filename "$version")
284+
if ! download_file "${GH_DOWNLOAD_URL}/$github_filename" "/tmp/alist.tar.gz"; then
285+
echo -e "${RED_COLOR}Download failed!${RES}"
286+
exit 1
287+
fi
288+
;;
289+
*)
290+
echo -e "${RED_COLOR}Invalid choice, using default GitHub source${RES}"
291+
local github_filename=$(build_filename "$version")
292+
if ! download_file "${GH_DOWNLOAD_URL}/$github_filename" "/tmp/alist.tar.gz"; then
293+
echo -e "${RED_COLOR}Download failed!${RES}"
294+
exit 1
295+
fi
296+
;;
297+
esac
298+
else
299+
echo -e "${YELLOW_COLOR}Unable to get latest version information, using default GitHub source${RES}"
300+
301+
# Download Alist program
302+
echo -e "\r\n${GREEN_COLOR}Downloading Alist...${RES}"
303+
if ! download_file "${GH_DOWNLOAD_URL}/alist-linux-musl-$ARCH.tar.gz" "/tmp/alist.tar.gz"; then
304+
echo -e "${RED_COLOR}Download failed!${RES}"
305+
exit 1
306+
fi
200307
fi
201308

202309
# Extract files
@@ -304,21 +411,111 @@ UPDATE() {
304411

305412
echo -e "${GREEN_COLOR}Starting Alist update...${RES}"
306413

307-
# Stop Alist service
308-
echo -e "${GREEN_COLOR}Stopping Alist process${RES}\r\n"
309-
systemctl stop alist
414+
# Get latest version information
415+
echo -e "${GREEN_COLOR}Getting latest version information...${RES}"
416+
local version_info=$(get_latest_version)
417+
418+
if [ $? -eq 0 ] && [ -n "$version_info" ]; then
419+
local version=$(echo "$version_info" | cut -d'|' -f1)
420+
local platform=$(echo "$version_info" | cut -d'|' -f2)
421+
local download_url=$(echo "$version_info" | cut -d'|' -f3)
422+
423+
echo -e "${GREEN_COLOR}Latest version: $version${RES}"
424+
echo -e "${GREEN_COLOR}Platform: $platform${RES}"
425+
426+
# Ask user to choose download source
427+
echo -e "${GREEN_COLOR}Please choose download source:${RES}"
428+
echo -e "${GREEN_COLOR}1. Use official mirror (recommended)${RES}"
429+
echo -e "${GREEN_COLOR}2. Use GitHub source${RES}"
430+
read -p "Please choose [1-2]: " download_choice
431+
432+
case "${download_choice:-1}" in
433+
1)
434+
# Use official mirror
435+
local filename=$(build_filename "$version")
436+
local official_url="https://alistgo.com/download/Alist/v$version/$filename"
437+
echo -e "${GREEN_COLOR}Using official mirror: $official_url${RES}"
438+
439+
# Stop Alist service
440+
echo -e "${GREEN_COLOR}Stopping Alist process${RES}\r\n"
441+
systemctl stop alist
310442

311-
# Backup binary
312-
cp $INSTALL_PATH/alist /tmp/alist.bak
443+
# Backup binary
444+
cp $INSTALL_PATH/alist /tmp/alist.bak
313445

314-
# Download new version
315-
echo -e "${GREEN_COLOR}Downloading Alist...${RES}"
316-
if ! download_file "${GH_DOWNLOAD_URL}/alist-linux-musl-$ARCH.tar.gz" "/tmp/alist.tar.gz"; then
317-
echo -e "${RED_COLOR}Download failed, update aborted${RES}"
318-
echo -e "${GREEN_COLOR}Restoring previous version...${RES}"
319-
mv /tmp/alist.bak $INSTALL_PATH/alist
320-
systemctl start alist
321-
exit 1
446+
# Download new version
447+
echo -e "${GREEN_COLOR}Downloading Alist...${RES}"
448+
if ! download_file "$official_url" "/tmp/alist.tar.gz"; then
449+
echo -e "${RED_COLOR}Official mirror download failed!${RES}"
450+
echo -e "${GREEN_COLOR}Restoring previous version...${RES}"
451+
mv /tmp/alist.bak $INSTALL_PATH/alist
452+
systemctl start alist
453+
exit 1
454+
fi
455+
;;
456+
2)
457+
# Use GitHub source
458+
echo -e "${GREEN_COLOR}Using GitHub source${RES}"
459+
460+
# Stop Alist service
461+
echo -e "${GREEN_COLOR}Stopping Alist process${RES}\r\n"
462+
systemctl stop alist
463+
464+
# Backup binary
465+
cp $INSTALL_PATH/alist /tmp/alist.bak
466+
467+
# Download new version
468+
echo -e "${GREEN_COLOR}Downloading Alist...${RES}"
469+
local github_filename=$(build_filename "$version")
470+
if ! download_file "${GH_DOWNLOAD_URL}/$github_filename" "/tmp/alist.tar.gz"; then
471+
echo -e "${RED_COLOR}Download failed, update aborted${RES}"
472+
echo -e "${GREEN_COLOR}Restoring previous version...${RES}"
473+
mv /tmp/alist.bak $INSTALL_PATH/alist
474+
systemctl start alist
475+
exit 1
476+
fi
477+
;;
478+
*)
479+
echo -e "${RED_COLOR}Invalid choice, using default GitHub source${RES}"
480+
481+
# Stop Alist service
482+
echo -e "${GREEN_COLOR}Stopping Alist process${RES}\r\n"
483+
systemctl stop alist
484+
485+
# Backup binary
486+
cp $INSTALL_PATH/alist /tmp/alist.bak
487+
488+
# Download new version
489+
echo -e "${GREEN_COLOR}Downloading Alist...${RES}"
490+
local github_filename=$(build_filename "$version")
491+
if ! download_file "${GH_DOWNLOAD_URL}/$github_filename" "/tmp/alist.tar.gz"; then
492+
echo -e "${RED_COLOR}Download failed, update aborted${RES}"
493+
echo -e "${GREEN_COLOR}Restoring previous version...${RES}"
494+
mv /tmp/alist.bak $INSTALL_PATH/alist
495+
systemctl start alist
496+
exit 1
497+
fi
498+
;;
499+
esac
500+
else
501+
echo -e "${YELLOW_COLOR}Unable to get latest version information, using default GitHub source${RES}"
502+
503+
# Stop Alist service
504+
echo -e "${GREEN_COLOR}Stopping Alist process${RES}\r\n"
505+
systemctl stop alist
506+
507+
# Backup binary
508+
cp $INSTALL_PATH/alist /tmp/alist.bak
509+
510+
# Download new version
511+
echo -e "${GREEN_COLOR}Downloading Alist...${RES}"
512+
if ! download_file "${GH_DOWNLOAD_URL}/alist-linux-musl-$ARCH.tar.gz" "/tmp/alist.tar.gz"; then
513+
echo -e "${RED_COLOR}Download failed, update aborted${RES}"
514+
echo -e "${GREEN_COLOR}Restoring previous version...${RES}"
515+
mv /tmp/alist.bak $INSTALL_PATH/alist
516+
systemctl start alist
517+
exit 1
518+
fi
322519
fi
323520

324521
# Extract files

0 commit comments

Comments
 (0)