summaryrefslogtreecommitdiff
path: root/js/index.js
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2014-06-08 18:00:07 +0200
committerschneefux <schneefux+commit@schneefux.xyz>2016-08-15 20:02:39 +0200
commit030a86d02d9c0afeac09a5626bbdadf653728008 (patch)
tree862579f8e0fee5ba2f7d822d76656016cd0e0c78 /js/index.js
parent990768880a69667285a719b8f18b35c82370f317 (diff)
downloadwvs-vplan-030a86d02d9c0afeac09a5626bbdadf653728008.tar.gz
wvs-vplan-030a86d02d9c0afeac09a5626bbdadf653728008.zip
Cache Vertretungspläne
Diffstat (limited to 'js/index.js')
-rw-r--r--js/index.js181
1 files changed, 149 insertions, 32 deletions
diff --git a/js/index.js b/js/index.js
index a823993..adefb6b 100644
--- a/js/index.js
+++ b/js/index.js
@@ -474,6 +474,88 @@ function parseVertretungen(str, username){
return vertretungen;
}
+/* schreibt ein Bild und eine Textdatei mit dem Inhalt der PDF-Seite */
+function schreibeCache($div, pageNumber, canvasUrl, extrakt){
+ var prefix = $div.data('file').replace(/\.pdf/gi, '') + '-' + pageNumber;
+ var bildName = prefix + '.png';
+
+ window.requestFileSystem(
+ LocalFileSystem.PERSISTENT, 0,
+ function(fileSystem){
+ fileSystem.root.getDirectory('WvSVPlan', {create: true, exclusive: false},
+ function(dirEntry){
+ dirEntry.getFile(bildName, {create: true, exclusive: false},
+ function(fileEntry){
+ var fileTransfer = new FileTransfer();
+
+ fileTransfer.download(
+ canvasUrl,
+ fileEntry.toURL(),
+ function(theFile){
+ // Stille.
+ }, fail);
+ });
+ }, fail);
+ });
+
+ var textName = prefix + '.txt';
+
+ window.requestFileSystem(
+ LocalFileSystem.PERSISTENT, 0,
+ function(fileSystem){
+ fileSystem.root.getDirectory('WvSVPlan', {create: true, exclusive: false},
+ function(dirEntry){
+ dirEntry.getFile(textName, {create: true, exclusive: false},
+ function(fileEntry){
+ fileEntry.createWriter(
+ function(fileWriter){
+ var blob;
+
+ try{
+ blob = new Blob([extrakt], {type: 'text/plain'}); // Kein 'new Blob' für Android, obwohl BlobBuilder obsolet ist
+ }catch(e){
+ window.BlobBuilder = window.BlobBuilder ||
+ window.WebKitBlobBuilder ||
+ window.MozBlobBuilder ||
+ window.MSBlobBuilder;
+ if(e.name == 'TypeError' && window.BlobBuilder){
+ var bb = new BlobBuilder();
+ bb.append(extrakt);
+ blob = bb.getBlob('text/plain');
+ }
+ }
+
+ fileWriter.write(blob);
+ }, fail);
+ });
+ }, fail);
+ });
+
+ console.log($div.attr('id') + '-' + pageNumber + ' gecached');
+}
+
+function benutzeVertretungen(pageText, $div){
+ var userdata = getUserData();
+
+ if(userdata == null){
+ return;
+ }
+
+ var username = userdata[0];
+ var vertretungen = parseVertretungen(pageText, username);
+
+ if(vertretungen.length > 0){
+ var vdate = moment($div.data('date'), 'YYYY-MM-DD').startOf('second');
+ var time = $('#notifydate').val().split(':');
+
+ vdate.set('hour', time[0]);
+ vdate.set('minute', time[1]);
+
+ addSocialButton(vdate, vertretungen.join(', '), $div);
+ addNotification(vdate, vertretungen.join('\n'), $div);
+ }
+}
+
/* PDF Rendering */
function renderPage($div, pdf, pageNumber, callback){
pdf.getPage(pageNumber).then(function(page){
@@ -516,26 +598,10 @@ function renderPage($div, pdf, pageNumber, callback){
lastBlock = block;
}
- var username = getUserData();
+ benutzeVertretungen(pageText, $div);
- if(username === null){
- return;
- }else{
- username = username[0];
- }
-
- var vertretungen = parseVertretungen(pageText, username);
-
- if(vertretungen.length > 0){
- var vdate = moment($div.data('date'), 'YYYY-MM-DD').startOf('second');
- var time = $('#notifydate').val().split(':');
-
- vdate.set('hour', time[0]);
- vdate.set('minute', time[1]);
-
- addSocialButton(vdate, vertretungen.join(', '), $div);
- addNotification(vdate, vertretungen.join('\n'), $div);
- }
+ /* Als Bild und Text speichern */
+ schreibeCache($div, pageNumber, canvas.toDataURL(), pageText);
});
callback(pdf);
@@ -572,24 +638,39 @@ function replaceUmlauts(umlautstr){
return umlautstr.replace(/[äöüß]/g, function($0) { return tr[$0]; });
}
-/* fügt die lokale URL des Plans ein und ruft die Seite zum Rendering auf */
-function addPlanAttr(fileEntry, wasdownloaded){
- var sPath = fileEntry.toURL();
- var name = decodeURIComponent(fileEntry.name);
- console.log('Dateiname: ' + name);
+function getPlanTabName(fname){
+ var name, vdate;
+ var fnameRe = /.*?(\d{4}-\d{2}-\d{2})(.*?)\.(?:pdf|png|txt)/;
+ var results = fname.match(fnameRe);
- var fnameRe = new RegExp('.*?(\\d{4}-\\d{2}-\\d{2})(.*?)\\.pdf');
- var results = name.match(fnameRe);
-
if(results !== null){
- var vdate = moment(results[1], 'YYYY-MM-DD').startOf('day');
+ vdate = moment(results[1], 'YYYY-MM-DD').startOf('day');
if(results[2] !== null){
results[2] = results[2].replace(/[ ,]/g, '-').replace(/-{2}/g, '-');
}
name = vdate.format('DD_MM_YYYY') + replaceUmlauts(results[2]);
+ }else{
+ return null;
+ }
+
+ return [name, vdate, results[1]]; // TODO aua, das geht aber schöner
+}
+
+/* fügt ein neues Tab in die Navigationsleiste ein und gibt den Namen des Tab-Divs zurück */
+function neuesPlanTab(fname){
+ var dname = decodeURIComponent(fname);
+ var name = "";
+ var vdate, rdate;
+
+ console.log('Dateiname: ' + dname);
+ name = getPlanTabName(dname)[0];
+ vdate = getPlanTabName(dname)[1];
+ rdate = getPlanTabName(dname)[2];
+
+ if(name !== null){
if(!$(name).length){
$('#vplannavbar').find('*').andSelf().each(function(){ // Navbar neuzeichnen; hier hat jQuery Mobile eine Schwäche :(
$(this).removeClass(function(i, cn){
@@ -612,10 +693,19 @@ function addPlanAttr(fileEntry, wasdownloaded){
$('#vplantabs').append('<div id="' + name + '" class="tablist-content"></div>');
$('#vplantabs').tabs('refresh');
- $('#' + name).data('date', results[1]);
+ $('#' + name).data('date', rdate);
+ $('#' + name).data('file', dname);
}
}
+ return name;
+}
+
+/* fügt die lokale URL des Plans ein und ruft die Seite zum Rendering auf */
+function addPlanAttr(fileEntry, wasdownloaded){
+ var sPath = fileEntry.toURL();
+ var name = neuesPlanTab(fileEntry.name);
+
renderPdf(sPath, name);
}
@@ -673,7 +763,6 @@ function getPlan(link){
request.fail(fail);
}
-
/* holt die Kursübersicht */
function getOverview(link){
var request = $.ajax({
@@ -802,9 +891,37 @@ function tryLogin(){
login();
}
+function leseVCache(fileEntry, $div){
+ fileEntry.file(function(file){
+ var reader = new FileReader();
+
+ reader.onloadend = function(e){
+ benutzeVertretungen(this.result, $div);
+ };
+
+ reader.readAsText(file);
+ }, fail);
+}
+
+function ladeCache(fileEntry){
+ var name = fileEntry.name;
+
+ if(fileEntry.name.indexOf('.pdf') > -1){
+ console.log('Bereit zum Laden von ' + neuesPlanTab(name));
+ }else{
+ name = getPlanTabName(name.replace(/-\d+\./, '.'))[0]; // Das '-1' entfernen
+ }
+
+ if(fileEntry.name.indexOf('.png') > -1){
+ $('#' + name).append($('<img>').attr('src', fileEntry.toURL()));
+ }else if(fileEntry.name.indexOf('.txt') > -1){
+ leseVCache(fileEntry, $('#' + name));
+ }
+}
+
/* gibt aktuelle Pläne aus entries zurück */
function getActual(entries){
- var fnameRe = new RegExp('.*?(\\d{4}-\\d{2}-\\d{2}).*?\\.pdf');
+ var fnameRe = new RegExp('.*?(\\d{4}-\\d{2}-\\d{2}).*?\\.(?:pdf|png|txt)');
var today = moment().startOf('day');
var actual = [];
@@ -843,7 +960,7 @@ function load(){
if(actual.length > 0){
$('#noplans').hide('slow');
for(j = 0; j < actual.length; j++){
- addPlanAttr(actual[j], false);
+ ladeCache(actual[j], false);
}
}else{
$('#noplans').show('fast');