Completed
Push — master ( f21795...e63d25 )
by Janis
02:34
created

Ocr._shrinkData   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
/**
2
 * nextCloud - ocr
3
 *
4
 * This file is licensed under the Affero General Public License version 3 or
5
 * later. See the COPYING file.
6
 *
7
 * @author Janis Koehr <[email protected]>
8
 * @copyright Janis Koehr 2016
9
 */
10
(function() {
11
12
	var OCR_ALLOWED_MIMETYPES = ['application/pdf', 'image/png', 'image/jpeg', 'image/tiff'];
13
14
	/**
15
	 * Constructor of the ocr object.
16
	 * This object holds all our ocr stuff.
17
	 * processing state, available languages, etc.
18
	 * @param baseUrl
19
	 * @constructor
20
	 */
21
	var Ocr = function (baseUrl) {
22
		this._baseUrl = baseUrl;
23
		this._languages = [];
24
		this._status = [];
25
	};
26
27
	/**
28
	 * Class prototype for Ocr. Following functions are available:
29
	 */
30
	Ocr.prototype = {
31
		getLanguages: function () {
32
			var self = this;
33
			return self._languages;
34
		},
35
		getStatus: function () {
36
			var self = this;
37
			return self._status;
38
		},
39
		/**
40
		 * AJAX call.
41
		 * Loads all available languages.
42
		 * @returns $.Deferred()
43
		 */
44
		loadAllLanguages: function () {
45
			var deferred = $.Deferred();
46
			var self = this;
47
			$.get(self._baseUrl).done(function (languages) {
48
				self._languages = languages;
49
				deferred.resolve(languages);
50
			}).fail(function (jqXHR) {
51
				deferred.reject(jqXHR.responseText);
52
			});
53
			return deferred.promise();
54
		},
55
		process: function(selectedFiles, selectedLanguage){
56
			var self = this;
57
			var deferred = $.Deferred();
58
			if(self.checkMimeTypes(selectedFiles)){
59
				selectedFiles = self._shrinkData(selectedFiles);
60
				var data = {language: selectedLanguage, files: selectedFiles};
61
				$.ajax({
62
					url: self._baseUrl,
63
					method: 'POST',
64
					contentType: 'application/json',
65
					data: JSON.stringify(data)
66
				}).done(function () {
67
					deferred.resolve();
68
				}).fail(function (jqXHR) {
69
					deferred.reject(jqXHR.responseText);
70
				});
71
			}else{
72
				deferred.reject(t('ocr','Files have wrong mimetypes.'));
73
			}
74
			return deferred.promise();
75
		},
76
		checkStatus: function () {
77
			var deferred = $.Deferred();
78
			var self = this;
79
			/** global: OC */
80
			$.get(OC.generateUrl('/apps/ocr/status')).done(function (status) {
81
				self._status = status;
82
				deferred.resolve(status);
83
			}).fail(function (jqXHR) {
84
				deferred.reject(jqXHR.responseText);
85
			});
86
			return deferred.promise();
87
		},
88
		checkMimeTypes: function (selectedFiles) {
89
			var correct = true;
90
			selectedFiles.forEach(function(file){
91
				if($.inArray(file.mimetype, OCR_ALLOWED_MIMETYPES) == -1){
92
					correct = false;
93
				}
94
			});
95
			return correct;
96
		},
97
		_shrinkData: function(files) {
98
			return files.map(function(file){
99
				return {id: file.id};
100
			});
101
		},
102
		initialize: function () {
103
			var self = this;
104
			var deferred = $.Deferred();
105
			self.loadAllLanguages().done(function(){
106
				deferred.resolve();
107
			}).fail(function(message){
108
				deferred.reject(message);
109
			});
110
			return deferred.promise();
111
		}
112
	};
113
	/** global: OCA */
114
	if (OCA.Ocr) {
115
		OCA.Ocr.Ocr = Ocr;
116
	}
117
})();