about summary refs log tree commit diff stats
path: root/code/types.rb
diff options
context:
space:
mode:
Diffstat (limited to 'code/types.rb')
-rw-r--r--code/types.rb106
1 files changed, 102 insertions, 4 deletions
diff --git a/code/types.rb b/code/types.rb
index 0fc0bf7c..96d67d06 100644
--- a/code/types.rb
+++ b/code/types.rb
@@ -1,5 +1,96 @@
 module Fm
-	def self.getfilehandler_frompath(file)
+	MIMETYPES = Marshal.load(File.read(
+		File.join(FM_DIR, 'data', 'mime.dat')))
+
+	def self.get_default_flags(file)
+		case file.mimetype
+		when /^(?:image|video)\//; 'd'
+		when 'application/pdf'; 'd'
+		else '' end
+	end
+
+	def self.filehandler(files, hash)
+		str = files.map{|x| x.sh}.join(' ')
+		type = files.first.mimetype
+		name = files.first.basename
+#		mode = hash.mode
+
+		use = lambda do |sym|
+			hash.exec = App.send(sym, hash, name, str, files)
+		end
+
+		case type
+		when /^(video|audio)\//
+			use.call :mplayer
+		when "application/pdf"
+			use.call :evince
+		when /^(image)\//
+			use.call :image
+		else
+			case name
+			when /\.(swc|smc)/
+				use.call :zsnes
+			end
+		end
+
+		return hash
+	end
+
+	module App
+		def image(hash, name, str, file)
+			case hash.mode
+			when 4; "feh --bg-scale #{str}"
+			when 5; "feh --bg-tile #{str}"
+			when 6; "feh --bg-center #{str}"
+			when 2; "gimp #{str}"
+			when 1; "feh -F #{str}"
+			else "feh #{str}"
+			end
+		end
+		def evince(hash, name, str, file)
+			"evince #{str}"
+		end
+		def mplayer(*args)
+			hash = args[0] = args[0].dup
+			str = args[2]
+
+			if hash.detach
+				flags = '-msglevel all=-1'
+			else
+				flags = ''
+			end
+
+			case hash.mode
+			when nil
+				if name =~ /720p/
+					hash.mode = 1
+				else
+					hash.mode = 0
+				end
+				mplayer(*args)
+			when 0
+				return "mplayer #{flags} -fs -sid 0 #{str}"
+			when 1
+				return "mplayer #{flags} -vm sdl -sid 0 #{str}"
+			end
+		end
+		def zsnes(hash, name, str, files)
+			case hash.mode
+			when 1
+				return "zsnes -ad sdl -o #{str}"
+			else
+				return "zsnes -ad sdl -u -o #{str}"
+			end
+		end
+
+		module_function *%w*
+			mplayer zsnes evince image
+		*
+	end
+
+	def self.getfilehandler_frompath(*files)
+		file = files.first
+		n = files.size
 		case file
 		when /\.(part|avi|mpe?[g\d]|flv|fid|mkv|mov|wm[av]|vob|php|divx?|og[gmv])$/i
 			if file =~ /720p/
@@ -8,6 +99,12 @@ module Fm
 				return "mplayer -fs #{file.sh}", false
 			end
 
+		when /\.java$/
+			return "javac #{file.sh}", true
+
+		when /\.class$/
+			return log "java #{file.sh.before_last('.')}"
+
 		when /\.part$/
 			test = getfilehandler_frompath($`)
 			if test
@@ -23,10 +120,10 @@ module Fm
 		when "Makefile"
 			return "make"
 
-		when /\.(jpe?g|png)$/i
+		when /\.(jpe?g|png|gif)$/i
 			return "feh #{file.sh}", false
 
-		when /\.html?$/i
+		when /\.(html?|swf)$/i
 			return "firefox #{file.sh}"
 
 		when /\.pdf$/i
@@ -39,7 +136,8 @@ module Fm
 			return "aplay -q #{file.sh}"
 
 		when /\.m3u$/i
-			return "cmus-remote -c && cmus-remote -P #{file} && cmus-remote -C 'set play_library=false' && sleep 0.3 && cmus-remote -n", false
+			return "/home/hut/bin/loadplaylist #{file.sh}"
+#			return "cmus-remote -c && cmus-remote -P #{file} && cmus-remote -C 'set play_library=false' && sleep 0.3 && cmus-remote -n", false
 
 		end