@@ -7,6 +7,8 @@ const { remote } = require('electron')
77const { Menu, MenuItem } = remote
88const mousetrap = require ( 'mousetrap' )
99const fs = require ( 'fs' )
10+ const request = require ( 'request' )
11+ var validURL = require ( 'valid-url' )
1012
1113const download = require ( './tools/download' )
1214
@@ -21,6 +23,11 @@ let fileInfoBox = document.getElementById('file-info-box')
2123let outBox = document . getElementById ( 'output-box' )
2224let newVersionWarningBox = document . getElementById ( 'newVersionWarning' )
2325let refreshButton = { }
26+ let geturlbutton = document . getElementById ( 'geturlbutton' )
27+
28+ geturlbutton . onclick = ( ) => {
29+ ipc . send ( 'open-get-url-window' )
30+ }
2431
2532const menu = new Menu ( )
2633menu . append ( new MenuItem ( { role : 'copy' } ) )
@@ -36,6 +43,7 @@ let template2018 = require('../assets/2018statsbook.json')
3643let template2017 = require ( '../assets/2017statsbook.json' )
3744let template2023jrda = require ( '../assets/2023jrda.json' )
3845let sbErrorTemplate = require ( '../assets/sberrors.json' )
46+ //const { load } = require('npm')
3947
4048// Globals
4149let sbData = { } , // derbyJSON formatted statsbook data
@@ -46,7 +54,8 @@ let sbData = {}, // derbyJSON formatted statsbook data
4654 sbFilename = '' ,
4755 sbVersion = '' ,
4856 warningData = { } ,
49- sbFile = new File ( [ '' ] , '' )
57+ sbFile = new File ( [ '' ] , '' ) ,
58+ googleSheet = ''
5059const teamList = [ 'home' , 'away' ]
5160let anSP = / ^ s p \* ? $ / i
5261let mySP = / ^ s p $ / i
@@ -82,6 +91,7 @@ fileSelect.onchange = (e) => {
8291 }
8392
8493 sbFile = e . target . files [ 0 ]
94+ googleSheet = ''
8595
8696 makeReader ( sbFile )
8797 return false
@@ -99,22 +109,49 @@ holder.ondrop = (e) => {
99109 }
100110
101111 sbFile = e . dataTransfer . files [ 0 ]
112+ googleSheet = ''
113+
102114 makeReader ( sbFile )
103115 return false
104116}
105117
118+ ipc . on ( 'load-google-sheet' , ( event , statsbookURL ) => {
119+
120+ statsbookURL = statsbookURL . replace ( / ( \/ d \/ [ a - z A - Z 0 - 9 - _ ] * \/ ) ( .* ) / gm, '$1export?format=xlsx' )
121+
122+ if ( ! validURL . isUri ( statsbookURL ) ) {
123+ //error not valid url
124+ fileInfoBox . innerHTML = `Error: ${ statsbookURL } is not a valid URL`
125+ return
126+ }
127+ googleSheet = statsbookURL
128+
129+ loadGoogleSheet ( googleSheet )
130+ } )
131+
132+ let loadGoogleSheet = ( statsbookURL ) => {
133+ request . get ( statsbookURL , { encoding : null } , function ( err , res , data ) {
134+ if ( err || res . statusCode != 200 ) {
135+ fileInfoBox . innerHTML = `Unable to load file. Error: ${ err } `
136+ return
137+ }
138+ const buf = Buffer . from ( data )
139+ const workbook = XLSX . read ( buf )
140+
141+ readSbData ( workbook )
142+ } )
143+ }
144+
145+
106146let makeReader = ( sbFile ) => {
107147 sbFilename = sbFile . name
108148 let data = fs . readFileSync ( sbFile . path )
109149 data = new Uint8Array ( data )
110- readSbData ( data )
111- }
112-
113- let readSbData = ( data ) => {
114- // Take raw data from Excel File and process the file.
115-
116150 var workbook = XLSX . read ( data , { type : 'array' } )
151+ readSbData ( workbook )
152+ }
117153
154+ let readSbData = ( workbook ) => {
118155 // Reinitialize globals
119156 sbData = { }
120157 sbErrors = JSON . parse ( JSON . stringify ( sbErrorTemplate ) )
@@ -179,13 +216,18 @@ let createRefreshButton = () => {
179216 fileInfoBox . innerHTML += '<button id="refresh" type="button" class="btn btn-secondary btn-sm">Refresh (f5)</button>'
180217 refreshButton = document . getElementById ( 'refresh' )
181218
182- refreshButton . onclick = ( ) => {
183- makeReader ( sbFile )
184- }
219+ if ( googleSheet == '' ) {
220+ // If a local file has been loaded
221+ refreshButton . onclick = ( ) => {
222+ makeReader ( sbFile )
223+ }
185224
186- mousetrap . bind ( 'f5' , ( ) => {
187- makeReader ( sbFile )
188- } )
225+ mousetrap . bind ( 'f5' , ( ) => {
226+ makeReader ( sbFile )
227+ } )
228+ } else {
229+ loadGoogleSheet ( googleSheet )
230+ }
189231}
190232
191233let getVersion = ( workbook ) => {
0 commit comments