From bf8bc27de0997a1fbe9638c94bd981cb3fe378ce Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Mon, 12 Jan 2015 16:46:17 +0000 Subject: [PATCH] catch errors in pdf viewer and reload if necessary if more than 3 reloads, display error to the user --- .../coffee/ide/pdf/controllers/PdfController.coffee | 3 +++ .../coffee/ide/pdfng/directives/pdfViewer.coffee | 13 ++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee b/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee index 610009bf8c..eae6d8052d 100644 --- a/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee +++ b/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee @@ -10,6 +10,9 @@ define [ $scope.recompile(isAutoCompile: true) $scope.hasPremiumCompile = $scope.project.features.compileGroup == "priority" + $scope.$on "pdf:error:display", () -> + $scope.pdf.error = true + sendCompileRequest = (options = {}) -> url = "/project/#{$scope.project_id}/compile" if options.isAutoCompile diff --git a/services/web/public/coffee/ide/pdfng/directives/pdfViewer.coffee b/services/web/public/coffee/ide/pdfng/directives/pdfViewer.coffee index e3d5df0adf..8d4100c9ba 100644 --- a/services/web/public/coffee/ide/pdfng/directives/pdfViewer.coffee +++ b/services/web/public/coffee/ide/pdfng/directives/pdfViewer.coffee @@ -25,7 +25,7 @@ define [ # $scope.pages = [] $scope.document.destroy() if $scope.document? - + scope.loadCount = scope.loadCount? ? scope.loadCount + 1 : 1 # TODO need a proper url manipulation library to add to query string $scope.document = new PDFRenderer($scope.pdfSrc + '&pdfng=true' , { scale: 1, @@ -293,6 +293,16 @@ define [ ] #scope.$apply() + scope.$on 'pdf:error', (event, error) -> + return if error == 'cancelled' + # check if too many retries or file is missing + if scope.loadCount > 3 || error.match(/^Missing PDF/i) + scope.$emit 'pdf:error:display' + return + ctrl.load() + # trigger a redraw + scope.scale = angular.copy (scope.scale) + element.on 'scroll', () -> #console.log 'scroll event', element.scrollTop(), 'adjusting?', scope.adjustingScroll if scope.adjustingScroll @@ -317,6 +327,7 @@ define [ scope.$watch 'pdfSrc', (newVal, oldVal) -> # console.log 'loading pdf', newVal, oldVal return unless newVal? + scope.loadCount = 0; # new pdf, so reset load count ctrl.load() # trigger a redraw scope.scale = angular.copy (scope.scale)