Skip to content

Commit

Permalink
Merge pull request #727 from ivan-hc/dev
Browse files Browse the repository at this point in the history
Update template.am: eperimental support for sourceforge
  • Loading branch information
ivan-hc authored Jun 27, 2024
2 parents 93948f5 + f507264 commit b998dc9
Show file tree
Hide file tree
Showing 26 changed files with 1,629 additions and 1,408 deletions.
70 changes: 63 additions & 7 deletions modules/template.am
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,40 @@ function _template_then_github_source() {
esac
}

function _template_if_hosted_elsewhere() {
function _template_custom_download_url() {
# IF YOU CAN, USE A ONE-LINE COMMAND TO DOWNLOAD THE PROGRAM
read -r -ep " USE A ONE-LINE SHELL COMMAND TO CHECK ONLY THE URL TO THE PROGRAM $(echo -e '\n\n if the URL is fixed, simply add the "echo" command at the beginning\n\n :') " DOWNLOADURL
case "$DOWNLOADURL" in
*)
mv ./am-scripts/"$arch"/"$arg" ./am-scripts/"$arch"/"$arg".old
sed -n '1,14p' ./am-scripts/"$arch"/"$arg".old >> ./am-scripts/"$arch"/"$arg"
echo 'version=$('$DOWNLOADURL')' >> ./am-scripts/"$arch"/"$arg"
sed -n '16,35p' ./am-scripts/"$arch"/"$arg".old >> ./am-scripts/"$arch"/"$arg"
echo 'version=$('$DOWNLOADURL')' >> ./am-scripts/"$arch"/"$arg"
sed -n '37,132p' ./am-scripts/"$arch"/"$arg".old >> ./am-scripts/"$arch"/"$arg"
rm -f ./am-scripts/"$arch"/"$arg".old
;;
esac
}

function _template_if_sourceforge() {
sed -i "s#REPLACETHIS#$RESPONSE#g" ./am-scripts/"$arch"/"$arg"
# ADD PROJECTNAME
read -r -ep " ◆ ADD THE NAME OF THE PROJECT OR LEAVE BLANK IF ITS THE SAME $(echo -e '\n : ')" projectname
case "$projectname" in
'') SOURCEFORGE="https://sourceforge.net/p/$arg/activity/feed";;
*) SOURCEFORGE="https://sourceforge.net/p/$projectname/activity/feed";;
esac
echo "-----------------------------------------------------------------------"
# FILE TYPE
if [ "$templatetype" == 0 ]; then
filetype="appimage"
elif [ "$templatetype" == 2 ]; then
read -r -ep " ◆ ADD an univoque keyword for the file (for example \"tar.gz\", \"linux\"):" filekeyword
case "$filekeyword" in
*) filetype="$filekeyword";;
esac
fi
# ADD A DESCRIPTION FOR THIS APPLICATION
read -r -ep " ◆ ADD A BRIEF DESCRIPTION FOR THIS APPLICATION $(echo -e '\n : ')" COMMENT
case "$COMMENT" in
Expand All @@ -128,19 +160,37 @@ function _template_if_hosted_elsewhere() {
;;
esac
echo "-----------------------------------------------------------------------"
# IF YOU CAN, USE A ONE-LINE COMMAND TO DOWNLOAD THE PROGRAM
read -r -ep " USE A ONE-LINE SHELL COMMAND TO CHECK ONLY THE URL TO THE PROGRAM $(echo -e '\n\n if the URL is fixed, simply add the "echo" command at the beginning\n\n :') " DOWNLOADURL
case "$DOWNLOADURL" in
*)
if curl --head --silent --fail $(curl -Ls $SOURCEFORGE | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | grep -i "$filetype" | grep -v '%' | head -1) 1> /dev/null; then
mv ./am-scripts/"$arch"/"$arg" ./am-scripts/"$arch"/"$arg".old
sed -n '1,14p' ./am-scripts/"$arch"/"$arg".old >> ./am-scripts/"$arch"/"$arg"
echo 'version=$('$DOWNLOADURL')' >> ./am-scripts/"$arch"/"$arg"
echo "version=\$(curl -Ls $SOURCEFORGE | grep -Eo \"(http|https)://[a-zA-Z0-9./?=_%:-]*\" | grep -i \"$filetype\" | grep -v '%' | head -1)" >> ./am-scripts/"$arch"/"$arg"
sed -n '16,35p' ./am-scripts/"$arch"/"$arg".old >> ./am-scripts/"$arch"/"$arg"
echo 'version=$('$DOWNLOADURL')' >> ./am-scripts/"$arch"/"$arg"
echo "version=\$(curl -Ls $SOURCEFORGE | grep -Eo \"(http|https)://[a-zA-Z0-9./?=_%:-]*\" | grep -i \"$filetype\" | grep -v '%' | head -1)" >> ./am-scripts/"$arch"/"$arg"
sed -n '37,132p' ./am-scripts/"$arch"/"$arg".old >> ./am-scripts/"$arch"/"$arg"
rm -f ./am-scripts/"$arch"/"$arg".old
curl -Ls $SOURCEFORGE | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | grep -i "$filetype" | grep -v '%' | head -1
echo -e "\n The URL above is an example of what both\n the install and update scripts will point to.\n"
else
_template_custom_download_url
fi
sed -i 's/*mage/*/g' ./am-scripts/"$arch"/"$arg"
}

function _template_if_hosted_elsewhere() {
sed -i "s#REPLACETHIS#$RESPONSE#g" ./am-scripts/"$arch"/"$arg"
# ADD A DESCRIPTION FOR THIS APPLICATION
read -r -ep " ◆ ADD A BRIEF DESCRIPTION FOR THIS APPLICATION $(echo -e '\n : ')" COMMENT
case "$COMMENT" in
*)
# CREATE A WEBPAGE FOR https://portable-linux-apps.github.io CONTAINING ALL THE INFO ABOUT THIS APP
echo "# $(echo "$arg" | tr '[:lower:]' '[:upper:]')" >> ./am-scripts/portable-linux-apps.github.io/apps/"$arg".md
echo -e "\n $COMMENT\n\n SITE: $RESPONSE\n\n | [Applications](https://portable-linux-apps.github.io/apps.html) | [Home](https://portable-linux-apps.github.io)\n | --- | --- |" >> ./am-scripts/portable-linux-apps.github.io/apps/"$arg".md &&
# CREATE A NEW LINE FOR THE APPLICATION'S LIST
echo "$arg : $COMMENT" >> ./am-scripts/list
;;
esac
echo "-----------------------------------------------------------------------"
_template_custom_download_url
}

# Function to add a generic .desktop file and an icon to the installation script (option 2)
Expand Down Expand Up @@ -230,6 +280,8 @@ while [ -n "$1" ]; do
*)
if echo "$RESPONSE" | grep -q "https://github.com"; then
_template_then_github_source
elif echo "$RESPONSE" | grep -q "sourceforge"; then
_template_if_sourceforge
else
_template_if_hosted_elsewhere
fi
Expand Down Expand Up @@ -302,13 +354,17 @@ while [ -n "$1" ]; do
;;

2) # DOWNLOAD ANY ARCHIVE

_template_create_dirs_and_ask_for_source

# ADD THE NAME OF THE SOURCE
read -r -ep " ◆ ADD THE URL OF THE SITE (BETTER IF IT COME FROM GITHUB), FOR EXAMPLE: $(echo -e '\n\n - if from github.com, use "https://github.com/USER/PROJECT"\n\n - if from other sources, use "https://www.SITENAME.com" or something\n\n URL: ')" RESPONSE
case "$RESPONSE" in
*)
if echo "$RESPONSE" | grep -q "https://github.com"; then
_template_then_github_source
elif echo "$RESPONSE" | grep -q "sourceforge"; then
_template_if_sourceforge
else
_template_if_hosted_elsewhere
fi
Expand Down
7 changes: 7 additions & 0 deletions programs/x86_64-apps
Original file line number Diff line number Diff line change
Expand Up @@ -848,6 +848,13 @@
◆ james : HTTP/HTTPS proxy built in Electron and React.
◆ jan : FOSS Alternative to ChatGPT that runs 100% offline on your computer.
◆ jazz2 : Open-source reimplementation of Jazz Jackrabbit 2.
◆ jdappstreamedit : A graphical Program to create and edit AppStream files.
◆ jddesktopentryedit : A graphical Program to create and edit Desktop Entries.
◆ jdminecraftlauncher : Unofficial classic styled Minecraft Launcher.
◆ jdmrpackinstaller : Install Modrinth modpacks.
◆ jdnbtexplorer : A Editor for Minecraft NBT files.
◆ jdreplace : With jdReplace you can replace a text in all files of a directory.
◆ jdtextedit : jdTextEdit is a powerful texteditor with a lot of features.
◆ jellyamp-appimage : A client for listening to music from a Jellyfin server.
◆ jetbrains-toolbox : Essential tools for software developers and teams.
◆ jexiftoolgui : Java/Swing graphical frontend for ExifTool.
Expand Down
75 changes: 75 additions & 0 deletions programs/x86_64/jdappstreamedit
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#!/bin/sh

# AM INSTALL SCRIPT VERSION 3.
set -u
APP=jdappstreamedit
SITE="https://sourceforge.net/projects/jdappstreamedit"

# CREATE DIRECTORIES AND ADD REMOVER
[ -n "$APP" ] && mkdir -p "/opt/$APP/tmp" "/opt/$APP/icons" && cd "/opt/$APP/tmp" || exit 1
printf "#!/bin/sh\nset -e\nrm -f /usr/local/bin/$APP\nrm -R -f /opt/$APP" > "/opt/$APP/remove"
printf '\n%s' "rm -f /usr/share/applications/AM-$APP.desktop" >> "/opt/$APP/remove"
chmod a+x "/opt/$APP/remove"

# DOWNLOAD AND PREPARE THE APP, $version is also used for updates
version=$(curl -Ls https://sourceforge.net/p/jdappstreamedit/activity/feed | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | grep -i "appimage" | grep -v '%' | head -1)
wget "$version" || exit 1
#wget "$version.zsync" 2> /dev/null # Comment out this line if you want to use zsync, warning that more often than not it is broken
# Use tar fx ./*tar* here for example in this line in case a compressed file is downloaded.
cd ..
mv ./tmp/* ./"$APP"
mv ./tmp/*.zsync ./"$APP".zsync 2>/dev/null
rm -R -f ./tmp || exit 1
echo "$version" > ./version
chmod a+x "/opt/$APP/$APP" || exit 1

# LINK TO PATH
ln -s "/opt/$APP/$APP" "/usr/local/bin/$APP"

# SCRIPT TO UPDATE THE PROGRAM
cat >> "/opt/$APP/AM-updater" << 'EOF'
#!/bin/sh
set -u
APP=jdappstreamedit
SITE="https://sourceforge.net/projects/jdappstreamedit"
version0=$(cat "/opt/$APP/version")
version=$(curl -Ls https://sourceforge.net/p/jdappstreamedit/activity/feed | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | grep -i "appimage" | grep -v '%' | head -1)
[ -n "$version" ] || { echo "Error getting link"; exit 1; }
if [ "$version" != "$version0" ] || [ -e /opt/"$APP"/*.zsync ]; then
mkdir "/opt/$APP/tmp" && cd "/opt/$APP/tmp" || exit 1
[ -e /opt/"$APP"/*.zsync ] || notify-send "A new version of $APP is available, please wait"
[ -e /opt/"$APP"/*.zsync ] && wget "$version.zsync" 2>/dev/null || { wget "$version" || exit 1; }
# Use tar fx ./*tar* here for example in this line in case a compressed file is downloaded.
cd ..
mv ./tmp/*.zsync ./"$APP".zsync 2>/dev/null || mv --backup=t ./tmp/* ./"$APP"
[ -e /opt/"$APP"/*.zsync ] && { zsync "/opt/$APP/$APP.zsync" || notify-send -u critical "zsync failed to update $APP"; }
chmod a+x "/opt/$APP/$APP" || exit 1
echo "$version" > ./version
rm -R -f ./*zs-old ./*.part ./tmp ./*~
notify-send "$APP is updated!"
else
echo "Update not needed!"
fi
EOF
chmod a+x "/opt/$APP/AM-updater"

# LAUNCHER & ICON
cd "/opt/$APP" || exit 1
./"$APP" --appimage-extract *.desktop 1>/dev/null && mv ./squashfs-root/*.desktop ./"$APP".desktop
./"$APP" --appimage-extract .DirIcon 1>/dev/null && mv ./squashfs-root/.DirIcon ./DirIcon
COUNT=0
while [ "$COUNT" -lt 10 ]; do # Tries to get the actual icon/desktop if it is a symlink to another symlink
if [ -L ./"$APP".desktop ]; then
LINKPATH="$(readlink ./"$APP".desktop | sed 's|^\./||' 2>/dev/null)"
./"$APP" --appimage-extract "$LINKPATH" && mv ./squashfs-root/"$LINKPATH" ./"$APP".desktop
fi
if [ -L ./DirIcon ]; then
LINKPATH="$(readlink ./DirIcon | sed 's|^\./||' 2>/dev/null)"
./"$APP" --appimage-extract "$LINKPATH" && mv ./squashfs-root/"$LINKPATH" ./DirIcon
fi
[ ! -L ./"$APP".desktop ] && [ ! -L ./DirIcon ] && break
COUNT=$((COUNT + 1))
done
sed -i "s#Exec=[^ ]*#Exec=$APP#g; s#Icon=.*#Icon=/opt/$APP/icons/$APP#g" ./"$APP".desktop
mv ./"$APP".desktop /usr/share/applications/AM-"$APP".desktop && mv ./DirIcon ./icons/"$APP" 1>/dev/null
rm -R -f ./squashfs-root
75 changes: 75 additions & 0 deletions programs/x86_64/jddesktopentryedit
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#!/bin/sh

# AM INSTALL SCRIPT VERSION 3.
set -u
APP=jddesktopentryedit
SITE="https://sourceforge.net/projects/jddesktopentryedit"

# CREATE DIRECTORIES AND ADD REMOVER
[ -n "$APP" ] && mkdir -p "/opt/$APP/tmp" "/opt/$APP/icons" && cd "/opt/$APP/tmp" || exit 1
printf "#!/bin/sh\nset -e\nrm -f /usr/local/bin/$APP\nrm -R -f /opt/$APP" > "/opt/$APP/remove"
printf '\n%s' "rm -f /usr/share/applications/AM-$APP.desktop" >> "/opt/$APP/remove"
chmod a+x "/opt/$APP/remove"

# DOWNLOAD AND PREPARE THE APP, $version is also used for updates
version=$(curl -Ls https://sourceforge.net/p/jddesktopentryedit/activity/feed | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | grep -i "appimage" | grep -v '%' | head -1)
wget "$version" || exit 1
#wget "$version.zsync" 2> /dev/null # Comment out this line if you want to use zsync, warning that more often than not it is broken
# Use tar fx ./*tar* here for example in this line in case a compressed file is downloaded.
cd ..
mv ./tmp/* ./"$APP"
mv ./tmp/*.zsync ./"$APP".zsync 2>/dev/null
rm -R -f ./tmp || exit 1
echo "$version" > ./version
chmod a+x "/opt/$APP/$APP" || exit 1

# LINK TO PATH
ln -s "/opt/$APP/$APP" "/usr/local/bin/$APP"

# SCRIPT TO UPDATE THE PROGRAM
cat >> "/opt/$APP/AM-updater" << 'EOF'
#!/bin/sh
set -u
APP=jddesktopentryedit
SITE="https://sourceforge.net/projects/jddesktopentryedit"
version0=$(cat "/opt/$APP/version")
version=$(curl -Ls https://sourceforge.net/p/jddesktopentryedit/activity/feed | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | grep -i "appimage" | grep -v '%' | head -1)
[ -n "$version" ] || { echo "Error getting link"; exit 1; }
if [ "$version" != "$version0" ] || [ -e /opt/"$APP"/*.zsync ]; then
mkdir "/opt/$APP/tmp" && cd "/opt/$APP/tmp" || exit 1
[ -e /opt/"$APP"/*.zsync ] || notify-send "A new version of $APP is available, please wait"
[ -e /opt/"$APP"/*.zsync ] && wget "$version.zsync" 2>/dev/null || { wget "$version" || exit 1; }
# Use tar fx ./*tar* here for example in this line in case a compressed file is downloaded.
cd ..
mv ./tmp/*.zsync ./"$APP".zsync 2>/dev/null || mv --backup=t ./tmp/* ./"$APP"
[ -e /opt/"$APP"/*.zsync ] && { zsync "/opt/$APP/$APP.zsync" || notify-send -u critical "zsync failed to update $APP"; }
chmod a+x "/opt/$APP/$APP" || exit 1
echo "$version" > ./version
rm -R -f ./*zs-old ./*.part ./tmp ./*~
notify-send "$APP is updated!"
else
echo "Update not needed!"
fi
EOF
chmod a+x "/opt/$APP/AM-updater"

# LAUNCHER & ICON
cd "/opt/$APP" || exit 1
./"$APP" --appimage-extract *.desktop 1>/dev/null && mv ./squashfs-root/*.desktop ./"$APP".desktop
./"$APP" --appimage-extract .DirIcon 1>/dev/null && mv ./squashfs-root/.DirIcon ./DirIcon
COUNT=0
while [ "$COUNT" -lt 10 ]; do # Tries to get the actual icon/desktop if it is a symlink to another symlink
if [ -L ./"$APP".desktop ]; then
LINKPATH="$(readlink ./"$APP".desktop | sed 's|^\./||' 2>/dev/null)"
./"$APP" --appimage-extract "$LINKPATH" && mv ./squashfs-root/"$LINKPATH" ./"$APP".desktop
fi
if [ -L ./DirIcon ]; then
LINKPATH="$(readlink ./DirIcon | sed 's|^\./||' 2>/dev/null)"
./"$APP" --appimage-extract "$LINKPATH" && mv ./squashfs-root/"$LINKPATH" ./DirIcon
fi
[ ! -L ./"$APP".desktop ] && [ ! -L ./DirIcon ] && break
COUNT=$((COUNT + 1))
done
sed -i "s#Exec=[^ ]*#Exec=$APP#g; s#Icon=.*#Icon=/opt/$APP/icons/$APP#g" ./"$APP".desktop
mv ./"$APP".desktop /usr/share/applications/AM-"$APP".desktop && mv ./DirIcon ./icons/"$APP" 1>/dev/null
rm -R -f ./squashfs-root
75 changes: 75 additions & 0 deletions programs/x86_64/jdminecraftlauncher
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#!/bin/sh

# AM INSTALL SCRIPT VERSION 3.
set -u
APP=jdminecraftlauncher
SITE="https://sourceforge.net/projects/jdminecraftlauncher"

# CREATE DIRECTORIES AND ADD REMOVER
[ -n "$APP" ] && mkdir -p "/opt/$APP/tmp" "/opt/$APP/icons" && cd "/opt/$APP/tmp" || exit 1
printf "#!/bin/sh\nset -e\nrm -f /usr/local/bin/$APP\nrm -R -f /opt/$APP" > "/opt/$APP/remove"
printf '\n%s' "rm -f /usr/share/applications/AM-$APP.desktop" >> "/opt/$APP/remove"
chmod a+x "/opt/$APP/remove"

# DOWNLOAD AND PREPARE THE APP, $version is also used for updates
version=$(curl -Ls https://sourceforge.net/p/jdminecraftlauncher/activity/feed | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | grep -i "appimage" | grep -v '%' | head -1)
wget "$version" || exit 1
#wget "$version.zsync" 2> /dev/null # Comment out this line if you want to use zsync, warning that more often than not it is broken
# Use tar fx ./*tar* here for example in this line in case a compressed file is downloaded.
cd ..
mv ./tmp/* ./"$APP"
mv ./tmp/*.zsync ./"$APP".zsync 2>/dev/null
rm -R -f ./tmp || exit 1
echo "$version" > ./version
chmod a+x "/opt/$APP/$APP" || exit 1

# LINK TO PATH
ln -s "/opt/$APP/$APP" "/usr/local/bin/$APP"

# SCRIPT TO UPDATE THE PROGRAM
cat >> "/opt/$APP/AM-updater" << 'EOF'
#!/bin/sh
set -u
APP=jdminecraftlauncher
SITE="https://sourceforge.net/projects/jdminecraftlauncher"
version0=$(cat "/opt/$APP/version")
version=$(curl -Ls https://sourceforge.net/p/jdminecraftlauncher/activity/feed | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | grep -i "appimage" | grep -v '%' | head -1)
[ -n "$version" ] || { echo "Error getting link"; exit 1; }
if [ "$version" != "$version0" ] || [ -e /opt/"$APP"/*.zsync ]; then
mkdir "/opt/$APP/tmp" && cd "/opt/$APP/tmp" || exit 1
[ -e /opt/"$APP"/*.zsync ] || notify-send "A new version of $APP is available, please wait"
[ -e /opt/"$APP"/*.zsync ] && wget "$version.zsync" 2>/dev/null || { wget "$version" || exit 1; }
# Use tar fx ./*tar* here for example in this line in case a compressed file is downloaded.
cd ..
mv ./tmp/*.zsync ./"$APP".zsync 2>/dev/null || mv --backup=t ./tmp/* ./"$APP"
[ -e /opt/"$APP"/*.zsync ] && { zsync "/opt/$APP/$APP.zsync" || notify-send -u critical "zsync failed to update $APP"; }
chmod a+x "/opt/$APP/$APP" || exit 1
echo "$version" > ./version
rm -R -f ./*zs-old ./*.part ./tmp ./*~
notify-send "$APP is updated!"
else
echo "Update not needed!"
fi
EOF
chmod a+x "/opt/$APP/AM-updater"

# LAUNCHER & ICON
cd "/opt/$APP" || exit 1
./"$APP" --appimage-extract *.desktop 1>/dev/null && mv ./squashfs-root/*.desktop ./"$APP".desktop
./"$APP" --appimage-extract .DirIcon 1>/dev/null && mv ./squashfs-root/.DirIcon ./DirIcon
COUNT=0
while [ "$COUNT" -lt 10 ]; do # Tries to get the actual icon/desktop if it is a symlink to another symlink
if [ -L ./"$APP".desktop ]; then
LINKPATH="$(readlink ./"$APP".desktop | sed 's|^\./||' 2>/dev/null)"
./"$APP" --appimage-extract "$LINKPATH" && mv ./squashfs-root/"$LINKPATH" ./"$APP".desktop
fi
if [ -L ./DirIcon ]; then
LINKPATH="$(readlink ./DirIcon | sed 's|^\./||' 2>/dev/null)"
./"$APP" --appimage-extract "$LINKPATH" && mv ./squashfs-root/"$LINKPATH" ./DirIcon
fi
[ ! -L ./"$APP".desktop ] && [ ! -L ./DirIcon ] && break
COUNT=$((COUNT + 1))
done
sed -i "s#Exec=[^ ]*#Exec=$APP#g; s#Icon=.*#Icon=/opt/$APP/icons/$APP#g" ./"$APP".desktop
mv ./"$APP".desktop /usr/share/applications/AM-"$APP".desktop && mv ./DirIcon ./icons/"$APP" 1>/dev/null
rm -R -f ./squashfs-root
Loading

0 comments on commit b998dc9

Please sign in to comment.