Hook up refresh button to backend

This commit is contained in:
James Allen 2018-02-20 11:49:02 +00:00
parent 9733223840
commit 6848e97a82
4 changed files with 62 additions and 21 deletions

View file

@ -31,7 +31,7 @@ module.exports = EditorController =
if err?
logger.err err:err, project_id:project_id, folder_id:folder_id, fileName:fileName, "error adding file without lock"
return callback(err)
EditorRealTimeController.emitToRoom(project_id, 'reciveNewFile', folder_id, fileRef, source)
EditorRealTimeController.emitToRoom(project_id, 'reciveNewFile', folder_id, fileRef, source, linkedFileData)
callback(err, fileRef)
upsertDoc: (project_id, folder_id, docName, docLines, source, user_id, callback = (err)->)->
@ -44,7 +44,7 @@ module.exports = EditorController =
ProjectEntityUpdateHandler.upsertFile project_id, folder_id, fileName, fsPath, linkedFileData, user_id, (err, file, didAddFile) ->
return callback(err) if err?
if didAddFile
EditorRealTimeController.emitToRoom project_id, 'reciveNewFile', folder_id, file, source
EditorRealTimeController.emitToRoom project_id, 'reciveNewFile', folder_id, file, source, linkedFileData
callback null, file
upsertDocWithPath: (project_id, elementPath, docLines, source, user_id, callback) ->
@ -62,7 +62,7 @@ module.exports = EditorController =
EditorController._notifyProjectUsersOfNewFolders project_id, newFolders, (err) ->
return callback(err) if err?
if didAddFile
EditorRealTimeController.emitToRoom project_id, 'reciveNewFile', lastFolder._id, file, source
EditorRealTimeController.emitToRoom project_id, 'reciveNewFile', lastFolder._id, file, source, linkedFileData
callback()
addFolder : (project_id, folder_id, folderName, source, callback = (error, folder)->)->

View file

@ -35,7 +35,7 @@ div.binary-file.full-size(
p.no-preview(
ng-if="failedLoad || textPreview.error || isUnpreviewableFile()"
) #{translate("no_preview_available")}
) #{translate("no_preview_available")} {{ failedLoad }} {{ textPreview.error }} {{ isUnpreviewableFile() }}
div.binary-file-footer
div(ng-show="openFile.linkedFileData.provider == 'url'")
@ -48,12 +48,14 @@ div.binary-file.full-size(
| at {{ openFile.created | formatDate:'h:mm a' }} {{ openFile.created | relativeDate }}
span(ng-show="openFile.linkedFileData.provider == 'url'")
a.btn.btn-success(
href
button.btn.btn-success(
href, ng-click="refreshFile(openFile)",
ng-disabled="refreshing"
)
i.fa.fa-fw.fa-refresh
i.fa.fa-fw.fa-refresh(ng-class={'fa-spin': refreshing})
|
| Refresh
span(ng-show="!refreshing") Refresh
span(ng-show="refreshing") Refreshing...
|  
a.btn.btn-info(
ng-href="/project/{{ project_id }}/file/{{ openFile.id }}"

View file

@ -2,7 +2,7 @@ define [
"base"
"moment"
], (App, moment) ->
App.controller "BinaryFileController", ["$scope", "$rootScope", "$http", "$timeout", "$element", ($scope, $rootScope, $http, $timeout, $element) ->
App.controller "BinaryFileController", ["$scope", "$rootScope", "$http", "$timeout", "$element", "ide", ($scope, $rootScope, $http, $timeout, $element, ide) ->
TWO_MEGABYTES = 2 * 1024 * 1024
@ -30,6 +30,8 @@ define [
error: false
data: null
$scope.refreshing = false
MAX_URL_LENGTH = 60
FRONT_OF_URL_LENGTH = 35
FILLER = '...'
@ -42,6 +44,14 @@ define [
else
return url
$scope.refreshFile = (file) ->
$scope.refreshing = true
ide.fileTreeManager.refreshLinkedFile(file)
.then () ->
loadTextFileFilePreview()
.finally () ->
$scope.refreshing = false
# Callback fired when the `img` tag fails to load,
# `failedLoad` used to show the "No Preview" message
$scope.failedLoad = false
@ -56,12 +66,18 @@ define [
$scope.imgLoaded = true
$scope.$apply()
loadTextFileFilePreview = () ->
do loadTextFileFilePreview = () ->
return unless $scope.isTextFile()
url = "/project/#{project_id}/file/#{$scope.openFile.id}?range=0-#{TWO_MEGABYTES}"
$scope.textPreview.data = null
$scope.textPreview.loading = true
$scope.textPreview.shouldShowDots = false
$scope.$apply()
$http.get(url)
$http({
url: url,
method: 'GET',
transformResponse: null # Don't parse JSON
})
.then (response) ->
{ data } = response
$scope.textPreview.error = false
@ -74,7 +90,8 @@ define [
finally
$scope.textPreview.data = data
$timeout(setHeight, 0)
.catch () ->
.catch (error) ->
console.error(error)
$scope.textPreview.error = true
$scope.textPreview.loading = false
@ -86,9 +103,4 @@ define [
# Don't show the preview until we've set the height, otherwise we jump around
$scope.textPreview.loading = false
do loadTextFileIfRequired = () ->
if $scope.isTextFile()
$scope.textPreview.data = null
loadTextFileFilePreview()
]

View file

@ -37,13 +37,14 @@ define [
}
@recalculateDocList()
@ide.socket.on "reciveNewFile", (parent_folder_id, file) =>
@ide.socket.on "reciveNewFile", (parent_folder_id, file, source, linkedFileData) =>
parent_folder = @findEntityById(parent_folder_id) or @$scope.rootFolder
@$scope.$apply () =>
parent_folder.children.push {
name: file.name
id: file._id
type: "file"
type: "file",
linkedFileData: linkedFileData
}
@recalculateDocList()
@ -175,6 +176,9 @@ define [
_findEntityByPathInFolder: (folder, path) ->
if !path? or !folder?
return null
if path == ""
return folder
parts = path.split("/")
name = parts.shift()
rest = parts.join("/")
@ -222,10 +226,19 @@ define [
getRootDocDirname: () ->
rootDoc = @findEntityById @$scope.project.rootDoc_id
return if !rootDoc?
path = @getEntityPath(rootDoc)
return @_getEntityDirname(rootDoc)
_getEntityDirname: (entity) ->
path = @getEntityPath(entity)
return if !path?
return path.split("/").slice(0, -1).join("/")
_findParentFolder: (entity) ->
dirname = @_getEntityDirname(entity)
console.log('dirname', dirname)
return if !dirname?
return @findEntityByPath(dirname)
loadRootFolder: () ->
@$scope.rootFolder = @_parseFolder(@$scope?.project?.rootFolder[0])
@ -357,7 +370,7 @@ define [
_csrf: window.csrfToken
}
createLinkedFile: (name, parent_folder = @getCurrentFolder(), provider, data) ->
createLinkedFile: (name, parent_folder = @getCurrentFolder(), provider, data) ->
# check if a doc/file/folder already exists with this name
if @existsInThisFolder parent_folder, name
return @nameExistsError()
@ -371,6 +384,20 @@ define [
_csrf: window.csrfToken
}
refreshLinkedFile: (file) ->
parent_folder = @_findParentFolder(file)
data = file.linkedFileData
provider = data?.provider
return if !provider?
console.log 'refreshLinkedFile', {parent_folder, provider, data}
return @ide.$http.post "/project/#{@ide.project_id}/linked_file", {
name: file.name,
parent_folder_id: parent_folder?.id
provider,
data,
_csrf: window.csrfToken
}
renameEntity: (entity, name, callback = (error) ->) ->
return if entity.name == name
return if name.length >= 150