update app

This commit is contained in:
rlx 2016-01-21 14:30:47 +05:30
parent 9da362ced6
commit a743fd2404
12 changed files with 210 additions and 71 deletions

View file

@ -3,7 +3,7 @@
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>BuildMachineOSBuild</key> <key>BuildMachineOSBuild</key>
<string>15C50</string> <string>15D21</string>
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>
<string>en</string> <string>en</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
@ -19,7 +19,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>0.5</string> <string>0.6</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleSupportedPlatforms</key> <key>CFBundleSupportedPlatforms</key>

View file

@ -1,10 +1,11 @@
<!DOCTYPE HTML>
<html> <html>
<head> <head>
<title>Open Media Library</title> <title>Open Media Library</title>
<meta charset="UTF-8"/>
<link href="/png/oml.png" rel="icon" type="image/png">
<script src="/js/install.js" type="text/javascript"></script>
<meta name="google" value="notranslate"/>
</head> </head>
<body> <body></body>
Installing Open Media Library...<br>
<div id="status"></div>
<script src="js/install.js"></script>
</body>
</html> </html>

View file

@ -40,6 +40,13 @@ class Handler(SimpleHTTPServer.SimpleHTTPRequestHandler):
with open(path) as fd: with open(path) as fd:
content = fd.read() content = fd.read()
self.send_response(200, 'OK') self.send_response(200, 'OK')
content_type = {
'html': 'text/html',
'png': 'image/png',
'svg': 'image/svg+xml',
'txt': 'text/plain',
}.get(path.split('.')[-1], 'txt')
self.send_header('Content-Type', content_type)
else: else:
self.send_response(404, 'not found') self.send_response(404, 'not found')
content = '404 not found' content = '404 not found'
@ -52,7 +59,9 @@ class Handler(SimpleHTTPServer.SimpleHTTPRequestHandler):
class Install(Thread): class Install(Thread):
release_url = "http://downloads.openmedialibrary.com/release.json" release_url = "http://downloads.openmedialibrary.com/release.json"
status = {} status = {
'step': 'Downloading...'
}
def __init__(self, target, httpd): def __init__(self, target, httpd):
target = os.path.normpath(os.path.join(os.path.abspath(target))) target = os.path.normpath(os.path.join(os.path.abspath(target)))
@ -66,35 +75,30 @@ class Install(Thread):
target = self.target target = self.target
makedirs(target) makedirs(target)
os.chdir(target) os.chdir(target)
self.status["step"] = 'Downloading...'
release = self.get_release() release = self.get_release()
self.status["release"] = release self.status["release"] = release
for module in release['modules']: self.status["progress"] = 0
self.status["step"] = 'downloading %s' % module for module in sorted(release['modules']):
self.status["progress"] = 0
self.status["size"] = 0
package_tar = release['modules'][module]['name'] package_tar = release['modules'][module]['name']
url = self.release_url.replace('release.json', package_tar) url = self.release_url.replace('release.json', package_tar)
self.download(url, package_tar) self.download(url, package_tar)
self.status["step"] = 'extracting %s' % module self.status["step"] = 'Installing...'
self.status["progress"] = 0 for module in sorted(release['modules']):
package_tar = release['modules'][module]['name']
tar = tarfile.open(package_tar) tar = tarfile.open(package_tar)
tar.extractall() tar.extractall()
tar.close() tar.close()
os.unlink(package_tar) os.unlink(package_tar)
os.symlink('openmedialibrary/ctl', 'ctl') os.symlink('openmedialibrary/ctl', 'ctl')
self.status["progress"] = 0
self.status["step"] = "setup"
os.system("./ctl setup")
self.status["progress"] = 1
makedirs('data') makedirs('data')
with open('data/release.json', 'w') as fd: with open('data/release.json', 'w') as fd:
json.dump(release, fd, indent=2) json.dump(release, fd, indent=2)
self.status = {"installation finished. starting...": True} self.status = {"relaunch": True}
os.system("./ctl start &") os.system("./ctl start &")
time.sleep(1) time.sleep(5)
self.httpd.shutdown() self.httpd.shutdown()
def download(self, url, filename): def download(self, url, filename):
dirname = os.path.dirname(filename) dirname = os.path.dirname(filename)
if dirname: if dirname:
@ -108,7 +112,6 @@ class Install(Thread):
while data: while data:
if size: if size:
available += len(data) available += len(data)
self.status["progress"] = available/size
f.write(data) f.write(data)
data = u.read(4096) data = u.read(4096)
@ -118,7 +121,6 @@ class Install(Thread):
return data return data
if __name__ == '__main__': if __name__ == '__main__':
if len(sys.argv) == 1: if len(sys.argv) == 1:
target = os.path.expanduser("~/Library/Application Support/Open Media Library") target = os.path.expanduser("~/Library/Application Support/Open Media Library")

View file

@ -1,44 +1,148 @@
function load() { 'use strict';
var base = '//127.0.0.1:9842',
ws = new WebSocket('ws:' + base + '/ws');
ws.onopen = function(event) {
document.location.href = 'http:' + base;
};
ws.onerror = function(event) {
ws.close();
setTimeout(load, 500);
};
ws.onclose = function(event) {
setTimeout(load, 500);
};
};
function update() { (function() {
var xhr = new XMLHttpRequest();
xhr.onload = function() { loadImages(function(images) {
var response = JSON.parse(this.responseText); loadScreen(images);
if (response.step) { initUpdate();
var status = response.step; });
if (response.progress) {
status = parseInt(response.progress * 100) + '% ' + status; function initUpdate(browserSupported) {
} window.update = {};
document.getElementById('status').innerHTML = status; update.status = document.createElement('div');
setTimeout(update, 1000); update.status.className = 'OxElement';
} else { update.status.style.position = 'absolute';
document.getElementById('status').innerHTML = "done"; update.status.style.left = '16px';
setTimeout(load, 500); update.status.style.top = '336px';
} update.status.style.right = 0;
}; update.status.style.bottom = 0;
xhr.onerror = function() { update.status.style.width = '512px';
var status = document.getElementById('status').innerHTML; update.status.style.height = '16px';
if (['done', 'setup'].indexOf(status) == -1) { update.status.style.margin = 'auto';
document.getElementById('status').innerHTML = "error"; update.status.style.textAlign = 'center';
} update.status.style.color = 'rgb(16, 16, 16)';
load(); update.status.style.fontFamily = 'Lucida Grande, Segoe UI, DejaVu Sans, Lucida Sans Unicode, Helvetica, Arial, sans-serif';
update.status.style.fontSize = '11px';
document.querySelector('#loadingScreen').appendChild(update.status);
update.status.innerHTML = '';
updateStatus();
} }
xhr.open('get', '/status');
xhr.send();
} function load() {
var base = '//127.0.0.1:9842',
ws = new WebSocket('ws:' + base + '/ws');
ws.onopen = function(event) {
document.location.href = 'http:' + base;
};
ws.onerror = function(event) {
ws.close();
setTimeout(load, 500);
};
ws.onclose = function(event) {
setTimeout(load, 500);
};
}
update(); function loadImages(callback) {
var images = {};
images.logo = document.createElement('img');
images.logo.onload = function() {
images.logo.style.position = 'absolute';
images.logo.style.left = 0;
images.logo.style.top = 0;
images.logo.style.right = 0;
images.logo.style.bottom = '96px';
images.logo.style.width = '256px';
images.logo.style.height = '256px';
images.logo.style.margin = 'auto';
images.logo.style.MozUserSelect = 'none';
images.logo.style.MSUserSelect = 'none';
images.logo.style.OUserSelect = 'none';
images.logo.style.WebkitUserSelect = 'none';
images.loadingIcon = document.createElement('img');
images.loadingIcon.setAttribute('id', 'loadingIcon');
images.loadingIcon.style.position = 'absolute';
images.loadingIcon.style.left = '16px';
images.loadingIcon.style.top = '256px'
images.loadingIcon.style.right = 0;
images.loadingIcon.style.bottom = 0;
images.loadingIcon.style.width = '32px';
images.loadingIcon.style.height = '32px';
images.loadingIcon.style.margin = 'auto';
images.loadingIcon.style.MozUserSelect = 'none';
images.loadingIcon.style.MSUserSelect = 'none';
images.loadingIcon.style.OUserSelect = 'none';
images.loadingIcon.style.WebkitUserSelect = 'none';
images.loadingIcon.src = '/svg/symbolLoading.svg';
callback(images);
};
images.logo.src = '/png/oml.png';
}
function loadScreen(images) {
var loadingScreen = document.createElement('div');
loadingScreen.setAttribute('id', 'loadingScreen');
loadingScreen.className = 'OxScreen';
loadingScreen.style.position = 'absolute';
loadingScreen.style.width = '100%';
loadingScreen.style.height = '100%';
loadingScreen.style.backgroundColor = 'rgb(224, 224, 224)';
loadingScreen.style.zIndex = '1002';
loadingScreen.appendChild(images.logo);
loadingScreen.appendChild(images.loadingIcon);
// FF3.6 document.body can be undefined here
window.onload = function() {
document.body.style.margin = 0;
document.body.appendChild(loadingScreen);
startAnimation();
};
// IE8 does not call onload if already loaded before set
document.body && window.onload();
}
function startAnimation() {
var css, deg = 0, loadingIcon = document.getElementById('loadingIcon'),
previousTime = +new Date();
var animationInterval = setInterval(function() {
var currentTime = +new Date(),
delta = (currentTime - previousTime) / 1000;
previousTime = currentTime;
deg = Math.round((deg + delta * 360) % 360 / 30) * 30;
css = 'rotate(' + deg + 'deg)';
loadingIcon.style.MozTransform = css;
loadingIcon.style.MSTransform = css;
loadingIcon.style.OTransform = css;
loadingIcon.style.WebkitTransform = css;
loadingIcon.style.transform = css;
}, 83);
}
function updateStatus() {
var xhr = new XMLHttpRequest();
xhr.onload = function() {
var response = JSON.parse(this.responseText);
if (response.step) {
var status = response.step;
if (response.progress) {
status = parseInt(response.progress * 100) + '% ' + status;
}
update.status.innerHTML = status;
setTimeout(updateStatus, 1000);
} else {
update.status.innerHTML = 'Relaunching...';
setTimeout(load, 500);
}
};
xhr.onerror = function() {
var status = update.status.innerHTML;
if (['Relaunching...', ''].indexOf(status) == -1) {
update.status.innerHTML = 'Installation failed';
}
load();
}
xhr.open('get', '/status');
xhr.send();
}
}());

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View file

@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256">
<g transform="translate(128, 128)" stroke="#808080" stroke-linecap="round" stroke-width="28">
<line x1="0" y1="-114" x2="0" y2="-70" transform="rotate(0)" opacity="1"/>
<line x1="0" y1="-114" x2="0" y2="-70" transform="rotate(30)" opacity="0.083333"/>
<line x1="0" y1="-114" x2="0" y2="-70" transform="rotate(60)" opacity="0.166667"/>
<line x1="0" y1="-114" x2="0" y2="-70" transform="rotate(90)" opacity="0.25"/>
<line x1="0" y1="-114" x2="0" y2="-70" transform="rotate(120)" opacity="0.333333"/>
<line x1="0" y1="-114" x2="0" y2="-70" transform="rotate(150)" opacity="0.416667"/>
<line x1="0" y1="-114" x2="0" y2="-70" transform="rotate(180)" opacity="0.5"/>
<line x1="0" y1="-114" x2="0" y2="-70" transform="rotate(210)" opacity="0.583333"/>
<line x1="0" y1="-114" x2="0" y2="-70" transform="rotate(240)" opacity="0.666667"/>
<line x1="0" y1="-114" x2="0" y2="-70" transform="rotate(270)" opacity="0.75"/>
<line x1="0" y1="-114" x2="0" y2="-70" transform="rotate(300)" opacity="0.833333"/>
<line x1="0" y1="-114" x2="0" y2="-70" transform="rotate(330)" opacity="0.916667"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -10,7 +10,7 @@
</data> </data>
<key>Resources/Assets.car</key> <key>Resources/Assets.car</key>
<data> <data>
ODsO+3BxiGNQy86C/peDRQ8Ibi0= J0bcbd6bu3teEBZKNEEQTcykNSI=
</data> </data>
<key>Resources/Base.lproj/MainMenu.nib</key> <key>Resources/Base.lproj/MainMenu.nib</key>
<dict> <dict>
@ -23,7 +23,7 @@
</dict> </dict>
<key>Resources/index.html</key> <key>Resources/index.html</key>
<data> <data>
uuFF5PL3dHePhuXYRTqVqKH3NUM= JIBakF3URAgkk7dR8veswSN9zLI=
</data> </data>
<key>Resources/install.html</key> <key>Resources/install.html</key>
<data> <data>
@ -31,11 +31,19 @@
</data> </data>
<key>Resources/install.py</key> <key>Resources/install.py</key>
<data> <data>
J2O109peIBDCRUOCjyOTdnJYQVQ= 8P8EjUEoWuHCRIRvQTi7vbDhGoM=
</data> </data>
<key>Resources/js/install.js</key> <key>Resources/js/install.js</key>
<data> <data>
kfsT9KBHf6VW5yoK9UpGWDo0nuM= Vm6iTydoG1DWT+GNOLDV51fPEaA=
</data>
<key>Resources/png/oml.png</key>
<data>
yAW1cp8HHJoIRTYucCTGeG575vM=
</data>
<key>Resources/svg/symbolLoading.svg</key>
<data>
bp9z14AgWlNHFY+FF4dBnbl127s=
</data> </data>
</dict> </dict>
<key>files2</key> <key>files2</key>
@ -127,7 +135,7 @@
</data> </data>
<key>Resources/Assets.car</key> <key>Resources/Assets.car</key>
<data> <data>
ODsO+3BxiGNQy86C/peDRQ8Ibi0= J0bcbd6bu3teEBZKNEEQTcykNSI=
</data> </data>
<key>Resources/Base.lproj/MainMenu.nib</key> <key>Resources/Base.lproj/MainMenu.nib</key>
<dict> <dict>
@ -140,7 +148,7 @@
</dict> </dict>
<key>Resources/index.html</key> <key>Resources/index.html</key>
<data> <data>
uuFF5PL3dHePhuXYRTqVqKH3NUM= JIBakF3URAgkk7dR8veswSN9zLI=
</data> </data>
<key>Resources/install.html</key> <key>Resources/install.html</key>
<data> <data>
@ -148,11 +156,19 @@
</data> </data>
<key>Resources/install.py</key> <key>Resources/install.py</key>
<data> <data>
J2O109peIBDCRUOCjyOTdnJYQVQ= 8P8EjUEoWuHCRIRvQTi7vbDhGoM=
</data> </data>
<key>Resources/js/install.js</key> <key>Resources/js/install.js</key>
<data> <data>
kfsT9KBHf6VW5yoK9UpGWDo0nuM= Vm6iTydoG1DWT+GNOLDV51fPEaA=
</data>
<key>Resources/png/oml.png</key>
<data>
yAW1cp8HHJoIRTYucCTGeG575vM=
</data>
<key>Resources/svg/symbolLoading.svg</key>
<data>
bp9z14AgWlNHFY+FF4dBnbl127s=
</data> </data>
</dict> </dict>
<key>rules</key> <key>rules</key>

Binary file not shown.

Binary file not shown.

Binary file not shown.