qnap-file_station 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: afd92ae3b99527ea64cb659f422cf54e8f4e3b04
4
+ data.tar.gz: 06665735be81179b757a10b1d980013eef0232b3
5
+ SHA512:
6
+ metadata.gz: 0c1ee4272265edcbed969ea1f7d93e1e628bb38568cc29723b89f0b6493aab5f4f9df27270a69b42812d75a009b7c03489dd5ad278a4a23cbf16b8e717617bc1
7
+ data.tar.gz: 3a88ad3757fabce25d6ad8a80b7619921fc290c9a46be98125ce1eea302ecd1247ad318df9d0914024a17fc2e20650bd3925a05ec397b46461aec125a11678a9
data/README.md ADDED
@@ -0,0 +1,493 @@
1
+ Qnap::FileStation
2
+ =======
3
+
4
+ This gem provides an interface to the File Station app that comes installed by default on many QNAP NAS.
5
+
6
+ It provides access to all available endpoints, but the documentation is patchy and untested. Use with caution.
7
+
8
+ Installation
9
+ -------
10
+
11
+ `gem install qnap-file_station`
12
+
13
+ Usage
14
+ -------
15
+
16
+ ```ruby
17
+ require 'qnap/file_station'
18
+
19
+ fs = Qnap::FileStation.new '192.168.1.100', 'username', 'password'
20
+ fs.createdir dest_folder: "", dest_path: ""
21
+ contents = fs.get_extract_list extract_file: "my_zip_file.zip"
22
+ fs.logout
23
+ ```
24
+
25
+ ```ruby
26
+ # Alternative syntax to guarantee logout
27
+
28
+ Qnap::FileStation.session('192.168.1.100', 'username', 'password') do |fs|
29
+ # Show contents of the recycle bin
30
+ pp fs.get_tree node: "recycle_root"
31
+ # logout is automatically called, even if there was an exception
32
+ end
33
+
34
+ ```
35
+
36
+ Available methods
37
+
38
+ ### createdir
39
+ Create a folder in the specified path.
40
+
41
+ #### Parameters
42
+ Key | Description
43
+ --- | ---
44
+ dest_folder | Folder name
45
+ dest_path | Path of the folder
46
+
47
+ ### rename
48
+ Rename a folder or file in the specified path.
49
+
50
+ #### Parameters
51
+ Key | Description
52
+ --- | ---
53
+ sid | Input sid for authentication
54
+ path | Path of the folder/ file
55
+ source_name | Current folder/ file name to be changed
56
+ dest_name | New folder/ file name
57
+
58
+ ### copy
59
+ Copy a file/folder from the source to the destination.
60
+
61
+ #### Parameters
62
+ Key | Description
63
+ --- | ---
64
+ source_file | Name of the copied file/folder
65
+ source_total | Total number of copied files/folders
66
+ source_path | Source path of the copied file/folder
67
+ dest_path | Destination of the copied file/folder
68
+ mode | 1: skip, 0: overwrite
69
+ dup | The duplication file name when copying the same destination with source files/folders.
70
+
71
+ ### move
72
+ Move a file/folder from the source to the destination.
73
+
74
+ #### Parameters
75
+ Key | Description
76
+ --- | ---
77
+ source_file | Name of the copied file/folder
78
+ source_total | Total number of copied files/folders
79
+ source_path | Source path of the copied file/folder
80
+ dest_path | Destination of the copied file/folder
81
+ mode | 1: skip, 0: overwrite
82
+
83
+ ### get_extract_list
84
+ List the content of a zipped file.
85
+
86
+ #### Parameters
87
+ Key | Description
88
+ --- | ---
89
+ extract_file | Path of the extracted file
90
+ code_page | Extracting code page (UTF-8 only)
91
+ start | Start number of the listed contents
92
+ limit | Total number of the listed contents
93
+ sort | Sorting type (filename, file_size, compress_size, mt)
94
+ dir | List type (ASC, DESC)
95
+
96
+ ### extract
97
+ Extract files from a zipped file to the specified path on NAS. This is an asynchronous API. The caller can use the returned process ID (pid) for further operations.
98
+
99
+ #### Parameters
100
+ Key | Description
101
+ --- | ---
102
+ extract_file | Path of the extracted files
103
+ code_page | Extracting code page (UTF-8 only)
104
+ dest_path | Destination of the extracted files
105
+ pwd | Extraction password (can be null)
106
+ mode | Extraction mode (extract_all, extract_part)
107
+ overwrite | 1: overwrite, 0: skip
108
+ path_mode | full: extract file with full path none: don't extract file with full path
109
+ code_page | Extracting code page (UTF-8 only) If mode is extract_part
110
+ part_file | Name of the file to be extracted (can be more than one)
111
+ part_total | The total number of extracted files
112
+
113
+ ### cancel_extract
114
+ Cancel the extraction process by process ID.
115
+
116
+ #### Parameters
117
+ Key | Description
118
+ --- | ---
119
+ pid | Pid of the extracting process
120
+
121
+ ### compress
122
+ Compress files to a specified file on NAS. This is an asynchronous API. The caller can use the returned process ID (pid) for further operations.
123
+
124
+ #### Parameters
125
+ Key | Description
126
+ --- | ---
127
+ extract_file | Path of the extracted files
128
+ compress_name | The compressed name
129
+ type | Compressed format type (7z/zip)(default:zip)
130
+ pwd | The compressed password (can be null)
131
+ level | Compressed level (normal/large/fast) (default:normal)
132
+ encryipt | 7z:AES256, zip:ZipCrypto/AES256 (can be null)
133
+ path | The compressed file path
134
+ total | The amount of compression files number
135
+ compress_file | The compressed file name
136
+
137
+ ### cancel_compress
138
+ Cancel the compressing process by process ID.
139
+
140
+ #### Parameters
141
+ Key | Description
142
+ --- | ---
143
+ pid | Pid of the compressing process
144
+
145
+ ### get_compress_status
146
+ Get the compressing status by process ID.
147
+
148
+ #### Parameters
149
+ Key | Description
150
+ --- | ---
151
+ pid | Pid of the compressing process
152
+
153
+ ### download
154
+ Download a file, a folder, or multiple files as a zip file, a compressed file, or just the same as they are.
155
+
156
+ #### Parameters
157
+ Key | Description
158
+ --- | ---
159
+ isfolder | The request file is a folder. 1: yes, 0: no.
160
+ compress | If the request file is a folder or files then<br>0/1: zip archive only, 2: compress files.<br>else the request file is a single file then<br>0: transfer the original file to client<br>1: zip archive only<br>2: compress files<br>
161
+ source_path | Path of the file. Start with the share name.
162
+ source_file | File name.
163
+ source_total | Total number of files.
164
+
165
+ ### get_thumb
166
+ Get a size-specified thumbnail of an image file.
167
+
168
+ #### Parameters
169
+ Key | Description
170
+ --- | ---
171
+ path | Path of the file. Start with the share name.
172
+ name | File name.
173
+ size | 80/320/640; default value:320
174
+
175
+ ### upload
176
+ Upload a file.
177
+
178
+ #### Parameters
179
+ Key | Description
180
+ --- | ---
181
+ type | standard
182
+ dest_path | Destination dir path
183
+ overwrite | 1: overwrite, 0: skip
184
+ progress | Destination file path, "/" needs to be replaced with "-"
185
+
186
+ ### get_viewer
187
+ Open a multimedia file stream for viewing or playing.
188
+
189
+ #### Parameters
190
+ Key | Description
191
+ --- | ---
192
+ func | open
193
+ source_path | Source dir path
194
+ source_file | Source file name
195
+ player | Use the
196
+ rtt | 1:FLV for video or music, 3:MP3 for music
197
+ format | Video transcode format type for opening. jwplayer player or not (1/0)
198
+ format | can be : mp4_360 / mp4_720 / flv_720
199
+
200
+ ### get_tree
201
+ Get folder list in a folder, a shared iso, the shared root folder, or the recycle bin.
202
+
203
+ #### Parameters
204
+ Key | Description
205
+ --- | ---
206
+ is_iso | Is a iso share. 1: yes, 0: no. Default is 0. This value is according to a field "iconCls" in get_tree response. If "iconCls" is "iso", this value is 1.
207
+ node | Target folder path. Use folder path to get folder list, and use the value with "share_root" to get share list, or use the value with "recycle_root" to get recycle bin share list.
208
+
209
+ ### get_list
210
+ Retrieve both file and folder list in a specified folder or a shared iso, with filters such as response record count, file type..., etc.
211
+
212
+ #### Parameters
213
+ Key | Description
214
+ --- | ---
215
+ is_iso | Is a iso share. 1: yes, 0: no
216
+ list_mode | Value is "all"
217
+ path | Folder path
218
+ dir | Sorting direction. ASC: Ascending , DESC: Descending
219
+ limit | Number of response datas
220
+ sort | Sort field (filename/filesize/filetype/mt/privilege/owner/group)
221
+ start | Response data start index
222
+ hidden_file | List hidden file or not. 0:donnot list hidden files, 1:list files
223
+ type | 1: MUSIC, 2:VIDEO, 3:PHOTO (1/2/3)
224
+ mp4_360 | Video format type mp4_360 true or not(1/0)
225
+ mp4_720 | Video format type mp4_720 true or not(1/0)
226
+ flv_720 | Video format type flv_720 true or not(1/0)
227
+ filename | Search video file name
228
+
229
+ ### get_file_size
230
+ Get total files size in a specified path. The size counting includes hidden file and folder.
231
+
232
+ #### Parameters
233
+ Key | Description
234
+ --- | ---
235
+ path | Folder path
236
+ total | The number of file/folder which are calculating the total size
237
+ name | file or folder name
238
+
239
+ ### delete
240
+ Delete folder(s)/file(s) in a specified path.
241
+
242
+ #### Parameters
243
+ Key | Description
244
+ --- | ---
245
+ path | Folder path.
246
+ file_total | Total number of folder/file(s).
247
+ file_name | Folder/file name.
248
+
249
+ ### stat
250
+ Get status of folder(s)/file(s), such as file size, privilege..., etc.
251
+
252
+ #### Parameters
253
+ Key | Description
254
+ --- | ---
255
+ path | Folder path.
256
+ file_total | Total number of folder/file(s).
257
+ file_name | Folder/file name.
258
+
259
+ ### stat
260
+ Set folder(s)/file(s) modification time.
261
+
262
+ #### Parameters
263
+ Key | Description
264
+ --- | ---
265
+ path | Folder path.
266
+ file_total | Total number of folder/file(s).
267
+ file_name | Folder/file name.
268
+ settime | 1: set modification time
269
+ timestamp | Epoch time (seconds since 1970-01-01 00:00:00 UTC).<br>The modification time will be set current datetime on the server if not specified.
270
+
271
+ ### search
272
+ Search file/folder by key word within a specified path.
273
+
274
+ #### Parameters
275
+ Key | Description
276
+ --- | ---
277
+ is_iso | Is a iso share. 1: yes, 0: no
278
+ keyword | keyword
279
+ source_path | Folder path
280
+ dir | Sorting direction. ASC: Ascending , DESC: Descending
281
+ limit | Number of response data
282
+ sort | Sort field (filename/filesize/filetype/mt/privilege/owner/group)
283
+ start | Response data start index
284
+
285
+ ###
286
+ Download a shared file by an unique ID (ssid).
287
+
288
+ #### Parameters
289
+ Key | Description
290
+ --- | ---
291
+ uniqe_id | Use the unique id to download the shared file.
292
+
293
+ ### get_share_link
294
+ Create share links of specified files, and retrieve or email the links to someone.
295
+
296
+ #### Parameters
297
+ Key | Description
298
+ --- | ---
299
+ network_type | internet: from network, local: from local
300
+ download_type | create_download_link: create download link, email_download_link: email download link
301
+ valid_duration | specific_time: specific the download time, period_of_time: time period, forever: forver download load
302
+ hostname | host IP or domain name
303
+ day | shared day time if valid_duration=period_of_time
304
+ hour | shared hour time if valid_duration=period_of_time
305
+ file_total | shared datetime if valid_duration=specific_time
306
+ file_name | 0(zero) if valid_duration=forever
307
+ path | download file path
308
+ ssl | enabled ssl
309
+ access_enabled | enable access code
310
+ access_code | access code
311
+ include_access_code | email contents include access code or not
312
+ addressee | get email addressee
313
+ subject | get email subject
314
+ content | get email content
315
+
316
+ ### share_file
317
+ Create share link and email to someone.
318
+
319
+ #### Parameters
320
+ Key | Description
321
+ --- | ---
322
+ network_type | internet: from network, local: from local
323
+ download_type | create_download_link: create download link, email_download_link: email download link
324
+ valid_duration | specific_time: specific the download time, period_of_time: time period, forever: forver download load
325
+ hostname | host IP or domain name
326
+ day | shared day time if valid_duration=period_of_time
327
+ hour | shared hour time if valid_duration=period_of_time
328
+ file_total | shared datetime if valid_duration=specific_time
329
+ file_name | 0(zero) if valid_duration=forever
330
+ path | download file path
331
+ ssl | enabled ssl
332
+ access_enabled | enable access code
333
+ access_code | access code
334
+ include_access_code | email contents include access code or not
335
+ addressee | get email addressee
336
+ subject | get email subject
337
+ content | get email content
338
+ link_url | internet: from network, local: from local
339
+ mail_content_date | mail contents for valid date information
340
+ mail_content_pwd | mail contents for password information
341
+ expire_time | expire time(seconds)
342
+
343
+ ### get_share_list
344
+ Get whole shared file list.
345
+
346
+ #### Parameters
347
+ Key | Description
348
+ --- | ---
349
+ dir | Sorting direction. ASC: Ascending , DESC: Descending
350
+ limit | Number of response data
351
+ sort | Sort field (filename/filesize/filetype/mt/privilege/owner/group)
352
+ start | Response data start index
353
+
354
+ ### get_domain_ip_list
355
+ Get hostname and external IP address of the NAS.
356
+
357
+
358
+ ### delete_share
359
+ Stop specified file(s) sharing.
360
+
361
+ #### Parameters
362
+ Key | Description
363
+ --- | ---
364
+ file_total | number of total files
365
+ download_link | link url
366
+ filename | shared file
367
+
368
+ ### delete_share_all
369
+ Stop all file sharing.
370
+
371
+
372
+ ### update_share_link
373
+ Update the attributes of specified share links.
374
+
375
+ #### Parameters
376
+ Key | Description
377
+ --- | ---
378
+ download_type | create_download_link: create download link, email_download_link: email download link
379
+ valid_duration | specific_time: specific the download time,<br>period_of_time: time period,<br>forever: forver download load
380
+ hostname | host IP or domain name
381
+ datetime | expire sharing time
382
+ file_total | shared datetime if valid_duration=specific_time
383
+ ssl | enabled ssl
384
+ access_enabled | enable access code
385
+ access_code | access code
386
+ ssids | the ssid of shared files
387
+
388
+ ### get_tree
389
+ Retrieve recycle bin tree list. 2
390
+
391
+ #### Parameters
392
+ Key | Description
393
+ --- | ---
394
+ node | Recycle Bin node name (${node}=recycle_root)
395
+
396
+ ### trash_recovery
397
+ Recovery specified files in recycle bin. This is an asynchronous API. The caller can use the returned process ID (pid) for further operations.
398
+
399
+ #### Parameters
400
+ Key | Description
401
+ --- | ---
402
+ source_file | Name of the copied file/folder
403
+ source_total | Total number of the recovery trash files
404
+ source_path | Source path of the trash
405
+ mode | 1: skip, 0: overwrite
406
+ source_file | trash file
407
+ source_file | ....
408
+
409
+ ### cancel_trash_recovery
410
+ Cancel recycle bin recovery process by process ID.
411
+
412
+ #### Parameters
413
+ Key | Description
414
+ --- | ---
415
+ pid | Pid of the recycle bin recovery process
416
+
417
+ ### delete
418
+ Empty the recycle bin.
419
+
420
+ #### Parameters
421
+ Key | Description
422
+ --- | ---
423
+ path | The path folder name of recycle bin
424
+ file_name | Same as the value ${path}
425
+
426
+ ### video_ml_queue
427
+ Retrieve the status of media library transcoding queue.
428
+
429
+ #### Parameters
430
+ Key | Description
431
+ --- | ---
432
+ op | 1: transcoding queue lists
433
+ subop | 0: wait status<br>1: finish status<br>2: error<br>3: ongoing<br>4: all
434
+
435
+ ### video_ml_queue
436
+ Add or delete files in the media library transcoding queue.
437
+
438
+ #### Parameters
439
+ Key | Description
440
+ --- | ---
441
+ op | Operation
442
+ subop | Sub-operation
443
+ total | The amount of filenames.
444
+ path | The opration path name.
445
+ filename | filename
446
+
447
+ ### video_list
448
+ Get media library transcode files list.
449
+
450
+ #### Parameters
451
+ Key | Description
452
+ --- | ---
453
+ source_path | Source file path
454
+ source_total | The source file total number for ${source_file}
455
+ source_file | Source file name
456
+
457
+ ### video_ml_status
458
+ Get media library files transcode status.
459
+
460
+ #### Parameters
461
+ Key | Description
462
+ --- | ---
463
+ path | Source file path
464
+ total | The source file total number for ${source_file}
465
+ filename | Source file name
466
+
467
+ ### delete_transcode
468
+ Delete the media transcode or image files.
469
+
470
+ #### Parameters
471
+ Key | Description
472
+ --- | ---
473
+ path | Folder path.
474
+ file_total | Total number of folder/file(s).
475
+ file_name | Folder/file name.
476
+ mode | 1: delete image files<br>2: delete transcode video files<br>3: delete image and transcode video files.
477
+ keep_trans | 0: delete transcode files in "@Transcode" folder<br>1: do not delete transcode files in "@Transcode" folder
478
+
479
+ ### get_video_qstatus
480
+ Get transcode file status.
481
+
482
+ #### Parameters
483
+ Key | Description
484
+ --- | ---
485
+ pid | Video transcoding process id.
486
+
487
+ ### cancel_transcode
488
+ Cancel transcoding process.
489
+
490
+ #### Parameters
491
+ Key | Description
492
+ --- | ---
493
+ pid | Video transcoding process id.
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.libs << 'test'
5
+ end
6
+
7
+ desc "Run tests"
8
+ task :default => :test
@@ -0,0 +1,187 @@
1
+ require 'json'
2
+ require 'net/http'
3
+ require 'openssl'
4
+ require 'base64'
5
+
6
+ module Qnap
7
+ class FileStation
8
+ PROTOCOL = 'https'
9
+ API_METHODS = {
10
+ cancel_compress: [:pid],
11
+ cancel_extract: [:pid],
12
+ cancel_transcode: [:pid],
13
+ cancel_trash_recovery: [:pid],
14
+ compress: [:compress_file, :compress_name, :encryipt, :level, :pwd, :total, :type],
15
+ copy: [:dest_path, :dup, :mode, :source_file, :source_path, :source_total],
16
+ createdir: [:dest_folder, :dest_path],
17
+ delete: [:file_name, :file_total, :path],
18
+ delete_share: [:download_link, :file_total, :filename],
19
+ delete_share_all: [],
20
+ delete_transcode: [:file_name, :file_total, :keep_trans, :mode, :path],
21
+ download: [:compress, :isfolder, :source_file, :source_path, :source_total],
22
+ extract: [:code_page, :dest_path, :extract_file, :mode, :overwrite, :path_mode, :pwd],
23
+ get_compress_status: [:pid],
24
+ get_domain_ip_list: [],
25
+ get_extract_list: [:code_page, :dir, :extract_file, :limit, :path, :sort, :start],
26
+ get_file_size: [:name, :name, :path, :total],
27
+ get_list: [:dir, :filename, :flv_720, :hidden_file, :is_iso, :limit, :list_mode, :mp4_360, :mp4_720, :path, :sort, :start, :type],
28
+ get_share_link: [:access_code, :access_enabled, :addressee, :content, :day, :download_type, :file_name, :file_total, :hostname, :hour, :include_access_code, :network_type, :path, :ssl, :subject, :valid_duration],
29
+ get_share_list: [:dir, :limit, :sort, :start],
30
+ get_thumb: [:name, :path, :size],
31
+ get_tree: [:is_iso, :node],
32
+ get_video_qstatus: [:pid],
33
+ move: [:mode, :source_file, :source_path, :source_total],
34
+ rename: [:dest_name, :path, :source_name],
35
+ search: [:dir, :keyword, :limit, :sort, :source_path, :start],
36
+ share_file: [:access_code, :access_enabled, :addressee, :content, :day, :dowdownload_type, :expire_time, :file_name, :file_total, :hostname, :hour, :include_access_code, :link_url, :mail_content_date, :mail_content_pwd, :network_type, :path, :ssl, :subject, :valid_duration],
37
+ stat: [:file_name, :file_total, :mtime, :path, :settime],
38
+ trash_recovery: [:mode, :source_file, :source_path, :source_total],
39
+ update_share_link: [:access_code, :access_enabled, :datetime, :dowdownload_type, :file_total, :hostname, :ssids, :ssl, :valid_duration],
40
+ upload: [:dest_path, :overwrite, :progress, :type],
41
+ video_list: [:source_path, :source_total],
42
+ video_ml_queue: [:filename, :op, :path, :subop, :total],
43
+ video_ml_status: [:filename, :path, :total],
44
+ }
45
+
46
+ def self.session(*args)
47
+ ds = self.new *args
48
+ begin
49
+ yield ds
50
+ ensure
51
+ ds.logout
52
+ end
53
+ end
54
+
55
+ API_METHODS.each do |method_name, fields|
56
+
57
+ next if method_defined? method_name
58
+
59
+ define_method method_name, Proc.new { |params={}|
60
+ if (diff = fields - params.keys).count > 0
61
+ puts "Missing keys: #{diff}"
62
+ end
63
+
64
+ if (diff = params.keys - fields).count > 0
65
+ puts "Extra keys: #{diff}"
66
+ end
67
+
68
+ despatch_query @url, params.merge(func: method_name, sid: get_sid)
69
+ }
70
+
71
+ end
72
+
73
+ def login(params={})
74
+ despatch_query(
75
+ "#{PROTOCOL}://#{@host}/cgi-bin/filemanager/wfm2Login.cgi",
76
+ params
77
+ )
78
+ end
79
+
80
+ def logout(params={})
81
+ return unless @sid
82
+ despatch_query(
83
+ "#{PROTOCOL}://#{@host}/cgi-bin/filemanager/wfm2Logout.cgi",
84
+ params.merge(sid: @sid)
85
+ )
86
+ @sid = nil
87
+ end
88
+
89
+ def get_sid
90
+ @sid ||= login(user: @username, pwd: Base64.encode64(@password).strip)[:sid]
91
+ end
92
+
93
+ def initialize(host, username, password)
94
+ @host = host
95
+ @username = username
96
+ @password = password
97
+ @sid = nil
98
+ @url = "#{PROTOCOL}://#{@host}/cgi-bin/filemanager/utilRequest.cgi"
99
+ end
100
+
101
+ private
102
+
103
+ def despatch_query(url, params)
104
+ uri = URI url
105
+ uri.query = URI.encode_www_form(params) if params.keys.length > 0
106
+ req = Net::HTTP::Get.new uri
107
+
108
+ response = Net::HTTP.start(
109
+ uri.host,
110
+ uri.port,
111
+ use_ssl: PROTOCOL == 'https',
112
+ verify_mode: OpenSSL::SSL::VERIFY_NONE
113
+ ) do |https|
114
+ https.request req
115
+ end
116
+
117
+ unless (200..299).include? response.code.to_i
118
+ raise RuntimeError.new "Error response from #{uri} -> #{response.read_body}"
119
+ end
120
+
121
+ unless response['content-type'] =~ /application\/json/
122
+ raise "Don't know how to parse #{response['content-type']}"
123
+ end
124
+
125
+ data = JSON.parse response.read_body, symbolize_names: true
126
+
127
+ if data.respond_to?(:key?) and data.key?(:status) and data[:status] != 1
128
+ raise RuntimeError.new "Error response from #{uri} -> #{data}"
129
+ end
130
+
131
+ data
132
+ end
133
+ end
134
+ end
135
+
136
+ __END__
137
+ Error code, Token, Description
138
+ 0 WFM2_FAIL UNKNOWN ERROR
139
+ 1 WFM2_DONE SUCCESS
140
+ 1 WFM2_SUCCESS SUCCESS
141
+ 2 WFM2_FILE_EXIST FILE EXIST
142
+ 3 WFM2_AUTH_FAIL Authentication Failure
143
+ 4 WFM2_PERMISSION_DENY Permission Denied
144
+ 5 WFM2_FILE_NO_EXIST FILE/FOLDER NOT EXIST
145
+ 5 WFM2_SRC_FILE_NO_EXIST FILE/FOLDER NOT EXIST
146
+ 6 WFM2_EXTRACTING FILE EXTRACTING
147
+ 7 WFM2_OPEN_FILE_FAIL FILE IO ERROR
148
+ 8 WFM2_DISABLE Web File Manager is not enabled.
149
+ 9 WFM2_QUOTA_ERROR You have reached the disk quota limit.
150
+ 10 WFM2_SRC_PERMISSION_DENY You do not have permission to perform this action.
151
+ 11 WFM2_DES_PERMISSION_DENY You do not have permission to perform this action.
152
+ 12 WFM2_ILLEGAL_NAME " + = / \ : | * ? < > ; [ ] % , ` '
153
+ 13 WFM2_EXCEED_ISO_MAX The maximum number of allowed ISO shares is 256. Please unmount an ISO share
154
+ 14 WFM2_EXCEED_SHARE_MAX The maximum number of shares is going to be exceeded.
155
+ 15 WFM2_NEED_CHECK
156
+ 16 WFM2_RECYCLE_BIN_NOT_ENABLE
157
+ 17 WFM2_CHECK_PASSWORD_FAIL Enter password
158
+ 18 WFM2_VIDEO_TCS_DISABLE
159
+ 19 WFM2_DB_FAIL The system is currently busy. Please try again later.
160
+ 19 WFM2_DB_QUERY_FAIL The system is currently busy. Please try again later.
161
+ 20 WFM2_PARAMETER_ERROR There were input errors. Please try again later.
162
+ 21 WFM2_DEMO_SITE Your files are now being transcoded.
163
+ 22 WFM2_TRANSCODE_ONGOING Your files are now being transcoded.
164
+ 23 WFM2_SRC_VOLUME_ERROR An error occurred in the source file. Please check and try again later.
165
+ 24 WFM2_DES_VOLUME_ERROR A write error has occurred at the target destination. Please check and try again
166
+ 25 WFM2_DES_FILE_NO_EXIST The target destination is unavailable. Please check and try again later.
167
+ 26 WFM2_FILE_NAME_TOO_LONG 255 byte limit exceeded
168
+ 27 WFM2_FOLDER_ENCRYPTION This folder has been encrypted. Please decrypt it and try again.
169
+ 28 WFM2_PREPARE Processing now
170
+ 29 WFM2_NO_SUPPORT_MEDIA This file format is not supported.
171
+ 30 WFM2_DLNA_QDMS_DISABLE Please enable the DLNA Media Server
172
+ 31 WFM2_RENDER_NOT_FOUND Cannot find any available DLNA devices.
173
+ 32 WFM2_CLOUD_SERVER_ERROR The SmartLink service is currently busy. Please try again later.
174
+ 33 WFM2_NAME_DUP That folder or file name already exists. Please use another name.
175
+ 34 WFM2_EXCEED_SEARCH_MAX 1000
176
+ 35 WFM2_MEMORY_ERROR
177
+ 36 WFM2_COMPRESSING
178
+ 37 WFM2_EXCEED_DAV_MAX
179
+ 38 WFM2_UMOUNT_FAIL
180
+ 39 WFM2_MOUNT_FAIL
181
+ 40 WFM2_WEBDAV_ACCOUNT_PASSWD_ERROR
182
+ 41 WFM2_WEBDAV_SSL_ERROR
183
+ 42 WFM2_WEBDAV_REMOUNT_ERROR
184
+ 43 WFM2_WEBDAV_HOST_ERROR
185
+ 44 WFM2_WEBDAV_TIMEOUT_ERROR
186
+ 45 WFM2_WEBDAV_CONF_ERROR
187
+ 46 WFM2_WEBDAV_BASE_ERROR
@@ -0,0 +1,13 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "qnap-file_station"
3
+ s.version = "0.0.1"
4
+ s.date = "2016-09-28"
5
+ s.summary = "Interface to the File Station API"
6
+ s.description = "Manage your files and folders in File Station"
7
+ s.authors = "cyclotron3k"
8
+ s.files = ["lib/qnap/file_station.rb", "Rakefile", "qnap-file_station.gemspec", "README.md"]
9
+ s.test_files = ["test/test_file_station.rb"]
10
+ s.homepage = "https://github.com/cyclotron3k/qnap-file_station"
11
+ s.license = "MIT"
12
+ s.required_ruby_version = ">= 1.9.0"
13
+ end
@@ -0,0 +1,10 @@
1
+ require 'minitest/autorun'
2
+ require 'qnap/file_station'
3
+
4
+ class TestFileStation < Minitest::Test
5
+ def test_argument
6
+ assert_raises ArgumentError do
7
+ Qnap::FileStation.new
8
+ end
9
+ end
10
+ end
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: qnap-file_station
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - cyclotron3k
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-09-28 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Manage your files and folders in File Station
14
+ email:
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - README.md
20
+ - Rakefile
21
+ - lib/qnap/file_station.rb
22
+ - qnap-file_station.gemspec
23
+ - test/test_file_station.rb
24
+ homepage: https://github.com/cyclotron3k/qnap-file_station
25
+ licenses:
26
+ - MIT
27
+ metadata: {}
28
+ post_install_message:
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 1.9.0
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 2.5.1
45
+ signing_key:
46
+ specification_version: 4
47
+ summary: Interface to the File Station API
48
+ test_files:
49
+ - test/test_file_station.rb