add wow-addon-manager

This commit is contained in:
2023-09-30 11:53:05 +02:00
parent b6d07d4142
commit 4e3bf001b4
8 changed files with 462 additions and 12 deletions

View File

@@ -1,4 +1,5 @@
self: super: {
bento = (super.callPackage ../pkgs/bento { });
ykfde = (super.callPackage ../pkgs/ykfde { });
wow-addon-updater = (super.callPackage ../pkgs/wow-addon-updater { });
}

View File

@@ -0,0 +1,36 @@
https://github.com/RagedUnicorn/wow-vanilla-gearmenu.git
https://wowinterface.com/downloads/info15636-tullaRange.html
https://www.curseforge.com/wow/addons/bagsync/download
https://www.curseforge.com/wow/addons/quest_completist/download
http://www.curseforge.com/wow/addons/mmz/download
http://www.curseforge.com/wow/addons/clique/download
http://www.curseforge.com/wow/addons/grail/download
http://www.curseforge.com/wow/addons/tomtom/download
https://github.com/TekNoLogic/VendorBait.git
https://github.com/ColbyWanShinobi/gsReloadUI.git
https://github.com/ColbyWanShinobi/gsNoGryphons.git
https://github.com/ColbyWanShinobi/gsQuestSounds.git
https://www.curseforge.com/wow/addons/tradeskill-master/download
https://www.curseforge.com/wow/addons/monkey-speed/download
https://www.curseforge.com/wow/addons/cursortrail/download
http://wowinterface.com/downloads/info12995-NPCScan.html
https://www.curseforge.com/wow/addons/advancedinterfaceoptions/download
https://www.curseforge.com/wow/addons/weaponswingtimer/download
https://www.curseforge.com/wow/addons/azeroth-auto-pilot-classic/download
https://www.curseforge.com/wow/addons/details/download
https://www.curseforge.com/wow/addons/big-wigs/download
https://www.curseforge.com/wow/addons/bartender4/download
https://www.curseforge.com/wow/addons/little-wigs/download
https://www.curseforge.com/wow/addons/omni-cc/download
https://www.curseforge.com/wow/addons/questie/download
https://www.curseforge.com/wow/addons/atlaslootclassic/download
https://www.curseforge.com/wow/addons/mapster/download
https://www.curseforge.com/wow/addons/vendor-price/download
https://www.curseforge.com/wow/addons/leatrix-plus-classic/download
https://www.curseforge.com/wow/addons/inventorian/download
https://www.curseforge.com/wow/addons/bagnon/download
https://www.wowinterface.com/downloads/info25006-ClassicAuraDurations.html
https://www.wowinterface.com/downloads/info24958-AuctionatorClassicquickfix.html
https://www.wowinterface.com/downloads/info25036-DruidBarClassic.html
https://www.curseforge.com/wow/addons/outfitter/download
https://wowinterface.com/downloads/info24944-WeakAuras2Classic.html

View File

@@ -0,0 +1,17 @@
https://wowinterface.com/downloads/info15636-tullaRange.html
https://addon.theunderminejournal.com/TheUndermineJournal.zip
https://github.com/TekNoLogic/VendorBait.git
https://github.com/ColbyWanShinobi/gsReloadUI.git
https://github.com/ColbyWanShinobi/gsNoGryphons.git
https://github.com/ColbyWanShinobi/gsQuestSounds.git
http://wowinterface.com/downloads/info12995-NPCScan.html
https://wowinterface.com/downloads/info5108-Clique.html
https://wowinterface.com/downloads/info20804-Grail.html
https://wowinterface.com/downloads/info7032-TomTom.html
https://wowinterface.com/downloads/info24910-WeakAuras2.html
https://wowinterface.com/downloads/info7296-Pawn.html
https://wowinterface.com/downloads/info20805-Wholly.html
https://wowinterface.com/downloads/info24802-ChampionCommander.html
https://www.wowinterface.com/downloads/info25313-Dejunk.html
https://www.wowinterface.com/downloads/info10089-ItemID.html
https://www.wowinterface.com/downloads/info24508-ImprovedNameplates.html

View File

@@ -0,0 +1,12 @@
{ pkgs, lib, stdenv, makeWrapper }:
stdenv.mkDerivation {
name = "wow-addon-manager";
src = "./";
nativeBuildInputs = [ makeWrapper ];
installPhase = ''
install -Dm555 wow-addon-manager $out/bin/
install -Dm444 addons.list.sample $out/share/
install -Dm444 addons.classic.list.sample $out/share/
'';
}

View File

@@ -0,0 +1,256 @@
#!/bin/bash
set -e
function getAddonProvider {
#echo "Finding Addon Provider for URL: ${GREEN}$1${CRESET}"
local PROVIDER="$(echo $1 | grep -E -o '\w+\.com')"
echo $PROVIDER
#PROVIDER="$(echo $1 | grep -E -o 'w+.com')"
#echo $PROVIDER
}
function printList {
ADDONCOUNT=0
for i in "${ADDONS[@]}";
do
echo "$ADDONCOUNT - $i"
ADDONCOUNT=$((ADDONCOUNT + 1))
done
exit
}
function parseFileName {
local FILENAME="$(echo $1 | grep -E -o '[^\/]+$')"
echo "$FILENAME"
}
function parseCurseFileNameFromListURL {
local FILENAME="$(echo $1 | grep -E -o 'addons/.+/download' | cut -f2 -d'/')"
echo "${FILENAME}.zip"
}
function parseDirName {
local DIRNAME="$(echo $1 | sed -E 's/.{4}$/ /g')"
}
function parseAddonDirName {
echo "parse!"
#Get the name of the addon directory from the zip file
#local ADDONDIR="$(unzip -l /tmp/$ZFILE | grep -E -o ' \w+\/' | sort | uniq | grep -E -o '\w+')"
#echo "Searching Addon archive and found directory named: ${GREEN}$ADDONDIR${CRESET}"
}
function dlCurseAddon {
echo "Updating Addon from curseforge.com..."
#Get the URL to download the file
local DOMAIN="https://www.curseforge.com"
local CURSELINK="$(wget --random-wait -q $1 -O - | grep -i "If your download" | grep -E -o 'href=\".+\"' | cut -f2 -d'"')"
echo "CurseLink: ${GREEN}$CURSELINK${CRESET}"
local DLURL="${DOMAIN}${CURSELINK}"
#if [ "$DLURL" != '' ]
#then
echo "Download URL: ${GREEN}$DLURL${CRESET}"
#Get the name of the file itself
local ZFILE=$(parseCurseFileNameFromListURL "$DLURL")
echo "Zip File: ${GREEN}$ZFILE${CRESET}"
#Get the name of just the zip file
local ZDIRNAME=$(parseDirName $ZFILE)
#Remove the temp dir if it exists
rm -rf /tmp/CoS/tmpAddon
#Re-create the dir
mkdir -p /tmp/CoS/tmpAddon
#Download the file
echo "Downloading file: ${GREEN}$DLURL${CRESET}"
cd /tmp/CoS
wget --random-wait -N -O ${ZFILE} "$DLURL"
#Unzip the file to a temp directory
ZDIRNAME=tmpCurseDl
echo "Unzipping file: ${GREEN}/tmp/$ZFILE${CRESET} to ${GREEN}/tmp/$ZDIRNAME${CRESET}"
unzip -o "/tmp/CoS/$ZFILE" -d /tmp/CoS/tmpAddon
#Copy only new files into the Addon directory
rsync -hvrPt /tmp/CoS/tmpAddon/ "$ADDONPATH"
#else
#echo "Download failed for: $1"
#fi
}
function dlIndy {
echo "Updating Independent Addon..."
#Get the URL to download the file
local DLURL=$1
echo "Download URL: ${GREEN}$DLURL${CRESET}"
#Get the name of the file itself
local ZFILE=$(parseFileName "$DLURL")
echo "Zip File: ${GREEN}$ZFILE${CRESET}"
#Get the name of just the zip file
local ZDIRNAME=$(parseDirName $ZFILE)
#Remove the temp dir if it exists
rm -rf /tmp/CoS/tmpAddon
#Re-create the dir
mkdir -p /tmp/CoS/tmpAddon
#Download the file
echo "Downloading file: ${GREEN}$DLURL${CRESET}"
cd /tmp/CoS
wget --random-wait -N $DLURL
#Unzip the file to a temp directory
ZDIRNAME=tmpCurseDl
echo "Unzipping file: ${GREEN}/tmp/$ZFILE${CRESET} to ${GREEN}/tmp/$ZDIRNAME${CRESET}"
unzip -o "/tmp/CoS/$ZFILE" -d /tmp/CoS/tmpAddon
#Copy only new files into the Addon directory
rsync -hvrPt /tmp/CoS/tmpAddon/ "$ADDONPATH"
}
function dlGitAddon {
echo "Updating Addon using git..."
#Get the URL to download the file
local DLURL=${1}
echo "Download URL: ${GREEN}${DLURL}${CRESET}"
#Get the name of just the zip file
local GDIRNAME=$(echo ${DLURL} | grep -E -o '[-[:alnum:]]+.git' | cut -f1 -d.)
if [ -d "${ADDONPATH}/${GDIRNAME}" ]
then
#Is this a healthy git folder?
if [ -d "${ADDONPATH}/${GDIRNAME}/.git" ]
then
echo "pull from healthy git directory (${ADDONPATH}/${GDIRNAME}) for : ${GREEN}$GDIRNAME${CRESET}"
git -C "${ADDONPATH}/${GDIRNAME}" pull ${DLURL}
else
echo "Removing git directory (${ADDONPATH}/${GDIRNAME}) for : ${GREEN}${GDIRNAME}${CRESET}"
rm -rfv "${ADDONPATH}/${GDIRNAME}"
echo "Cloning from git repository for : ${GREEN}${GDIRNAME}${CRESET}"
git -C "${ADDONPATH}" clone ${DLURL}
fi
else
echo "Removing git directory (${ADDONPATH}/${GDIRNAME}) for : ${GREEN}${GDIRNAME}${CRESET}"
rm -rfv "${ADDONPATH}/${GDIRNAME}"
echo "Cloning from git repository for : ${GREEN}${GDIRNAME}${CRESET}"
git -C "${ADDONPATH}" clone ${DLURL}
fi
}
function dlWowIAddon {
echo "Updating Addon from wowinterface.com..."
#Get the URL to download the file
local DLURL="https://www.wowinterface.com/downloads/getfile.php?id=$(wget --random-wait -q $1 -O - | grep landing | grep -E -o 'fileid=[[:digit:]]+' | uniq | cut -f2 -d=)"
echo "Download URL: ${GREEN}$DLURL${CRESET}"
#Get the name of the file itself
local ZFILE=$(curl -Is $DLURL | grep content-disposition | cut -f2 -d\")
echo "Zip File: ${GREEN}$ZFILE${CRESET}"
#Get the name of just the zip file
local ZDIRNAME=$(parseDirName $ZFILE)
#Remove the temp dir if it exists
rm -rf /tmp/CoS/tmpAddon
#Re-create the dir
mkdir -p /tmp/CoS/tmpAddon
#Download the file
echo "Downloading file: ${GREEN}$DLURL${CRESET}"
cd /tmp/CoS
wget --content-disposition --random-wait -N $DLURL
#Unzip the file to a temp directory
ZDIRNAME=tmpCurseDl
echo "Unzipping file: ${GREEN}/tmp/$ZFILE${CRESET} to ${GREEN}/tmp/$ZDIRNAME${CRESET}"
unzip -o "/tmp/CoS/$ZFILE" -d /tmp/CoS/tmpAddon
#Copy only new files into the Addon directory
rsync -hvrPt /tmp/CoS/tmpAddon/ "$ADDONPATH"
}
function dlAddon {
echo "Finding Addon Provider for URL: ${GREEN}$1${CRESET}"
PROVIDER=$(getAddonProvider $1)
echo "Found Provider: ${GREEN}$PROVIDER${CRESET}"
if [ "$PROVIDER" == "curseforge.com" ]
then
dlCurseAddon $1
elif [ "$PROVIDER" == "wowinterface.com" ]
then
dlWowIAddon $1
elif [ "$PROVIDER" == "github.com" ]
then
dlGitAddon $1
else
dlIndy $1
fi
}
REMEMBERPATH="$(pwd)"
SCRIPTDIR="$(echo $0 | sed 's/\/cullingOfStratholme.sh//g')"
ADDONLIST=addon.list
ADDONPATH=/home/dominik/.local/share/Steam/steamapps/compatdata/3525601306/pfx/drive_c/Program Files (x86)/World of Warcraft/_retail_/Interface/AddOns
if [ "$1" == "classic" ]
then
echo "Install mods for classic..."
ADDONLIST=addon.classic.list
ADDONPATH=/home/dominik/.local/share/Steam/steamapps/compatdata/3525601306/pfx/drive_c/Program Files (x86)/World of Warcraft/_classic_/Interface/AddOns
echo ${ADDONLIST}
echo ${ADDONPATH}
fi
ALFULL=/etc/wow-addon-manager/$ADDONLIST
#Check to see if the text file exists
if [ ! -f $ALFULL ]
then
echo "Could not find file: $ADDONLIST"
fi
declare -a ADDONS
ADDONCOUNT=0
while IFS= read -r f || [ -n "${f}" ]
do
ADDONS[$ADDONCOUNT]=$f
ADDONCOUNT=$(($ADDONCOUNT + 1))
done < $ALFULL
GREEN="$(tput setaf 2)"
CRESET="$(tput sgr0)"
if [ "$1" == "list" ]
then
printList
cd ${REMEMBERPATH}
exit
fi
if [ "$1" == "test" ]
then
ADDONURL=${ADDONS[$1]}
dlAddon $ADDONURL
cd ${REMEMBERPATH}
exit
fi
for i in "${ADDONS[@]}";
do
dlAddon $i
done
cd ${REMEMBERPATH}