68 lines
2.2 KiB
Ruby
68 lines
2.2 KiB
Ruby
#
|
|
# Copyright (C) 2016 - present Instructure, Inc.
|
|
#
|
|
# This file is part of Canvas.
|
|
#
|
|
# Canvas is free software: you can redistribute it and/or modify it under
|
|
# the terms of the GNU Affero General Public License as published by the Free
|
|
# Software Foundation, version 3 of the License.
|
|
#
|
|
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
# details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License along
|
|
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
class WebZipExport < EpubExport
|
|
include CC::Exporter::WebZip::Exportable
|
|
|
|
# WebZipExport and the case of the mysteryous synchronous kwarg:
|
|
#
|
|
# We've had to add the synchronous flag here to satisify the API established
|
|
# by the prepended module from inst-jobs, the actual method definition that
|
|
# gets called by super here is defined by inst-job in a module called
|
|
# `EpubExport::DelayedMethods`, which is prepended to the parent class here
|
|
# but ends up being later in the lookup chain for this class.
|
|
def export(synchronous: false)
|
|
module_progressor = MustViewModuleProgressor.new(user, course)
|
|
Rails.cache.write(cache_key, module_progressor.current_progress, expires_in: 4.hours)
|
|
module_progressor.make_progress
|
|
super
|
|
end
|
|
|
|
def generate
|
|
job_progress.update_attribute(:completion, PERCENTAGE_COMPLETE[:generating])
|
|
update_attribute(:workflow_state, 'generating')
|
|
convert_to_offline_web_zip
|
|
end
|
|
handle_asynchronously :generate, priority: Delayed::LOW_PRIORITY, max_attempts: 1
|
|
|
|
# WebZip Exportable overrides
|
|
def content_cartridge
|
|
self.content_export.attachment
|
|
end
|
|
|
|
def convert_to_offline_web_zip
|
|
begin
|
|
set_locale
|
|
file_path = super(cache_key)
|
|
I18n.locale = :en
|
|
|
|
create_attachment_from_path!(file_path)
|
|
rescue => e
|
|
mark_as_failed
|
|
raise e
|
|
end
|
|
|
|
mark_as_generated
|
|
cleanup_file_path!(file_path)
|
|
end
|
|
handle_asynchronously :convert_to_offline_web_zip, priority: Delayed::LOW_PRIORITY, max_attempts: 1
|
|
|
|
def cache_key
|
|
"web_zip_export_user_progress_#{global_id}"
|
|
end
|
|
end
|