mirror of
https://github.com/staxrip/staxrip.git
synced 2026-10-18 22:50:34 +08:00
132 lines
4.5 KiB
Python
132 lines
4.5 KiB
Python
from bs4 import BeautifulSoup
|
|
import os
|
|
from requests import get
|
|
from requests.exceptions import RequestException
|
|
from contextlib import closing
|
|
import urllib
|
|
import shutil
|
|
import psutil
|
|
from tqdm import tqdm
|
|
|
|
class TqdmUpTo(tqdm):
|
|
"""Provides `update_to(n)` which uses `tqdm.update(delta_n)`."""
|
|
def update_to(self, b=1, bsize=1, tsize=None):
|
|
"""
|
|
b : int, optional
|
|
Number of blocks transferred so far [default: 1].
|
|
bsize : int, optional
|
|
Size of each block (in tqdm units) [default: 1].
|
|
tsize : int, optional
|
|
Total size (in tqdm units). If [default: None] remains unchanged.
|
|
"""
|
|
if tsize is not None:
|
|
self.total = tsize
|
|
self.update(b * bsize - self.n) # will also set self.n = b * bsize
|
|
|
|
def simple_get(url):
|
|
try:
|
|
with closing(get(url, stream=True)) as resp:
|
|
if is_good_response(resp):
|
|
return resp.content
|
|
else:
|
|
return None
|
|
|
|
except RequestException as e:
|
|
log_error('Error during requests to {0} : {1}'.format(url, str(e)))
|
|
return None
|
|
|
|
|
|
def is_good_response(resp):
|
|
content_type = resp.headers['Content-Type'].lower()
|
|
return (resp.status_code == 200
|
|
and content_type is not None
|
|
and content_type.find('html') > -1)
|
|
|
|
|
|
def log_error(e):
|
|
print(e)
|
|
|
|
def Downloader7z():
|
|
Link = "http://download.sourceforge.net/sevenzip/7za920.zip"
|
|
Path = os.path.abspath('.')
|
|
ZipDir = os.path.join(Path, "7z")
|
|
UnZip = os.path.join(Path, os.path.basename(Link))
|
|
with TqdmUpTo(unit='B', unit_scale=True, miniters=1,
|
|
desc=Link.split('/')[-1]) as t:
|
|
urllib.request.urlretrieve(Link, filename=UnZip,
|
|
reporthook=t.update_to, data=None)
|
|
shutil.unpack_archive(UnZip,ZipDir,'zip')
|
|
os.remove(UnZip)
|
|
|
|
def LatestBuild():
|
|
raw_html = simple_get("https://github.com/Revan654/staxrip/releases/latest")
|
|
html = BeautifulSoup(raw_html, 'html5lib')
|
|
for c, core in enumerate(html.select('li.py-1 > a > strong', limit=1)):
|
|
indexCore=str(core.text)
|
|
return(indexCore)
|
|
|
|
def LatestBuildTag():
|
|
raw_html = simple_get("https://github.com/Revan654/staxrip/releases/latest")
|
|
html = BeautifulSoup(raw_html, 'html5lib')
|
|
for c, core in enumerate(html.select('.f1 > a', limit=1)):
|
|
indexCore=str(core.text)
|
|
TrimLink=indexCore.replace(" - x64", "")
|
|
return(TrimLink)
|
|
|
|
|
|
def DownloadStaxRip():
|
|
Link = "https://github.com/Revan654/staxrip/releases/download/{}/{}".format(LatestBuildTag(),LatestBuild())
|
|
Path = os.path.abspath('.')
|
|
StaxRip7z = os.path.join(Path, os.path.basename(Link))
|
|
with TqdmUpTo(unit='B', unit_scale=True, miniters=1,
|
|
desc=Link.split('/')[-1]) as t:
|
|
urllib.request.urlretrieve(Link, filename=StaxRip7z,
|
|
reporthook=t.update_to, data=None)
|
|
ZipDir = os.path.join(Path, "7z")
|
|
Exe = os.path.join(ZipDir, "7za.exe")
|
|
File = os.path.join(Path, LatestBuild())
|
|
os.system('{} x -y "{}" -o"{}\"'.format(Exe, File, Path))
|
|
os.remove(StaxRip7z)
|
|
shutil.rmtree(ZipDir)
|
|
|
|
def get_version_number():
|
|
Path = os.path.abspath('.')
|
|
StaxRip = os.path.join(Path,"StaxRip.exe")
|
|
from win32api import GetFileVersionInfo, LOWORD, HIWORD
|
|
info = GetFileVersionInfo (StaxRip, "\\")
|
|
ms = info['FileVersionMS']
|
|
ls = info['FileVersionLS']
|
|
Version = "{}.{}.{}.{}".format(HIWORD (ms), LOWORD (ms), HIWORD (ls), LOWORD (ls))
|
|
return(Version)
|
|
|
|
def ProcessKill():
|
|
Process = "StaxRip.exe"
|
|
for proc in psutil.process_iter():
|
|
if proc.name() == Process:
|
|
proc.kill()
|
|
|
|
def StartStaxRip():
|
|
Path = os.path.abspath('.')
|
|
StaxRip = os.path.join(Path,"StaxRip.exe")
|
|
os.system("{}".format(StaxRip))
|
|
|
|
def Main():
|
|
Version = get_version_number()
|
|
URLBuild = LatestBuildTag()
|
|
if Version < URLBuild:
|
|
print("Local Build: {}".format(Version))
|
|
print("Release Build: {}".format(URLBuild))
|
|
print("Downloading Latest Release")
|
|
ProcessKill()
|
|
print("Downloading 7z")
|
|
Downloader7z()
|
|
print("Downloading StaxRip")
|
|
DownloadStaxRip()
|
|
StartStaxRip()
|
|
else:
|
|
print("Local Build: {}".format(Version))
|
|
print("Release Build: {}".format(URLBuild))
|
|
print("Your Already Running the Latest Release")
|
|
|
|
if __name__ == '__main__':
|
|
Main() |