All pastes #835133 Raw Edit

Something

public text v1 · immutable
#835133 ·published 2007-12-28 18:34 UTC
rendered paste body
indexing
	description: " Gets called by spice_editor and then decides which slides need to updated"
	project: "SpiceRack"

class THUMBNAIL_UPDATE

insert
	GLOBAL_ACCESS
	UPDATER_ACCESS

creation make

feature -- Creation

	make (a_segment: SEGMENT; a_slide: SLIDE; segment_true: BOOLEAN) is
		-- Recieve signal from model. Decided what slides have been changed. Retrieve information from the THUMBNAIL_INFO class.
		require
			global_service.service /= Void
		do
			crash
			print ("THUMBNAIL UPDATE make")
			if segment_true then update_segment_thumbnails (a_segment)
			else update_slide_thumbnail (a_slide) end
		end

feature -- Access

	v_thumbnailer: SLIDE_THUMBNAILER2

feature -- Thumbnail Information

	video_offset: REAL is 0.5
	milliseconds_or_percentage: BOOLEAN is False
	thumb_width: INTEGER is 300
	thumb_height: INTEGER is 225

	full_thumbnail_path_name (a_segment: SEGMENT; a_slide: SLIDE): PATH_NAME is
		require
			a_segment /= Void
			a_slide /= Void
		do
			Result := short_thumbnail_path_name / (segment_id (a_segment) + "_" + slide_id (a_slide) + "." + thumbnail_extension)
		ensure
			Result /= Void
		end
	
	short_thumbnail_path_name: PATH_NAME is
		once
			Result := new_path
			Result.make_current
			Result := Result / "interface" / "images" / "thumbnails"
		ensure
			Result /= Void
			Result.is_directory
		end

	segment_id (a_segment: SEGMENT): STRING is
		require
			a_segment /= Void
		do
			Result := once "SEG_" + a_segment.to_pointer.to_string
		ensure
			Result.is_equal (once "SEG_" + a_segment.to_pointer.to_string)
		end

	slide_id (a_slide: SLIDE): STRING is
		require
			a_slide /= Void
		do
			Result := once "SLIDE_" + a_slide.to_pointer.to_string
		ensure
			Result.is_equal (once "SLIDE_" + a_slide.to_pointer.to_string)
		end
		
	thumbnail_extension: STRING is "jpg"

feature -- Thumbnailing

	update_segment_thumbnails (a_segment: SEGMENT) is
				-- deletes and creates thumbnail/s for one segment
		require
			a_segment /= Void
		local
			a_slide: SLIDE
			f_tools: FILE_TOOLS
			thumb_dir: DIRECTORY
			i: INTEGER
			f: STRING
		do
			crash
				-- Deletion
			create thumb_dir.scan_with (short_thumbnail_path_name.to_string)
			from i := thumb_dir.lower until i > thumb_dir.count loop
				print ("update_segment_thumbnails delete")
				f := (short_thumbnail_path_name / thumb_dir.item (i)).to_string
				if f.has_prefix (segment_id (a_segment)) then f_tools.delete (f) end
			end
				-- Creation
			create v_thumbnailer.for_segment (a_segment)
			from i := 1 until i > a_segment.count loop
				print ("update_segment_thumbnails create")
				a_slide := a_segment.item (i)
				v_thumbnailer.set_video_offset(video_offset, milliseconds_or_percentage)
				v_thumbnailer.create_thumbnail (thumb_width, thumb_height)
				v_thumbnailer.save_thumbnail ((full_thumbnail_path_name (a_segment, a_slide)).to_string)
				i := i + 1
			end
		end
	
	update_slide_thumbnail (a_slide: SLIDE) is
			-- deletes and creates thumbnail for one slide
		require
			a_slide /= Void
		local
			a_segment: SEGMENT
			indices: ARRAY [INTEGER]
			f_tools: FILE_TOOLS
			f: STRING
		do
			crash
				-- Deletion
			a_segment := global_service.service.item (indices @ 1)
			f := full_thumbnail_path_name (a_segment, a_slide).to_string
			f_tools.delete (f)
				-- Creation
			indices := global_service.service.indices_of_row (a_slide)
				check indices.count = 2 end
			print ("update_slide_thumbnails create")
			create v_thumbnailer.for_segment (a_segment)
			v_thumbnailer.set_video_offset(video_offset, milliseconds_or_percentage)
			v_thumbnailer.create_thumbnail (thumb_width, thumb_height)
			v_thumbnailer.save_thumbnail (full_thumbnail_path_name (a_segment, a_slide).to_string)
		end
	
--	udpate_all_thumbnails (a_service: SERVICE) is
--		require
--			a_service /= Void
--		local
--			a_segment: SEGMENT
--			f_tools: FILE_TOOLS
--			thumb_dir: DIRECTORY
--			i, j: INTEGER
--			f: STRING
--		do
--			create thumb_dir.scan_with (short_thumbnail_path_name.to_string)
--			from i := thumb_dir.lower until i > thumb_dir.count loop
--				f := (short_thumbnail_path_name / thumb_dir.item (i)).to_string
--				if f.has_suffix (thumbnail_extension) then f_tools.delete (f)
--				end
--				i := i + 1
--			end
--		end
		
	create_all_thumbnails (a_service: SERVICE) is
		local
			a_segment: SEGMENT
			a_slide: SLIDE
			i, j: INTEGER
			f: STRING
		do
			create v_thumbnailer.for_segment (a_segment)
			from i := 1 until i > a_service.count loop
				a_segment := a_service.item (i)
				print ("create all thumbnail segment")
				from j := 1 until j > a_segment.count loop
					print ("create all thumbnail slide")
					a_slide := a_segment.item (j)
					v_thumbnailer.set_video_offset(video_offset, milliseconds_or_percentage)
					v_thumbnailer.create_thumbnail (thumb_width, thumb_height)
					v_thumbnailer.save_thumbnail (full_thumbnail_path_name (a_segment, a_slide).to_string)
					j := j + 1
				end
				i := i + 1
			end
		end

	delete_all_thumbnails is
		local
			f_tools: FILE_TOOLS
			thumb_dir: DIRECTORY
			i, j: INTEGER
			f: STRING
		do
			create thumb_dir.scan_with (short_thumbnail_path_name.to_string)
			from i := thumb_dir.lower until i > thumb_dir.count loop
				print ("delete all thumbnail segment")
				f := (short_thumbnail_path_name / thumb_dir.item (i)).to_string
				if f.has_suffix (thumbnail_extension) then f_tools.delete (f) end
				i := i + 1
			end
		end

end -- class THUMBNAIL_UPDATE