plex-autodelete 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f22e2d591972c6c22992b99d6aa7ef2527949ad5
4
+ data.tar.gz: e8dcb854d04850e133c3f78e3c7dbd59221d0105
5
+ SHA512:
6
+ metadata.gz: 6a7c019c5c60e4c3be5608fc5992869a8b92f459a9e3422beacb636208e53e45b0af98360f59155d9f613d37b6379971bcd33aa92044c0e8a50f9e9bd89d7fa0
7
+ data.tar.gz: ef99b4aa5e6cd9560815f26c1706e5fbd27f62dea8d8eada74d0b6732c1a7072952fa198cc19632cadf06d8a916b1bf3073075e8babf8243640ab0ea055f1d73
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "yaml"
4
+ require "thor"
5
+ require "nori"
6
+ require 'net/https'
7
+
8
+ Dir["./lib/*.rb"].each {|file| require file }
9
+
10
+ class PlexAutoDelete < Thor
11
+
12
+ @@myplex = {
13
+ host: 'plex.tv',
14
+ port: 443
15
+ }
16
+
17
+ desc "cleanup", "Remove all watched episodes from Plex"
18
+ option :host, default: '127.0.0.1', desc: 'The hostname/ip address of the Plex Server'
19
+ option :port, default: 32400, desc: 'The port of the Plex Server'
20
+ option :token, required: true, desc: 'The token of the plex server, generate with "plex-autodelete token"'
21
+ option :skip, type: :array, desc: 'An array of shows to skip, these will not be deleted. Use quotes if show contains spaces/special characters.'
22
+ option :delete, type: :boolean, default: true, desc: 'Skip actual deletion of files, useful for testing settings'
23
+ option :section, type: :numeric, default: 1, desc: 'Which section are your TV shows in?'
24
+ def cleanup
25
+ output_config
26
+ Autodelete.configure config
27
+ Autodelete.cleanup
28
+ end
29
+
30
+ desc 'token', 'Generate the auth token needed to use "plex-autodelete cleanup"'
31
+ option :username, required: true, desc: 'Your my.plex.tv username (this will not be stored)'
32
+ option :password, required: true, desc: 'Your my.plex.tv password (this will not be stored)'
33
+ def token
34
+
35
+ http = Net::HTTP.new(@@myplex[:host], @@myplex[:port])
36
+ http.use_ssl = true
37
+
38
+ http.start do |http|
39
+
40
+ request = Net::HTTP::Post.new('/users/sign_in.xml', initheader = {'X-Plex-Client-Identifier' =>'Plex Autodelete'})
41
+ request.basic_auth options[:username], options[:password]
42
+ response, data = http.request(request)
43
+
44
+ parser = Nori.new
45
+ hash = parser.parse(response.response.body)
46
+
47
+ if hash.has_key?('errors')
48
+ hash['errors'].each do |error|
49
+ puts error.to_s
50
+ end
51
+ else
52
+ authentication_token = hash['user']['authentication_token'].to_s
53
+ puts "Authentication Token: #{authentication_token}"
54
+ end
55
+ end
56
+ end
57
+
58
+ private
59
+ def output_config
60
+ output = []
61
+ output << "Host: #{config[:host]}"
62
+ output << "Port: #{config[:port]}"
63
+ output << "Token: #{config[:token]}"
64
+ output << "Section: #{config[:section]}"
65
+ output << "Skip Shows: #{config[:skip] || 'N/A'}"
66
+ output << "Skip Delete: #{delete_text}"
67
+ output << "--------------------"
68
+ output << ""
69
+ output = output.join("\n")
70
+ puts output
71
+ end
72
+
73
+ def config
74
+ {
75
+ host: options[:host],
76
+ port: options[:port],
77
+ token: options[:token],
78
+ section: options[:section],
79
+ skip: options[:skip],
80
+ delete: options[:delete],
81
+ }
82
+ end
83
+
84
+ def delete_text
85
+ options[:delete] ? 'true' : 'false'
86
+ end
87
+
88
+ end
89
+
90
+ PlexAutoDelete.start(ARGV)
91
+
@@ -0,0 +1,63 @@
1
+ require 'plex-ruby'
2
+
3
+ class Autodelete
4
+
5
+ @config = {
6
+ host: '127.0.0.1',
7
+ port: 32400,
8
+ token: nil,
9
+ skip: [],
10
+ delete: true,
11
+ section: 1,
12
+ }
13
+
14
+ @config_keys = @config.keys
15
+
16
+ def self.configure(opts = {})
17
+ opts.each {|key, value| @config[key.to_sym] = value if @config_keys.include? key.to_sym}
18
+ end
19
+
20
+ def self.required_params!
21
+ [:host, :port, :token, :section].each do |param|
22
+ if @config[param].nil?
23
+ raise Exception
24
+ end
25
+ end
26
+ end
27
+
28
+ def self.cleanup
29
+
30
+ self.required_params!
31
+
32
+ Plex.configure do |config|
33
+ config.auth_token = @config[:token]
34
+ end
35
+
36
+ server = Plex::Server.new(@config[:host], @config[:port])
37
+
38
+ server.library.section(@config[:section]).all.each do |show|
39
+ next if @config[:skip].include? show.title
40
+
41
+ show.seasons.each do |season|
42
+ season.episodes.each do |episode|
43
+ if episode.respond_to?(:view_count)
44
+ puts " - #{show.title} - #{season.title} - #{episode.title}"
45
+ episode.medias.each do |media|
46
+ media.parts.each do |part|
47
+ if File.exist?(part.file) and @config[:delete]
48
+ File.delete(part.file)
49
+ puts " - File Removed: #{part.file}"
50
+ else
51
+ puts " - File Not Removed: #{part.file}"
52
+ end
53
+ end
54
+ end
55
+ puts nil
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: plex-autodelete
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Scott Robertson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: plex-ruby
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.5.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.5'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.5.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: thor
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 0.19.1
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: 0.19.1
47
+ - !ruby/object:Gem::Dependency
48
+ name: nori
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.4'
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 2.4.0
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '2.4'
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 2.4.0
67
+ - !ruby/object:Gem::Dependency
68
+ name: mini_portile
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: 0.6.1
74
+ type: :runtime
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: 0.6.1
81
+ description: Automatically removed watched episodes in Plex
82
+ email: scottymeuk@gmail.com
83
+ executables:
84
+ - plex-autodelete
85
+ extensions: []
86
+ extra_rdoc_files: []
87
+ files:
88
+ - bin/plex-autodelete
89
+ - lib/plex-autodelete.rb
90
+ homepage: http://rubygems.org/gems/plex-autodelete
91
+ licenses:
92
+ - MIT
93
+ metadata: {}
94
+ post_install_message:
95
+ rdoc_options: []
96
+ require_paths:
97
+ - lib
98
+ required_ruby_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ requirements: []
109
+ rubyforge_project:
110
+ rubygems_version: 2.4.3
111
+ signing_key:
112
+ specification_version: 4
113
+ summary: Automatically removed watched episodes in Plex
114
+ test_files: []