mediaman 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +77 -10
- data/lib/mediaman/command.rb +9 -10
- data/lib/mediaman/document.rb +21 -7
- data/lib/mediaman/metadata.rb +3 -1
- data/lib/mediaman/version.rb +1 -1
- data/mediaman.gemspec +2 -2
- metadata +4 -4
data/README.md
CHANGED
@@ -1,24 +1,91 @@
|
|
1
1
|
# Mediaman
|
2
2
|
|
3
|
-
|
3
|
+
**Mediaman manages your media, man.**
|
4
4
|
|
5
|
-
|
5
|
+
Have video files you need to organize? DVD backups or something?
|
6
6
|
|
7
|
-
|
7
|
+
## Usage
|
8
8
|
|
9
|
-
|
9
|
+
Mediaman comes with a command line interface called, cleverly enough, `mediaman`. There's a few little commands for you.
|
10
10
|
|
11
|
-
|
11
|
+
#### Add to Library
|
12
12
|
|
13
|
-
$ bundle
|
14
13
|
|
15
|
-
|
14
|
+
$ mediaman add ~/path/to/movie.mp4
|
16
15
|
|
17
|
-
|
16
|
+
This will take the video file at the passed in path and try to organize it into a library directory structure. Mediaman will try to figure out what the video file represents, and if it can, download metadata about the film or television show.
|
18
17
|
|
19
|
-
|
18
|
+
It does this based on a few simple rules:
|
19
|
+
|
20
|
+
- Movies
|
21
|
+
|
22
|
+
If the filename contains text followed by a year, it's assumed to be a movie.
|
23
|
+
|
24
|
+
For example: `Star Wars (1977)` or `star.wars.1977.stereo`.
|
25
|
+
|
26
|
+
- TV Shows
|
27
|
+
|
28
|
+
If the filename contains season and episode number info, it's assumed to be a TV show.
|
29
|
+
|
30
|
+
For example: `Star Trek The Next Generation S02E03`.
|
31
|
+
|
32
|
+
- Other Media
|
33
|
+
|
34
|
+
Anything else is considered "Other Media".
|
35
|
+
|
36
|
+
Then it will throw it into a pretty folder for you. Like this:
|
37
|
+
|
38
|
+
../Movies/Star Wars (1977).mov
|
39
|
+
|
40
|
+
../TV Shows/Star Trek - The Next Generation/Season 2/2x03 - Elementary, Dear Data.mov
|
41
|
+
|
42
|
+
The library root directory is your current directory, or pass in something else with the `-l` flag.
|
43
|
+
|
44
|
+
If it can, it will add the media's metadata (including artwork) to an `mp4` or `mkv` file using Subler.
|
45
|
+
|
46
|
+
The artwork image and metadata (in YAML format) will also be saved for your reference in an `Extras` folder in the same directory as the movie file.
|
47
|
+
|
48
|
+
#### Get Metadata Only
|
49
|
+
|
50
|
+
To save a sidecar YAML file with as much metadata as Mediaman can muster, just use:
|
51
|
+
|
52
|
+
$ mediaman metadata ~/path/to/movie.mp4
|
53
|
+
|
54
|
+
#### Help
|
55
|
+
|
56
|
+
For more information, try:
|
57
|
+
|
58
|
+
$ mediaman help
|
59
|
+
|
60
|
+
## Configuration
|
61
|
+
|
62
|
+
To download metadata, we currently use the [Trakt](http://trakt.tv) API, for which you can get a free key [through their website](http://trakt.tv/api-docs/authentication).
|
63
|
+
|
64
|
+
Mediaman looks for this information in the environment variable `TRAKT_API_KEY`.
|
65
|
+
|
66
|
+
On systems like OS X, the simplest way to have this stick around is to set this in your `~/.bash_profile` like so:
|
67
|
+
|
68
|
+
export TRAKT_API_KEY=86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
|
69
|
+
|
70
|
+
Want another service? Pull request please!
|
71
|
+
|
72
|
+
## Requirements
|
73
|
+
|
74
|
+
- OS X
|
75
|
+
|
76
|
+
Tested only with OS X 10.8 Mountain Lion (so far).
|
77
|
+
|
78
|
+
- Ruby 1.9.x
|
79
|
+
|
80
|
+
This is not the default Ruby shipped with Mountain Lion. You'll have to figure that one out yourself.
|
81
|
+
|
82
|
+
## Installation
|
83
|
+
|
84
|
+
Install as a Ruby gem:
|
85
|
+
|
86
|
+
$ gem install mediaman
|
20
87
|
|
21
|
-
|
88
|
+
Or throw it in your Gemfile and use it directly from Ruby. Your move.
|
22
89
|
|
23
90
|
## Contributing
|
24
91
|
|
data/lib/mediaman/command.rb
CHANGED
@@ -6,21 +6,20 @@ module Mediaman
|
|
6
6
|
|
7
7
|
desc "add <file>", "sorts the file according to its metadata"
|
8
8
|
method_option :library, type: :string, aliases: "-l", desc: "Media library base folder to sort into.", default: "."
|
9
|
-
method_option :batch, type: :boolean, aliases: "-b", desc: "Adds each file or folder in the passed-in folder to the library.", default: false
|
9
|
+
# method_option :batch, type: :boolean, aliases: "-b", desc: "Adds each file or folder in the passed-in folder to the library.", default: false
|
10
|
+
method_option :itunes, type: :boolean, desc: "Attempts to add the final file to iTunes.", default: false
|
10
11
|
def add(path)
|
12
|
+
puts "Adding #{File.basename File.expand_path(path)}..."
|
11
13
|
library_document = LibraryDocument.from_path path
|
12
14
|
library_document.library_path = File.expand_path options[:library]
|
13
|
-
|
14
|
-
# puts library_document.library_sidecar_path
|
15
|
-
puts "Video:"
|
16
|
-
puts library_document.video_files
|
17
|
-
puts "Junk:"
|
18
|
-
puts library_document.junk_files
|
19
|
-
puts "Files to move:"
|
20
|
-
puts library_document.files_to_move.to_yaml
|
21
|
-
puts "moving"
|
15
|
+
puts "Found #{library_document.video_files.size} video files and #{library_document.junk_files.size} junk files."
|
22
16
|
library_document.move_to_library!
|
23
17
|
library_document.save_and_apply_metadata!
|
18
|
+
puts "New location: #{library_document.path}."
|
19
|
+
if options[:itunes]
|
20
|
+
library_document.add_to_itunes!
|
21
|
+
puts "Added to iTunes!"
|
22
|
+
end
|
24
23
|
end
|
25
24
|
|
26
25
|
desc "metadata <file>", "returns all the metadata discoverable about this file or directory"
|
data/lib/mediaman/document.rb
CHANGED
@@ -33,14 +33,22 @@ module Mediaman
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def add_metadata_to_file!
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
36
|
+
if supports_embedding_video_metadata?
|
37
|
+
h = metadata.to_subler_hash
|
38
|
+
h[:artwork] = artwork_path if File.exists?(artwork_path)
|
39
|
+
MiniSubler::Command.vendored.set_metadata primary_video_file, h
|
40
|
+
end
|
41
41
|
rescue
|
42
42
|
puts "Exception while adding metadata to file."
|
43
43
|
end
|
44
|
+
|
45
|
+
def supports_embedding_video_metadata?
|
46
|
+
ext =~ /mp4/i || ext =~ /m4v/i || ext =~ /mkv/i || ext =~ /mov/i
|
47
|
+
end
|
48
|
+
|
49
|
+
def ext
|
50
|
+
File.extname self.path
|
51
|
+
end
|
44
52
|
|
45
53
|
def download_image!
|
46
54
|
if !File.exists?(artwork_path) && metadata.canonical_image_url.present?
|
@@ -56,6 +64,11 @@ module Mediaman
|
|
56
64
|
def artwork_path
|
57
65
|
extra_path "Artwork#{metadata.canonical_image_url.present? ? File.extname(metadata.canonical_image_url) : ".jpg"}"
|
58
66
|
end
|
67
|
+
|
68
|
+
def add_to_itunes!
|
69
|
+
cmd = "osascript -e \"tell application \\\"iTunes\\\" to add POSIX file \\\"#{self.path}\\\"\""
|
70
|
+
`#{cmd}`
|
71
|
+
end
|
59
72
|
|
60
73
|
def metadata
|
61
74
|
@metadata ||= begin
|
@@ -71,9 +84,8 @@ module Mediaman
|
|
71
84
|
def local_metadata
|
72
85
|
@local_metadata ||= begin
|
73
86
|
metadata = {}
|
74
|
-
metadata.merge!(filename_metadata || {})
|
75
|
-
metadata.merge!(video_metadata || {})
|
76
87
|
metadata.merge!(sidecar_metadata || {})
|
88
|
+
metadata.merge!(filename_metadata || {})
|
77
89
|
metadata.reject!{|k, v| v.blank?}
|
78
90
|
Metadata.new(metadata)
|
79
91
|
end
|
@@ -91,6 +103,8 @@ module Mediaman
|
|
91
103
|
tv = Trakt::TVEpisode.new show_title: local_metadata['name'], season_number: local_metadata['season_number'], episode_number: local_metadata['episode_number']
|
92
104
|
Metadata.new({'episode_details' => tv.to_hash, 'show_details' => tv.show.to_hash})
|
93
105
|
end
|
106
|
+
rescue
|
107
|
+
{}
|
94
108
|
end
|
95
109
|
end
|
96
110
|
|
data/lib/mediaman/metadata.rb
CHANGED
data/lib/mediaman/version.rb
CHANGED
data/mediaman.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.version = Mediaman::VERSION
|
9
9
|
gem.authors = ["Wil Gieseler"]
|
10
10
|
gem.email = ["supapuerco@gmail.com"]
|
11
|
-
gem.description = "
|
12
|
-
gem.summary = "
|
11
|
+
gem.description = "Mediaman manages your media, man."
|
12
|
+
gem.summary = "Mediaman manages your media, man."
|
13
13
|
gem.homepage = "http://github.com/supapuerco/mediaman"
|
14
14
|
|
15
15
|
gem.files = `git ls-files`.split($/)
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: mediaman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Wil Gieseler
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-08-
|
13
|
+
date: 2012-08-27 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -89,7 +89,7 @@ dependencies:
|
|
89
89
|
version: "0"
|
90
90
|
type: :development
|
91
91
|
version_requirements: *id007
|
92
|
-
description:
|
92
|
+
description: Mediaman manages your media, man.
|
93
93
|
email:
|
94
94
|
- supapuerco@gmail.com
|
95
95
|
executables:
|
@@ -144,7 +144,7 @@ rubyforge_project:
|
|
144
144
|
rubygems_version: 1.8.15
|
145
145
|
signing_key:
|
146
146
|
specification_version: 3
|
147
|
-
summary:
|
147
|
+
summary: Mediaman manages your media, man.
|
148
148
|
test_files:
|
149
149
|
- spec/mediaman/media_filename_spec.rb
|
150
150
|
- spec/spec_helper.rb
|