videos 0.0.1 → 0.0.2
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.
- checksums.yaml +8 -8
- data/app/css/views.index.css +1 -1
- data/app/index.html +1 -1
- data/app/js/controllers.index.js +21 -4
- data/lib/videos/update.rb +12 -5
- data/lib/videos/version.rb +1 -1
- data/lib/videos/video.rb +14 -2
- data/lib/videos/videos.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjIwOTliN2Q4YTdhYzNlOWQwMzY3YzZhZTUxM2Y2ZWU0ZmQyNTRhYQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NzdmMjQxODJlMzZkYzg2YjM3YTdiMmM2NTBmNjJjYTM2MzQ1NTM4MA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YzIyNDhjOWNkYjY5NjE2MzdmYjBjYTQ5ODdkMDVhODNiZGE5NTI4NTliODcy
|
10
|
+
ZGFmNGVkMGUwNjE2MTMxNGQ2MmQ1NTU4ODJmZDIzM2ZhNWUwNDAxZWI4NjQx
|
11
|
+
ODQyZTJhNTNjNGFjZmIyNGZlMDYzYTIyMWI2NjJlOTYzZWI5MzE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YzA4MDE0ZWJkMmRlMjY0NzYwMzAyNzVjMmRmMGYwMDhjYzQ5ZjI5MDY1MzUy
|
14
|
+
YmM0Y2Q2NTc0ZDEzOGM0YzZkZTFmZDA4ZDJjOTdkN2YyN2NkMjhkMjYyMDYy
|
15
|
+
MDZhMTI4NWM2ZjFhZDI1MWQ3YTVhZjgzNDZiMzlhOTIxN2M4MjY=
|
data/app/css/views.index.css
CHANGED
data/app/index.html
CHANGED
@@ -27,7 +27,7 @@
|
|
27
27
|
<input type="text" id="search" class="form-control">
|
28
28
|
<span class="btn-group sort">
|
29
29
|
<button class="btn btn-default" data-sort="publishedOn" type="button">Published On</button>
|
30
|
-
<button class="btn btn-default" data-sort="
|
30
|
+
<button class="btn btn-default" data-sort="length" type="button">Length</button>
|
31
31
|
<button class="btn btn-default" data-sort="title" type="button">Title</button>
|
32
32
|
</span>
|
33
33
|
<span class="btn-group sort-direction">
|
data/app/js/controllers.index.js
CHANGED
@@ -7,9 +7,9 @@ controllers.index = function(search, sort, sortDirection) {
|
|
7
7
|
if(type == "publishedOn") return function(video) {
|
8
8
|
return video.publishedOn;
|
9
9
|
};
|
10
|
-
|
11
|
-
return video.
|
12
|
-
}
|
10
|
+
if(type == "length") return function(video) {
|
11
|
+
return video.length;
|
12
|
+
};
|
13
13
|
if(type == "title") return function(video) {
|
14
14
|
return video.title.toLowerCase();
|
15
15
|
};
|
@@ -84,6 +84,22 @@ controllers.index = function(search, sort, sortDirection) {
|
|
84
84
|
return a.href;
|
85
85
|
}
|
86
86
|
|
87
|
+
function formatLength(length) {
|
88
|
+
var out = [];
|
89
|
+
if(length >= 3600) {
|
90
|
+
out.push(Math.floor(length / 3600) + "h");
|
91
|
+
length = length % 3600;
|
92
|
+
}
|
93
|
+
if(length >= 60) {
|
94
|
+
out.push(Math.floor(length / 60) + "m");
|
95
|
+
length = length % 60;
|
96
|
+
}
|
97
|
+
if(length >= 1) {
|
98
|
+
out.push(Math.floor(length) + "s");
|
99
|
+
}
|
100
|
+
return out.join(" ");
|
101
|
+
}
|
102
|
+
|
87
103
|
function addVideos(videos) {
|
88
104
|
$("#items").empty();
|
89
105
|
|
@@ -97,7 +113,8 @@ controllers.index = function(search, sort, sortDirection) {
|
|
97
113
|
link.append(img);
|
98
114
|
item.append(link);
|
99
115
|
|
100
|
-
item.append('<div class="info-wrapper"><div class="info"><div class="title">' + video.title + '</div
|
116
|
+
item.append('<div class="info-wrapper"><div class="info"><div class="title">' + video.title + '</div>' +
|
117
|
+
'<img src="img/icons/film.png" title="Video Length"> ' + formatLength(video.length) + '</div>');
|
101
118
|
|
102
119
|
$("#items").append(item);
|
103
120
|
});
|
data/lib/videos/update.rb
CHANGED
@@ -7,14 +7,14 @@ class Videos::Update
|
|
7
7
|
|
8
8
|
@files = videos_package.root_path.descendant_files.reject { |p| p.basename.to_s[0..0] == '.' }
|
9
9
|
@videos = []
|
10
|
-
|
10
|
+
load_data
|
11
11
|
process
|
12
12
|
save_data
|
13
13
|
puts "\nDone!"
|
14
14
|
end
|
15
15
|
|
16
16
|
def load_data
|
17
|
-
self.videos = (Videos::Videos.load_json(
|
17
|
+
self.videos = (Videos::Videos.load_json(videos_package.videos_path + "data.json") || []).map { |b| Videos::Video.from_hash(videos_package, b) }
|
18
18
|
end
|
19
19
|
|
20
20
|
def save_data
|
@@ -35,7 +35,13 @@ class Videos::Update
|
|
35
35
|
$stdout.write "\rProcessing #{i + 1} of #{@files.length} (#{(((i + 1) / @files.length.to_f) * 100.0).round}%)"
|
36
36
|
$stdout.flush
|
37
37
|
|
38
|
-
|
38
|
+
#video = videos.find { |v| v.path.to_s == f.to_s }
|
39
|
+
|
40
|
+
#if video
|
41
|
+
# updated video
|
42
|
+
#else
|
43
|
+
created f
|
44
|
+
#end
|
39
45
|
end
|
40
46
|
#handle deleted first
|
41
47
|
#@directories.each do |d|
|
@@ -56,11 +62,12 @@ class Videos::Update
|
|
56
62
|
def created(f)
|
57
63
|
video = Videos::Video.new(videos_package, f)
|
58
64
|
video.generate_thumbnail
|
65
|
+
video.get_metadata
|
59
66
|
videos << video
|
60
67
|
end
|
61
68
|
|
62
69
|
def updated(video)
|
63
|
-
|
64
|
-
|
70
|
+
video.generate_thumbnail
|
71
|
+
video.get_metadata
|
65
72
|
end
|
66
73
|
end
|
data/lib/videos/version.rb
CHANGED
data/lib/videos/video.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
class Videos::Video
|
2
2
|
attr_reader :videos_package
|
3
3
|
attr_reader :path
|
4
|
+
attr_reader :metadata
|
5
|
+
attr_accessor :length
|
4
6
|
|
5
7
|
def initialize(videos_package, path)
|
6
8
|
@videos_package = videos_package
|
7
9
|
@path = path
|
10
|
+
@metadata = {}
|
8
11
|
end
|
9
12
|
|
10
13
|
def path_hash
|
@@ -66,9 +69,17 @@ class Videos::Video
|
|
66
69
|
FileUtils.rm_rf(temp_directory) if temp_directory
|
67
70
|
end
|
68
71
|
|
72
|
+
def get_metadata
|
73
|
+
return unless length.nil?
|
74
|
+
|
75
|
+
output = `mpv --really-quiet -identify --frames=0 --ao=null #{path.to_s.shellescape}`.encode("ASCII-8BIT", undef: :replace, invalid: :replace, replace: "?")
|
76
|
+
@metadata = Hash[output.split("\n").map { |l| l.gsub(/^\[identify\] /, "").split("=", 2) }]
|
77
|
+
@length = metadata["ID_LENGTH"].to_f
|
78
|
+
end
|
79
|
+
|
69
80
|
def self.from_hash(videos_package, data)
|
70
|
-
video = Videos::Video.new(videos_package)
|
71
|
-
video.
|
81
|
+
video = Videos::Video.new(videos_package, videos_package.url_to_pathname(Addressable::URI.parse(data["url"])))
|
82
|
+
video.length = data["length"]
|
72
83
|
video
|
73
84
|
end
|
74
85
|
|
@@ -78,6 +89,7 @@ class Videos::Video
|
|
78
89
|
"title" => title,
|
79
90
|
"publishedOn" => path.mtime.to_i,
|
80
91
|
"thumbnailUrl" => thumbnail_url,
|
92
|
+
"length" => length,
|
81
93
|
"key" => path_hash
|
82
94
|
}
|
83
95
|
end
|
data/lib/videos/videos.rb
CHANGED
@@ -9,7 +9,7 @@ class Videos::Videos
|
|
9
9
|
def url_to_pathname(url)
|
10
10
|
path = Addressable::URI.unencode_component(url.normalized_path)
|
11
11
|
path.gsub!(/^\//, "") #Make relative, if we allow mounting at a different root URL this will need to remove the root instead of just '/'
|
12
|
-
|
12
|
+
root_path + path
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.gem_path
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: videos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brenton "B-Train" Fletcher
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|