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.
    • 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
                      • B Offline
                        banbutcher
                        last edited by sdetweil

                        @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 Reply Quote 0
                        • 1
                        • 2
                        • 3
                        • 4
                        • 5
                        • 6
                        • 5 / 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