Read the statement by Michael Teeuw here.
Slideshow Module with PDF support
-
Hey guys,
I need your help :).
My module “Pictures” can show any kind of pictures, located on a mounted network drive. On startup node_helper mounts a specific drive, then it scans this folder every two seconds (it could be any other value) and write all filenames in a text file. Pictures imports and filters this file. At the end it generates a slideshow.
Now I want to implement pdf files in the same way. Actually it works with a little workaround but I’m not happy with that. I have to start MagicMirror and additionally I have to start another browser (unfortunatelly “node serveronly” doesn’t work) on the pi to show pdf files with the integrated plugin.
For that I have several questions^^:
- Is there a possibility to show pdf files native in my module?
- My slideshow is a little laggy on the pi (3B). Any PC with the same network connection shows the same slideshow in browser with perfect performance. Can I improve my slideshow performance anyhow?
- I have a problem to run “node serveronly” with raspian stretch an the new MagicMirror 2.3.1. I can start but as soon as I connect to the pi by IP:8080 my module generates -75 errors. This won’t happen if MagicMirror runs with “npm start”.
Best regards
flashnode_helper.js
var request = require('request'); var NodeHelper = require("node_helper"); const exec = require('child_process').exec; module.exports = NodeHelper.create({ start: function() { this.started = false; }, socketNotificationReceived: function(notification, payload) { if (notification === "CONFIG" && this.started == false) { this.config = payload; // mounting network drive exec("/usr/bin/sudo mount -t cifs -o user=" + this.config.user + ",password=" + this.config.password + " " + this.config.source + " /home/pi/MagicMirror/modules/Pictures/images", null); this.started = true; } if (notification === "GET_PICTURE_DATA" && this.started) { var path = "/home/pi/MagicMirror/modules/Pictures/images/"+ this.config.folder + "/"; var opt1 = '-type f ! -path "/home/pi/MagicMirror/modules/Pictures/images/' + this.config.folder + '/.thumb/*" | awk -F"/"' var opt2 = '{print $NF"/" }'; var opt3 = '| sort > ~/MagicMirror/modules/Pictures/files.txt'; exec("find " + "'" + path + "' " + opt1 + " '" + opt2 + "' " + opt3, null); this.getData(payload); } }, getData: function(options) { request(options, (error, response, body) => { this.sendSocketNotification("PICTURE_DATA", body); }); } });Pictures.js
var showPicture = 0; var textdata = []; var textdataHelp = []; var findExt = []; Module.register("Pictures",{ defaults: { loadingText: 'Lade SlideShow...', pictureInterval: 20 * 1000, }, start: function() { Log.info("Starting module: " + this.name); this.loaded = false; this.sendSocketNotification('CONFIG', this.config); this.locationSelf = window.location.href; this.file = 'modules/Pictures/files.txt'; setTimeout(this.updateFiles, 2000, this); }, socketNotificationReceived: function(notification, payload){ if(notification === 'PICTURE_DATA' && payload !== null){ this.loaded = false; textdataHelp = payload.split("/\n"); if (textdataHelp[0] !== ""){ textdata = []; // textdata will not be cleared, if helper has no content } for (i = 0; i textdata.length - 1) { showPicture = 0; } self.updateDom(1000); showPicture++; } }, getDom: function() { var wrapper = document.createElement("div"); var pictureInfo = document.createElement('table'); if (!this.loaded) { wrapper.innerHTML = this.config.loadingText; return wrapper; } var currCount = showPicture + 1; var tableHead = document.createElement('tr'); tableHead.className = 'normal small'; var y = 0 findExt = textdata[showPicture].split("."); for (i = 0; i 0){ //tableHead.innerHTML = '<br />' + currCount + '/' + textdata.length; tableHead.innerHTML = '<br />' + currCount + '/' + textdata.length; }else{ tableHead.innerHTML = '<img src="' + this.locationSelf + 'modules/Pictures/images/' + this.config.folder + '/' + textdata[showPicture] +'" alt="Vorschau" /><br />' + currCount + '/' + textdata.length; } y = 0; findExt = []; pictureInfo.appendChild(tableHead); wrapper.appendChild(pictureInfo); return wrapper; }, });
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login