   fetch: promisify ({rootNodeId}, callback)->
     filter = "'#{rootNodeId}' in parents" # only finds files *directly* in this folder (not in subfolders)
     @getFiles(filter).then (files) =>
+      @addMetadata files
       sphere = @toSphere rootNodeId, files
       callback null, sphere
+
+  addMetadata: (files) ->
+    for file in files
+      if file.id? and not file.viewUrl?
+        file.viewUrl ?= "http://drive.google.com/uc?export=view&id=#{file.id}"
+      if file.id? and not file.downloadUrl?
+        file.downloadUrl ?= "http://drive.google.com/uc?export=download&id=#{file.id}"
+      if file.id? and file.mimeType.startsWith('image/') and not file.thumbnailUrl?
+        file.thumbnailUrl ?= "https://drive.google.com/thumbnail?authuser=0&sz=w320&id=#{file.id}"
 
   toSphere: (rootNodeId, files) =>
     sphere = new Sphere

              pageToken: nextPageToken
            retrievePageOfFiles request, result
          else
            callback null, result
        )
      initialRequest = gapi.client.drive.files.list 'q': filter

      retrievePageOfFiles initialRequest, []

  # ####################################################################


  getFiles: promisify (filter, callback) ->
    gapi.client.load 'drive', 'v3', ->
      retrievePageOfFiles = (request, files) ->
        request.execute((resp) ->
          files = files.concat resp.files
          nextPageToken = resp.nextPageToken
          if nextPageToken
            request = gapi.client.drive.files.list
