MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.

    .txt file include

    Scheduled Pinned Locked Moved Troubleshooting
    59 Posts 6 Posters 34.9k Views 6 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B Offline
      banbutcher
      last edited by banbutcher

      this is my main module .js

      i think this is where im reading from :/

      Module.register("deluge",{
      	defaults: {
      		updateInterval: 10 * 60 * 1000 //reads the file every 10 mins
      	},
      
      	start: function(){
      		this.sendSocketNotification("START", this.config);
      	},
      
      	socketNotificationReceived: function(notification, payload) {
      		if(notification === "DATA"){
      			this.dataFile = payload;
      			this.updateDom();
      		}
      	},
      
      //	getDom: function(){
      //		var wrapper = document.createElement("div");
      //		if(this.dataFile){
      //			wrapper.innerHTML = this.dataFile;
      //		} else {
      //			wrapper.innerHTML = "No data";
      //		}
      //		return wrapper;
      //	}
      
      
      
      
      	getDom: function(){
      		var wrapper = document.createElement("div");
      		if(this.dataFile){
                              var splitRegExp = /.*[S][(0-9)]+[E][(0-9)]+/ig;
                              var split = splitRegExp.exec(this.dataFile);
      
      			wrapper.innerHTML = split;
      		} else {
      			wrapper.innerHTML = "No Data";
      		}
      		return wrapper;
      	}
      
      
      
      });
      

      again thanks for your help :)

      im in way overmy head here!

      S 2 Replies Last reply Reply Quote 0
      • S Offline
        sdetweil @banbutcher
        last edited by

        @banbutcher reading in the node_helper, sending up to the module.

        Sam

        How to add modules

        learning how to use browser developers window for css changes

        1 Reply Last reply Reply Quote 0
        • B Offline
          banbutcher
          last edited by

          Node_helper :)

          const NodeHelper = require("node_helper");
          const fs= require("fs");
          
          module.exports = NodeHelper.create({
          //here comes the part of the nodehelper after the 3 dots as posted above
          
          	socketNotificationReceived: function(notification, payload) {
          		if(notification === "START"){
          			this.config = payload;
          			this.readData();
              			setInterval(() => {
                  			this.readData();
              			}, this.config.updateInterval);
          		}
          	},
          
          	readData: function(){
          		//to read a file to do the following
          		fs.readFile("new-tv-list.txt", "utf8", (err, data) => {
          			if (err) throw err;
          			this.sendSocketNotification("DATA", data);
          		});
          	}
          });
          
          1 Reply Last reply Reply Quote 0
          • S Offline
            sdetweil @banbutcher
            last edited by

            @banbutcher I won’t have time to look at this tonight

            Sam

            How to add modules

            learning how to use browser developers window for css changes

            B 1 Reply Last reply Reply Quote 0
            • B Offline
              banbutcher @sdetweil
              last edited by

              @sdetweil
              not a problem at all, i really appreciate your help so far in this topic and every other question ive had across the board! :thumbs_up_light_skin_tone:

              S 1 Reply Last reply Reply Quote 0
              • S Offline
                sdetweil @banbutcher
                last edited by sdetweil

                @banbutcher ok, the fs.readFile() returns ALL the content of the file. I still would remove the utf8.

                but you want a list of names, not a stream of characters…
                so you need to split the stream into an array.

                a list of text ‘lines’ has a character after each, called a line feed, we don’t want those

                but the last filename MAY or MAY NOT be followed by a line feed. (depends on how the file was created)

                anyhow we can fix that

                I would change the readData function in node_helper like this

                readData: function(){
                		//to read a file to do the following
                		fs.readFile("new-tv-list.txt", (err, data) => {
                                        var output_data = null
                                        // if there was no error  
                			if (!err){
                                          // convert byte stream to array of names   
                                          output_data=data.toString().concat("\n").split('\n')
                                        }   
                                        // always send something back to module, so it can display messages
                                        // might be null if there was an error 
                			this.sendSocketNotification("DATA", output_data);
                		});
                	}
                

                then to fix the module side
                build an html table structure

                var wrapper = document.createElement("div");
                		if(this.dataFile){
                                        var output_list= [];
                                        // setup regex, no i  no g (only once, and case sensitive)
                                        var splitRegExp = /.*[S][(0-9)]+[E][(0-9)]+/;
                                        // loop thru the list of filenames
                                        for(filename of this.dataFile) {
                                            // if the name is not zero length (split could have returned for just linefeed
                                            if(filename.length >0) {
                                               // get the filename prefix
                                               var split = splitRegExp.exec(filename);
                                               // save name to the output list, as a table entry
                                               // remove space after the ->< , the forum hides everything after unless a space
                                               // table has a row, 
                                               output_list.push("< tr>< td>")
                                               // with data
                                               output_list.push(split)
                                               // end of data and row
                                               output_list.push("< /td>< /tr>")
                                            } 
                                        }  
                                        // insert the table into the wrapper
                			wrapper.innerHTML = "< table>" + output_list.join('')+ "< /table>";
                		} else {
                

                Sam

                How to add modules

                learning how to use browser developers window for css changes

                S 1 Reply Last reply Reply Quote 0
                • S Offline
                  sdetweil @sdetweil
                  last edited by

                  @banbutcher

                  you can also you divs instead of a table, and then set a css style
                  ‘display’:‘inline-flex’
                  ‘flex-direction’:‘vertical’

                  and u can also use code to create the tree instead of text (don’t use the output_list anymore)
                  (and u can use this with divs too, don’t need as many elements)

                  var table=document.createElement("table")
                  wrapper.appendChild(table)
                            for(filename of this.dataFile) {
                                 // if the name is not zero length (split could have returned for just linefeed
                                 if(filename.length >0) {
                                        // get the filename prefix
                                        var tr=document.createElement("tr")
                                        table.appendChild(tr)
                                        var td=document.createElement("td")
                                        tr.appendChild(td)
                                        var split = splitRegExp.exec(filename);
                                        td.innerText=split
                                  }
                        }
                  return wrapper;
                  

                  Sam

                  How to add modules

                  learning how to use browser developers window for css changes

                  1 Reply Last reply Reply Quote 0
                  • B Offline
                    banbutcher
                    last edited by

                    @sdetweil

                    Awesome i will try and get it working tonight!

                    Thanks,

                    Richie

                    1 Reply Last reply Reply Quote 0
                    • B Offline
                      banbutcher
                      last edited by

                      @sdetweil

                      wow… works like a charm! lists all tv shows perfectly! :)
                      is there any way to print a line if the regex isn’t met… ie like a movie title instead of a series title with s01e03 attached?
                      and possibly limit output to 10 lines?

                      Thanks,

                      Richie

                      S 1 Reply Last reply Reply Quote 0
                      • S Offline
                        sdetweil @banbutcher
                        last edited by sdetweil

                        @banbutcher >is there any way to print a line if the regex isn’t met… ie like a movie title instead of a series title with s01e03 attached?
                        and possibly limit output to 10 lines?

                        sure

                        // should make this a config variable by adding to module defaults
                        // then would be this.config.counter
                        // get display limit, 10 if not specified in defaults
                        var counter=this.config.counter || 10
                                  var table=document.createElement("table")
                                  wrapper.appendChild(table)
                                  for(filename of this.dataFile) {
                                       // if the name is not zero length (split could have returned for just linefeed
                                       // and the view limit has not been reached
                                       if(filename.length >0 && counter>0) {
                                              // get the filename prefix
                                              var tr=document.createElement("tr")
                                              table.appendChild(tr)
                                              var td=document.createElement("td")
                                              tr.appendChild(td)
                                              var split = splitRegExp.exec(filename);
                                              if(split)                        
                                                  td.innerText=split
                                              else
                                                  td.innerText='name not matched '+ filename
                                              counter--;
                                        }
                              }
                        return wrapper;
                        

                        or using the text form

                        var wrapper = document.createElement("div");
                        		if(this.dataFile){
                                                var output_list= [];
                                                // should make this a config variable by adding to module defaults
                                               // then would be this.config.counter
                                               // get display limit, 10 if not specified in defaults
                                               var counter=this.config.counter || 10
                                                // setup regex, no i  no g (only once, and case sensitive)
                                                var splitRegExp = /.*[S][(0-9)]+[E][(0-9)]+/;
                                                // loop thru the list of filenames
                                                for(filename of this.dataFile) {
                                                    // if the name is not zero length (split could have returned for just linefeed
                                                    if(filename.length >0 && counter >0) {
                                                       // get the filename prefix
                                                       var split = splitRegExp.exec(filename);
                                                       // save name to the output list, as a table entry
                                                       // remove space after the ->< , the forum hides everything after unless a space
                                                       // table has a row, 
                                                       output_list.push("< tr>< td>")
                                                       // with data
                                                       if(split)
                                                          output_list.push(split)
                                                       else 
                                                           output_list.push('name not matched '+ filename)
                                                       // end of data and row
                                                       output_list.push("< /td>< /tr>")
                                                       counter--;
                                                    } 
                                                }  
                                                // insert the table into the wrapper
                        			wrapper.innerHTML = "< table>" + output_list.join('')+ "< /table>";
                        		} else {
                        

                        Sam

                        How to add modules

                        learning how to use browser developers window for css changes

                        1 Reply Last reply Reply Quote 0
                        • 1
                        • 2
                        • 3
                        • 4
                        • 5
                        • 6
                        • 2 / 6
                        • First post
                          Last post
                        Enjoying MagicMirror? Please consider a donation!
                        MagicMirror created by Michael Teeuw.
                        Forum managed by Sam, technical setup by Karsten.
                        This forum is using NodeBB as its core | Contributors
                        Contact | Privacy Policy