rfuse_flac_to_mov_fs 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/rfuse_flac_to_mov_fs +19 -0
- data/lib/rfuse_flac_to_mov_fs.rb +127 -0
- data/lib/rfuse_flac_to_mov_fs_opts.rb +72 -0
- metadata +84 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'rfuse_flac_to_mov_fs'
|
5
|
+
require 'rfuse_flac_to_mov_fs_opts'
|
6
|
+
require 'fileutils'
|
7
|
+
|
8
|
+
|
9
|
+
options = RFuseFlacToMovFSOpts.parse(ARGV)
|
10
|
+
|
11
|
+
filesystem = RFuseFlacToMovFS.new(options)
|
12
|
+
FuseFS.set_root( filesystem )
|
13
|
+
|
14
|
+
FileUtils.mkdir_p( options.mountpoint )
|
15
|
+
|
16
|
+
# Mount under a directory given on the command line.
|
17
|
+
FuseFS.mount_under options.mountpoint
|
18
|
+
FuseFS.run
|
19
|
+
|
@@ -0,0 +1,127 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require 'fusefs'
|
3
|
+
require 'rfuse_flac_to_mov_fs_opts'
|
4
|
+
#require 'pp'
|
5
|
+
|
6
|
+
class RFuseFlacToMovFS
|
7
|
+
# contents( path )
|
8
|
+
# file?( path )
|
9
|
+
# directory?( path )
|
10
|
+
# read_file( path )
|
11
|
+
# size( path )
|
12
|
+
#
|
13
|
+
# save
|
14
|
+
# touch( path )
|
15
|
+
# can_write?(path)
|
16
|
+
# write_to(path,body)
|
17
|
+
#
|
18
|
+
# can_delete?(path)
|
19
|
+
# delete( path )
|
20
|
+
#
|
21
|
+
# can_mkdir?( path )
|
22
|
+
# mkdir( path )
|
23
|
+
# can_rmdir( path )
|
24
|
+
# rmdir( path )
|
25
|
+
#
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
def initialize( options )
|
30
|
+
puts "#{__FILE__} initialize( #{options.input} )"
|
31
|
+
@base_dir = options.input
|
32
|
+
end
|
33
|
+
|
34
|
+
def contents(path)
|
35
|
+
n_path = File.expand_path( @base_dir + path )
|
36
|
+
Dir.chdir(n_path)
|
37
|
+
|
38
|
+
# TODO
|
39
|
+
# Currently just return a list of files we need to search and replace /.flac$/.mov/i
|
40
|
+
|
41
|
+
files = Dir.glob('*')
|
42
|
+
#Added command to OS X Finder not to index.
|
43
|
+
#files << 'metadata_never_index'
|
44
|
+
|
45
|
+
# incase esensitive match
|
46
|
+
files.each do |x|
|
47
|
+
x.gsub!(/\.flac$/i, ".mov")
|
48
|
+
puts x
|
49
|
+
end
|
50
|
+
|
51
|
+
return files
|
52
|
+
end
|
53
|
+
|
54
|
+
def file?(path)
|
55
|
+
#If path ends with metadata_never_index it is a file
|
56
|
+
#if path =~ /metadata_never_index$/
|
57
|
+
# return true
|
58
|
+
#end
|
59
|
+
|
60
|
+
#Need method which checks for .flac or jut not directory and everything is a file
|
61
|
+
return (not File.directory?( @base_dir + path ))
|
62
|
+
end
|
63
|
+
|
64
|
+
def directory?(path)
|
65
|
+
File.directory?(@base_dir + path)
|
66
|
+
end
|
67
|
+
|
68
|
+
def read_file(path)
|
69
|
+
input = path.dup
|
70
|
+
|
71
|
+
if File.exists?( @base_dir + input)
|
72
|
+
return File.new(@base_dir + input , "r").read
|
73
|
+
end
|
74
|
+
|
75
|
+
# mmm replacment was not case sensitive so we do not actually
|
76
|
+
# know the correct case of the file extension
|
77
|
+
# NB: the most popular format of HFS+ (mac drives) is not case sensitive
|
78
|
+
# so these should resolve correctly for now
|
79
|
+
if input =~ /\.mov$/
|
80
|
+
input['.mov'] = '.flac'
|
81
|
+
end
|
82
|
+
#puts "read file #{path}"
|
83
|
+
if File.exists?( @base_dir + input)
|
84
|
+
return File.new(@base_dir + input , "r").read
|
85
|
+
end
|
86
|
+
|
87
|
+
return "ERROR, file not found\n"
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
def size(path)
|
93
|
+
puts "size( #{path}"
|
94
|
+
input = path.dup
|
95
|
+
|
96
|
+
if File.exists?( @base_dir + path )
|
97
|
+
return File.size( @base_dir + path )
|
98
|
+
end
|
99
|
+
|
100
|
+
if input =~ /\.mov$/
|
101
|
+
puts " Converting from mov to flac"
|
102
|
+
input['.mov'] = '.flac'
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
if File.exists?( @base_dir + input )
|
107
|
+
return File.size( @base_dir + input )
|
108
|
+
else
|
109
|
+
return 16
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
if $0 == __FILE__
|
116
|
+
|
117
|
+
options = RFuseFlacToMovFSOpts.parse(ARGV)
|
118
|
+
filesystem = RFuseFlacToMovFS.new( options )
|
119
|
+
FuseFS.set_root( filesystem )
|
120
|
+
|
121
|
+
FileUtils.mkdir_p( options.mountpoint )
|
122
|
+
|
123
|
+
# Mount under a directory given on the command line.
|
124
|
+
FuseFS.mount_under options.mountpoint
|
125
|
+
FuseFS.run
|
126
|
+
end
|
127
|
+
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
require 'optparse/time'
|
3
|
+
require 'ostruct'
|
4
|
+
|
5
|
+
class RFuseFlacToMovFSOpts
|
6
|
+
|
7
|
+
|
8
|
+
#
|
9
|
+
# Return a structure describing the options.
|
10
|
+
#
|
11
|
+
def self.parse(args)
|
12
|
+
@VERSION = "0.0.2"
|
13
|
+
|
14
|
+
# The options specified on the command line will be collected in *options*.
|
15
|
+
# We set default values here.
|
16
|
+
options = OpenStruct.new
|
17
|
+
|
18
|
+
options.verbose = false
|
19
|
+
options.mountpoint = ""
|
20
|
+
options.input = ""
|
21
|
+
|
22
|
+
|
23
|
+
opts = OptionParser.new do |opts|
|
24
|
+
opts.banner = "Usage: #{__FILE__} [options]"
|
25
|
+
opts.separator ""
|
26
|
+
opts.separator "Common options:"
|
27
|
+
|
28
|
+
# No argument, shows at tail. This will print an options summary.
|
29
|
+
opts.on("-h", "--help", "Show this message") do
|
30
|
+
puts opts
|
31
|
+
exit
|
32
|
+
end
|
33
|
+
|
34
|
+
# Another typical switch to print the version.
|
35
|
+
opts.on("--version", "Show version") do
|
36
|
+
#puts OptionParser::Version.join('.')
|
37
|
+
puts "Version #{@VERSION}"
|
38
|
+
exit
|
39
|
+
end
|
40
|
+
|
41
|
+
# Boolean switch.
|
42
|
+
#opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
43
|
+
# options.verbose = v
|
44
|
+
#end
|
45
|
+
|
46
|
+
opts.separator ""
|
47
|
+
opts.separator "Specific options:"
|
48
|
+
|
49
|
+
|
50
|
+
# Cast 'delay' argument to a Float.
|
51
|
+
opts.on("--mountpoint path", String, "Root of new Filesystem") do |n|
|
52
|
+
options.mountpoint = n
|
53
|
+
end
|
54
|
+
|
55
|
+
opts.on("--input N", String, "Folder FS will point to") do |n|
|
56
|
+
options.input = File.expand_path( n )
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
options.leftovers = opts.parse!(args)
|
63
|
+
|
64
|
+
if (options.mountpoint == "") and (options.input == "") and (options.leftovers.size==2)
|
65
|
+
options.mountpoint = options.leftovers[0]
|
66
|
+
options.input = File.expand_path( options.leftovers[1] )
|
67
|
+
end
|
68
|
+
return options
|
69
|
+
end # parse()
|
70
|
+
|
71
|
+
end # class OptparseExample
|
72
|
+
|
metadata
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rfuse_flac_to_mov_fs
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Morgan Prior
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-07-28 00:00:00 +01:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: fusefs
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 7
|
33
|
+
- 0
|
34
|
+
version: 0.7.0
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
description: "Virtual Filesystem Written in Ruby Fuse, which lets *.flac look like *.mov for iTunes. Use incombination with the Xiph Component http://xiph.org/quicktime/download.html "
|
38
|
+
email: rfuse_flac_to_mov_fs_gem@amaras-tech.co.uk
|
39
|
+
executables:
|
40
|
+
- rfuse_flac_to_mov_fs
|
41
|
+
extensions: []
|
42
|
+
|
43
|
+
extra_rdoc_files: []
|
44
|
+
|
45
|
+
files:
|
46
|
+
- bin/rfuse_flac_to_mov_fs
|
47
|
+
- lib/rfuse_flac_to_mov_fs.rb
|
48
|
+
- lib/rfuse_flac_to_mov_fs_opts.rb
|
49
|
+
has_rdoc: true
|
50
|
+
homepage: http://amaras-tech.co.uk/software/rfuse_flac_to_mov_fs
|
51
|
+
licenses: []
|
52
|
+
|
53
|
+
post_install_message: To use 'rfuse_flac_to_mov_fs' as a standalone application your gems folder must be on your path
|
54
|
+
rdoc_options: []
|
55
|
+
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
hash: 3
|
64
|
+
segments:
|
65
|
+
- 0
|
66
|
+
version: "0"
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
hash: 3
|
73
|
+
segments:
|
74
|
+
- 0
|
75
|
+
version: "0"
|
76
|
+
requirements: []
|
77
|
+
|
78
|
+
rubyforge_project:
|
79
|
+
rubygems_version: 1.3.7
|
80
|
+
signing_key:
|
81
|
+
specification_version: 3
|
82
|
+
summary: Ruby Fuse, Filesystem to make *.flac files look like *.mov for itunes Mac OS X.
|
83
|
+
test_files: []
|
84
|
+
|