110 lines
2.7 KiB
Python
110 lines
2.7 KiB
Python
import requests
|
|
import tqdm
|
|
import tarfile
|
|
import os
|
|
import shutil
|
|
import getopt
|
|
import sys
|
|
|
|
discordUrl = "https://discord.com/api/download?platform=linux&format=tar.gz"
|
|
tmpDir = "/tmp/dup/"
|
|
confDir = "~/.config/"
|
|
installDir = os.path.expanduser("~") + "/.local/lib/Discord"
|
|
execDir = os.path.expanduser("~") + "/.local/bin/Discord"
|
|
|
|
def download(url: str, dest: str):
|
|
with open(tmpDir + dest, 'wb') as f:
|
|
with requests.get(url, stream=True) as r:
|
|
r.raise_for_status()
|
|
totalLength = int(r.headers.get('content-length', 0))
|
|
|
|
tqdm_params = {
|
|
'desc': dest,
|
|
'total': totalLength,
|
|
'miniters': 1,
|
|
'bar_format' : "{desc}: |{bar:40}| {percentage:3.1f}% ",
|
|
}
|
|
with tqdm.tqdm(**tqdm_params) as pb:
|
|
for chunk in r.iter_content(chunk_size=8192):
|
|
pb.update(len(chunk))
|
|
f.write(chunk)
|
|
|
|
def rm(dir: str):
|
|
try:
|
|
if os.path.isdir(dir) == True:
|
|
shutil.rmtree(dir)
|
|
else:
|
|
os.remove(dir)
|
|
except Exception as err:
|
|
print(err)
|
|
|
|
# def rm(folder: str):
|
|
# try:
|
|
# shutil.rmtree(folder)
|
|
# except Exception as err:
|
|
# print(err)
|
|
|
|
def mkdir(name: str):
|
|
try:
|
|
os.mkdir(name)
|
|
except Exception as err:
|
|
print(err)
|
|
|
|
def installDiscord():
|
|
rm(tmpDir)
|
|
mkdir(tmpDir)
|
|
|
|
print("Downloading Discord...")
|
|
download(discordUrl, "discord.tar.gz")
|
|
|
|
print("Extracting..." )
|
|
file = tarfile.open(tmpDir+"/discord.tar.gz")
|
|
mkdir("/tmp/dup/discord")
|
|
file.extractall(tmpDir+"/discord")
|
|
file.close()
|
|
|
|
print("Installing...")
|
|
rm(installDir)
|
|
shutil.move(tmpDir+"/discord/Discord", installDir)
|
|
|
|
os.symlink(installDir + "/Discord", execDir)
|
|
|
|
print("Cleaning up...")
|
|
# os.remove(tmpDir+"discord.tar.gz")
|
|
rm(tmpDir)
|
|
|
|
def uninstall():
|
|
rm(installDir)
|
|
rm(tmpDir)
|
|
rm(confDir)
|
|
rm(execDir)
|
|
|
|
|
|
argumentList = sys.argv[1:]
|
|
|
|
# Options
|
|
options = "hiu"
|
|
|
|
# Long options
|
|
long_options = ["help", "install", "uninstall"]
|
|
|
|
try:
|
|
# Parsing argument
|
|
arguments, values = getopt.getopt(argumentList, options, long_options)
|
|
|
|
# checking each argument
|
|
for currentArgument, currentValue in arguments:
|
|
|
|
if currentArgument in ("-h", "--help"):
|
|
print ("Displaying Help")
|
|
|
|
elif currentArgument in ("-i", "--install"):
|
|
installDiscord()
|
|
|
|
elif currentArgument in ("-u", "--uninstall"):
|
|
uninstall()
|
|
|
|
except getopt.error as err:
|
|
# output error, and return with an error code
|
|
print (str(err))
|