Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Detect need to check for software updates #409

Closed
triwav opened this issue Jul 7, 2022 · 5 comments
Closed

Detect need to check for software updates #409

triwav opened this issue Jul 7, 2022 · 5 comments
Assignees

Comments

@triwav
Copy link
Collaborator

triwav commented Jul 7, 2022

If a Roku hasn't been ran in a while when you first boot it up and try to deploy it will fail because it needs to check for software updates before it will proceed. We should detect this issue and either try to automatically run the update prompt or at least let the developer know why it is failing
image

@TwitchBronBron
Copy link
Member

How could we programmatically check for that?

@triwav
Copy link
Collaborator Author

triwav commented Jul 7, 2022

I believe the response code is either a 4XX or 5XX error code

@chrisdp
Copy link
Collaborator

chrisdp commented Nov 22, 2024

This issue is detectable as a 577 response. We are currently working on adding this to roku-deploy rokucommunity/roku-deploy#180

@TwitchBronBron
Copy link
Member

I'm unable to trigger a 577 http status code response. From my testing, we get a 200 status code from the upload response, with some javascript that trigger showing the message. Here's the response we get:

<html>
<head>
  <meta charset="utf-8">
  <meta name="HandheldFriendly" content="True">
  <title> Roku Development Kit </title>

  <link rel="stylesheet" type="text/css" media="screen" href="css/global.css" />
</head>
<body>
  <div id="root" style="background: #fff">

  </div>

  <script type="text/javascript" src="css/global.js"></script>
  <script type="text/javascript">
  
      // Include core components and resounce bundle (needed)
      Shell.resource.set(null, {
          endpoints: {} 
      });
      Shell.create('Roku.Event.Key');
      Shell.create('Roku.Events.Resize');
      Shell.create('Roku.Events.Scroll');  
      // Create global navigation and render it
      var nav = Shell.create('Roku.Nav')
        .trigger('Enable standalone and utility mode - hide user menu, shopping cart, and etc.')
        .trigger('Use compact footer')
        .trigger('Hide footer')
        .trigger('Render', document.getElementById('root'))
        .trigger('Remove all feature links from header')

      // Retrieve main content body node
      var node = nav.invoke('Get main body section mounting node');
      
      // Create page container and page header
      var container = Shell.create('Roku.Nav.Page.Standard').trigger('Render', node);
      node = container.invoke('Get main body node');
      container.invoke('Get headline node').innerHTML = 'Failed to check for software update';
	  // Cannot reach Software Update Server
      node.innerHTML = '<p>Please make sure that your Roku device is connected to internet and running most recent software.</p> <p> After connecting to internet, go to system settings and check for software update.</p> ';

      var hrDiv = document.createElement('div');
      hrDiv.innerHTML = '<hr />';
      node.appendChild(hrDiv);

      var d = document.createElement('div');
      d.innerHTML = '<br />';
      node.appendChild(d);

  </script>


  <div style="display:none">

  <font color="red">Please make sure that your Roku device is connected to internet, and running most recent software version (d=951469)</font>

  </div>

</body>
</html>

And the raw response as javascript in the JS debug console:

{
  message: 'Successful deploy',
  results: {
    response: IncomingMessage {
      _readableState: [ReadableState],
      _events: [Object: null prototype],
      _eventsCount: 1,
      _maxListeners: undefined,
      socket: [Socket],
      httpVersionMajor: 1,
      httpVersionMinor: 1,
      httpVersion: '1.1',
      complete: true,
      rawHeaders: [Array],
      rawTrailers: [],
      aborted: false,
      upgrade: false,
      url: '',
      method: null,
      statusCode: 200,
      statusMessage: 'OK',
      client: [Socket],
      _consuming: true,
      _dumped: false,
      req: [ClientRequest],
      request: [Request],
      toJSON: [Function: responseToJSON],
      caseless: [Caseless],
      body: '<html>\n' +
        '<head>\n' +
        '  <meta charset="utf-8">\n' +
        '  <meta name="HandheldFriendly" content="True">\n' +
        '  <title> Roku Development Kit </title>\n' +
        '\n' +
        '  <link rel="stylesheet" type="text/css" media="screen" href="css/global.css" />\n' +
        '</head>\n' +
        '<body>\n' +
        '  <div id="root" style="background: #fff">\n' +
        '\n' +
        '  </div>\n' +
        '\n' +
        '  <script type="text/javascript" src="css/global.js"></script>\n' +
        '  <script type="text/javascript">\n' +
        '  \n' +
        '      // Include core components and resounce bundle (needed)\n' +
        '      Shell.resource.set(null, {\n' +
        '          endpoints: {} \n' +
        '      });\n' +
        "      Shell.create('Roku.Event.Key');\n" +
        "      Shell.create('Roku.Events.Resize');\n" +
        "      Shell.create('Roku.Events.Scroll');  \n" +
        '      // Create global navigation and render it\n' +
        "      var nav = Shell.create('Roku.Nav')\n" +
        "        .trigger('Enable standalone and utility mode - hide user menu, shopping cart, and etc.')\n" +
        "        .trigger('Use compact footer')\n" +
        "        .trigger('Hide footer')\n" +
        "        .trigger('Render', document.getElementById('root'))\n" +
        "        .trigger('Remove all feature links from header')\n" +
        '\n' +
        '      // Retrieve main content body node\n' +
        "      var node = nav.invoke('Get main body section mounting node');\n" +
        '      \n' +
        '      // Create page container and page header\n' +
        "      var container = Shell.create('Roku.Nav.Page.Standard').trigger('Render', node);\n" +
        "      node = container.invoke('Get main body node');\n" +
        "      container.invoke('Get headline node').innerHTML = 'Failed to check for software update';\n" +
        '\t  // Cannot reach Software Update Server\n' +
        "      node.innerHTML = '<p>Please make sure that your Roku device is connected to internet and running most recent software.</p> <p> After connecting to internet, go to system settings and check for software update.</p> ';\n" +
        '\n' +
        "      var hrDiv = document.createElement('div');\n" +
        "      hrDiv.innerHTML = '<hr />';\n" +
        '      node.appendChild(hrDiv);\n' +
        '\n' +
        "      var d = document.createElement('div');\n" +
        "      d.innerHTML = '<br />';\n" +
        '      node.appendChild(d);\n' +
        '\n' +
        '  </script>\n' +
        '\n' +
        '\n' +
        '  <div style="display:none">\n' +
        '\n' +
        '  <font color="red">Please make sure that your Roku device is connected to internet, and running most recent software version (d=952852)</font>\n' +
        '\n' +
        '  </div>\n' +
        '\n' +
        '</body>\n' +
        '</html>\n',
      [Symbol(kCapture)]: false,
      [Symbol(kHeaders)]: [Object],
      [Symbol(kHeadersCount)]: 6,
      [Symbol(kTrailers)]: null,
      [Symbol(kTrailersCount)]: 0,
      [Symbol(RequestTimeout)]: undefined
    },
    body: '<html>\n' +
      '<head>\n' +
      '  <meta charset="utf-8">\n' +
      '  <meta name="HandheldFriendly" content="True">\n' +
      '  <title> Roku Development Kit </title>\n' +
      '\n' +
      '  <link rel="stylesheet" type="text/css" media="screen" href="css/global.css" />\n' +
      '</head>\n' +
      '<body>\n' +
      '  <div id="root" style="background: #fff">\n' +
      '\n' +
      '  </div>\n' +
      '\n' +
      '  <script type="text/javascript" src="css/global.js"></script>\n' +
      '  <script type="text/javascript">\n' +
      '  \n' +
      '      // Include core components and resounce bundle (needed)\n' +
      '      Shell.resource.set(null, {\n' +
      '          endpoints: {} \n' +
      '      });\n' +
      "      Shell.create('Roku.Event.Key');\n" +
      "      Shell.create('Roku.Events.Resize');\n" +
      "      Shell.create('Roku.Events.Scroll');  \n" +
      '      // Create global navigation and render it\n' +
      "      var nav = Shell.create('Roku.Nav')\n" +
      "        .trigger('Enable standalone and utility mode - hide user menu, shopping cart, and etc.')\n" +
      "        .trigger('Use compact footer')\n" +
      "        .trigger('Hide footer')\n" +
      "        .trigger('Render', document.getElementById('root'))\n" +
      "        .trigger('Remove all feature links from header')\n" +
      '\n' +
      '      // Retrieve main content body node\n' +
      "      var node = nav.invoke('Get main body section mounting node');\n" +
      '      \n' +
      '      // Create page container and page header\n' +
      "      var container = Shell.create('Roku.Nav.Page.Standard').trigger('Render', node);\n" +
      "      node = container.invoke('Get main body node');\n" +
      "      container.invoke('Get headline node').innerHTML = 'Failed to check for software update';\n" +
      '\t  // Cannot reach Software Update Server\n' +
      "      node.innerHTML = '<p>Please make sure that your Roku device is connected to internet and running most recent software.</p> <p> After connecting to internet, go to system settings and check for software update.</p> ';\n" +
      '\n' +
      "      var hrDiv = document.createElement('div');\n" +
      "      hrDiv.innerHTML = '<hr />';\n" +
      '      node.appendChild(hrDiv);\n' +
      '\n' +
      "      var d = document.createElement('div');\n" +
      "      d.innerHTML = '<br />';\n" +
      '      node.appendChild(d);\n' +
      '\n' +
      '  </script>\n' +
      '\n' +
      '\n' +
      '  <div style="display:none">\n' +
      '\n' +
      '  <font color="red">Please make sure that your Roku device is connected to internet, and running most recent software version (d=952852)</font>\n' +
      '\n' +
      '  </div>\n' +
      '\n' +
      '</body>\n' +
      '</html>\n'
  }
}

@TwitchBronBron
Copy link
Member

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants