diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2014-06-08 18:00:07 +0200 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2016-08-15 20:02:39 +0200 |
| commit | 030a86d02d9c0afeac09a5626bbdadf653728008 (patch) | |
| tree | 862579f8e0fee5ba2f7d822d76656016cd0e0c78 /js | |
| parent | 990768880a69667285a719b8f18b35c82370f317 (diff) | |
| download | wvs-vplan-030a86d02d9c0afeac09a5626bbdadf653728008.tar.gz wvs-vplan-030a86d02d9c0afeac09a5626bbdadf653728008.zip | |
Cache Vertretungspläne
Diffstat (limited to 'js')
| -rw-r--r-- | js/index.js | 181 |
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'); |
