DocumentServer/OnlineEditorsExample/OnlineEditorsExampleRuby/app/models/document_helper.rb
2015-04-29 19:10:50 +03:00

150 lines
3.2 KiB
Ruby

class DocumentHelper
@@runtime_cache = {}
@@remote_ip = nil
@@base_url = nil
class << self
def init (ip, url)
@@remote_ip = ip
@@base_url = url
end
def file_size_max
if Rails.configuration.fileSizeMax == nil
5 * 1024 * 1024
else
Rails.configuration.fileSizeMax
end
end
def file_exts
[].concat(viewed_exts).concat(edited_exts).concat(convert_exts)
end
def viewed_exts
if Rails.configuration.viewedDocs.empty?
[]
else
Rails.configuration.viewedDocs.split("|")
end
end
def edited_exts
if Rails.configuration.editedDocs.empty?
[]
else
Rails.configuration.editedDocs.split("|")
end
end
def convert_exts
if Rails.configuration.convertDocs.empty?
[]
else
Rails.configuration.convertDocs.split("|")
end
end
def cur_user_host_address(user_address)
(user_address == nil ? @@remote_ip : user_address).gsub(/[^0-9-.a-zA-Z_=]/, '_');
end
def storage_path(file_name, user_address)
directory = Rails.root.join('public', Rails.configuration.storagePath, cur_user_host_address(user_address))
unless File.directory?(directory)
FileUtils.mkdir_p(directory)
end
directory.join(file_name).to_s
end
def get_correct_name(file_name)
ext = File.extname(file_name)
base_name = File.basename(file_name, ext)
name = base_name + ext
index = 1
while File.exist?(storage_path(name, nil))
name = base_name + ' (' + index.to_s + ')' + ext
index = index + 1
end
name
end
def create_demo(file_ext)
demo_name = 'sample.' + file_ext
file_name = get_correct_name demo_name
src = Rails.root.join('public', 'samples', demo_name)
dest = storage_path file_name, nil
FileUtils.cp src, dest
file_name
end
def get_file_uri(file_name)
uri = @@base_url + '/' + Rails.configuration.storagePath + '/' + cur_user_host_address(nil) + '/' + URI::encode(file_name)
if Rails.configuration.haveExternalIp
return uri
end
get_external_uri(uri)
end
def get_callback(file_name)
@@base_url + '/track?type=track&userAddress=' + cur_user_host_address(nil) + '&fileName=' + URI::encode(file_name)
end
def get_external_uri(local_uri)
begin
uri = @@runtime_cache[local_uri]
if uri == nil
file_name = URI::decode(File.basename(local_uri))
file_storage_path = DocumentHelper.storage_path(file_name, nil)
data = File.open(file_storage_path, 'rb') {|io| io.read}
key = ServiceConverter.generate_revision_id(local_uri)
uri = ServiceConverter.get_external_uri(data, data.length, nil, key)
@@runtime_cache[local_uri] = uri
end
return uri
rescue => ex
raise ex.message
end
local_uri
end
def get_internal_extension(file_type)
case file_type
when 'text'
ext = '.docx'
when 'spreadsheet'
ext = '.xlsx'
when 'presentation'
ext = '.pptx'
else
ext = '.docx'
end
ext
end
end
end