• Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
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.2k 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.
  • S Offline
    sdetweil @banbutcher
    last edited by Apr 17, 2020, 2:20 AM

    @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 Apr 17, 2020, 2:21 AM

      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 Apr 17, 2020, 2:43 AM

        @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 Apr 17, 2020, 2:59 AM Reply Quote 0
        • B Offline
          banbutcher @sdetweil
          last edited by Apr 17, 2020, 2:59 AM

          @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 Apr 17, 2020, 12:28 PM Reply Quote 0
          • S Offline
            sdetweil @banbutcher
            last edited by sdetweil Apr 17, 2020, 12:30 PM Apr 17, 2020, 12:28 PM

            @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 Apr 17, 2020, 8:54 PM Reply Quote 0
            • S Offline
              sdetweil @sdetweil
              last edited by Apr 17, 2020, 8:54 PM

              @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 Apr 18, 2020, 1:03 AM

                @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 Apr 18, 2020, 11:44 AM

                  @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 Apr 18, 2020, 11:52 AM Reply Quote 0
                  • S Offline
                    sdetweil @banbutcher
                    last edited by sdetweil Apr 18, 2020, 1:22 PM Apr 18, 2020, 11:52 AM

                    @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
                    • B Offline
                      banbutcher
                      last edited by sdetweil Apr 18, 2020, 1:22 PM Apr 18, 2020, 1:06 PM

                      @sdetweil

                      the counter part worked great, but then when i tried to add it if loop for the name check, im getting “no data” maybe i messed up copying across?

                                              var output_list= [];
                      			var counter=this.config.counter || 11
                                              // 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
                                                     // table has a row, 
                                                     output_list.push("<tr><td>")
                      			       // with data
                      			       if(split )
                                                        output_list.push(split)
                      			       else
                      			          output_list.push('name not found:'+ 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 {
                      			wrapper.innerHTML = "No Data";
                      		}
                      
                      S 1 Reply Last reply Apr 18, 2020, 1:13 PM Reply Quote 0
                      • 1
                      • 2
                      • 3
                      • 4
                      • 5
                      • 6
                      • 5 / 6
                      5 / 6
                      • First post
                        48/59
                        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