1
+ var path = Npm . require ( 'path' ) ;
2
+ var Future = Npm . require ( path . join ( 'fibers' , 'future' ) ) ;
3
+ var fs = Npm . require ( 'fs' ) ;
4
+ var pemFile ;
5
+ if ( __meteor_bootstrap__ && __meteor_bootstrap__ . serverDir ) {
6
+ pemFile = path . join ( __meteor_bootstrap__ . serverDir , 'assets/app/google-key.pem' ) ;
7
+ }
8
+
1
9
Meteor . methods ( {
2
10
// Fetches from a google spreadsheet
3
11
// key = key from googe spreadsheet publish
4
- // worksheet = numerical index or string
12
+ // worksheet = 0-based index of worksheet
5
13
// range = "R1C1:R5C5"
6
- 'spreadsheet/fetch' : function ( key , worksheet , range , rowOneHeader ) {
14
+ // headerRow = 1-based index of row containing header, if there is a header
15
+ 'spreadsheet/fetch' : function ( key , worksheet , range , headerRow ) {
7
16
if ( ! worksheet ) worksheet = 0 ;
8
- if ( ! rowOneHeader ) rowOneHeader = true ;
9
- return GoogleSpreadsheets ( {
17
+ var fut = new Future ( ) ; //don't return until we're done importing
18
+ GoogleSpreadsheets ( {
10
19
key : key
11
- } , Meteor . bindEnvironment ( function ( err , spreadsheet ) {
20
+ } , Meteor . bindEnvironment ( function ( error , spreadsheet ) {
21
+ if ( error ) {
22
+ console . log ( "Error getting Google sheet with key " + key + ":" , error ) ;
23
+ fut . return ( false ) ;
24
+ return ;
25
+ }
12
26
spreadsheet . worksheets [ worksheet ] . cells ( {
13
27
range : range
14
28
} , Meteor . bindEnvironment ( function ( err , cells ) {
29
+ var header , data ;
15
30
//console.log("Upserting spreadsheet: ",spreadsheet.title)
16
- header = cells . cells [ 1 ] ;
17
- if ( rowOneHeader == true ) delete cells . cells [ 1 ] ;
31
+ if ( headerRow ) {
32
+ header = cells . cells [ headerRow ] ;
33
+ delete cells . cells [ headerRow ] ;
34
+ }
18
35
data = cells . cells ;
19
- record = GASpreadsheet . upsert ( { spreadsheet : spreadsheet . title } , { $set :{ spreadsheet : spreadsheet . title , header : header , cells : data } } )
36
+ var result = GASpreadsheet . upsert ( { spreadsheet : spreadsheet . title } , { $set :{ header : header , cells : data } } ) ;
37
+ fut . return ( GASpreadsheet . findOne ( { spreadsheet : spreadsheet . title } , { fields : { _id : 1 } } ) . _id ) ;
20
38
} ) ) ;
21
39
} ) ) ;
40
+ return fut . wait ( ) ;
22
41
} ,
23
- 'spreadsheet/update' : function ( key , worksheet , rowOneHeader ) {
24
- if ( ! worksheet ) worksheet = 0 ;
25
- if ( ! rowOneHeader ) rowOneHeader = true ;
26
- //TODO update spreadsheet with collection updates
42
+ 'spreadsheet/fetch2' : function ( spreadsheetName , worksheetId , options ) {
43
+ var fut = new Future ( ) ; //don't return until we're done exporting
44
+
45
+ EditGoogleSpreadsheet . load ( {
46
+ //debug: true,
47
+ spreadsheetName : spreadsheetName ,
48
+ worksheetId : worksheetId ,
49
+ oauth : {
50
+ email : options . email ,
51
+ keyFile : pemFile
52
+ }
53
+ } , function sheetReady ( err , spreadsheet ) {
54
+ if ( err ) {
55
+ console . log ( err ) ;
56
+ fut . return ( false ) ;
57
+ return ;
58
+ }
59
+ spreadsheet . receive ( function ( err , rows , info ) {
60
+ if ( err ) {
61
+ console . log ( err ) ;
62
+ fut . return ( false ) ;
63
+ } else {
64
+ fut . return ( { rows : rows , info : info } ) ;
65
+ }
66
+ } ) ;
67
+ } ) ;
68
+ return fut . wait ( ) ;
69
+ } ,
70
+ 'spreadsheet/update' : function ( spreadsheetName , worksheetId , updateObject , options ) {
71
+ var fut = new Future ( ) ; //don't return until we're done exporting
72
+
73
+ EditGoogleSpreadsheet . load ( {
74
+ //debug: true,
75
+ spreadsheetName : spreadsheetName ,
76
+ worksheetId : worksheetId ,
77
+ oauth : {
78
+ email : options . email ,
79
+ keyFile : pemFile
80
+ }
81
+ } , function sheetReady ( err , spreadsheet ) {
82
+ if ( err ) {
83
+ console . log ( err ) ;
84
+ fut . return ( false ) ;
85
+ return ;
86
+ }
87
+ spreadsheet . add ( updateObject ) ;
88
+ spreadsheet . send ( function ( err ) {
89
+ if ( err ) {
90
+ console . log ( err ) ;
91
+ fut . return ( false ) ;
92
+ } else {
93
+ fut . return ( true ) ;
94
+ }
95
+ } ) ;
96
+ } ) ;
97
+ return fut . wait ( ) ;
27
98
}
28
99
} ) ;
0 commit comments