@@ -4,164 +4,167 @@ var p = {
4
4
name : 'Unknown' ,
5
5
version : 'Unknown' ,
6
6
os : 'Unknown'
7
- } ;
7
+ }
8
8
if ( typeof platform !== 'undefined' ) {
9
- p . name = platform . name ;
10
- p . version = platform . version ;
11
- p . os = platform . os . toString ( ) ;
9
+ p . name = platform . name
10
+ p . version = platform . version
11
+ p . os = platform . os . toString ( )
12
12
}
13
13
14
14
function getPlexHeaders ( clientID ) {
15
15
return {
16
16
'Accept' : 'application/json' ,
17
17
'X-Plex-Product' : 'Themerr' ,
18
18
'X-Plex-Version' : 'Plex OAuth' ,
19
- 'X-Plex-Client-Identifier' : clientID ? clientID : getLocalStorage ( 'Tautulli_ClientID ' , uuidv4 ( ) , false ) ,
19
+ 'X-Plex-Client-Identifier' : clientID ? clientID : getLocalStorage ( 'Themerr_ClientID ' , uuidv4 ( ) , false ) ,
20
20
'X-Plex-Platform' : p . name ,
21
21
'X-Plex-Platform-Version' : p . version ,
22
22
'X-Plex-Model' : 'Plex OAuth' ,
23
23
'X-Plex-Device' : p . os ,
24
24
'X-Plex-Device-Name' : p . name + ' (Themerr)' ,
25
25
'X-Plex-Device-Screen-Resolution' : window . screen . width + 'x' + window . screen . height ,
26
26
'X-Plex-Language' : 'en'
27
- } ;
27
+ }
28
28
}
29
29
30
30
function encodeData ( data ) {
31
- return Object . keys ( data ) . map ( function ( key ) {
32
- return [ key , data [ key ] ] . map ( encodeURIComponent ) . join ( "=" ) ;
33
- } ) . join ( "&" ) ;
31
+ return Object . keys ( data ) . map ( function ( key ) {
32
+ return [ key , data [ key ] ] . map ( encodeURIComponent ) . join ( "=" )
33
+ } ) . join ( "&" )
34
34
}
35
35
36
- var plex_oauth_window = null ;
36
+ var plex_oauth_window = null
37
37
const plex_oauth_loader = '<style>' +
38
- '.login-loader-container {' +
39
- 'font-family: "Open Sans", Arial, sans-serif;' +
40
- 'position: absolute;' +
41
- 'top: 0;' +
42
- 'right: 0;' +
43
- 'bottom: 0;' +
44
- 'left: 0;' +
45
- '}' +
46
- '.login-loader-message {' +
47
- 'color: #282A2D;' +
48
- 'text-align: center;' +
49
- 'position: absolute;' +
50
- 'left: 50%;' +
51
- 'top: 25%;' +
52
- 'transform: translate(-50%, -50%);' +
53
- '}' +
54
- '.login-loader {' +
55
- 'border: 5px solid #ccc;' +
56
- '-webkit-animation: spin 1s linear infinite;' +
57
- 'animation: spin 1s linear infinite;' +
58
- 'border-top: 5px solid #282A2D;' +
59
- 'border-radius: 50%;' +
60
- 'width: 50px;' +
61
- 'height: 50px;' +
62
- 'position: relative;' +
63
- 'left: calc(50% - 25px);' +
64
- '}' +
65
- '@keyframes spin {' +
66
- '0% { transform: rotate(0deg); }' +
67
- '100% { transform: rotate(360deg); }' +
68
- '}' +
38
+ '.login-loader-container {' +
39
+ 'font-family: "Open Sans", Arial, sans-serif;' +
40
+ 'position: absolute;' +
41
+ 'top: 0;' +
42
+ 'right: 0;' +
43
+ 'bottom: 0;' +
44
+ 'left: 0;' +
45
+ '}' +
46
+ '.login-loader-message {' +
47
+ 'color: #282A2D;' +
48
+ 'text-align: center;' +
49
+ 'position: absolute;' +
50
+ 'left: 50%;' +
51
+ 'top: 25%;' +
52
+ 'transform: translate(-50%, -50%);' +
53
+ '}' +
54
+ '.login-loader {' +
55
+ 'border: 5px solid #ccc;' +
56
+ '-webkit-animation: spin 1s linear infinite;' +
57
+ 'animation: spin 1s linear infinite;' +
58
+ 'border-top: 5px solid #282A2D;' +
59
+ 'border-radius: 50%;' +
60
+ 'width: 50px;' +
61
+ 'height: 50px;' +
62
+ 'position: relative;' +
63
+ 'left: calc(50% - 25px);' +
64
+ '}' +
65
+ '@keyframes spin {' +
66
+ '0% { transform: rotate(0deg); }' +
67
+ '100% { transform: rotate(360deg); }' +
68
+ '}' +
69
69
'</style>' +
70
70
'<div class="login-loader-container">' +
71
- '<div class="login-loader-message">' +
72
- '<div class="login-loader"></div>' +
73
- '<br>' +
74
- 'Redirecting to the Plex login page...' +
75
- '</div>' +
76
- '</div>' ;
71
+ '<div class="login-loader-message">' +
72
+ '<div class="login-loader"></div>' +
73
+ '<br>' +
74
+ 'Redirecting to the Plex login page...' +
75
+ '</div>' +
76
+ '</div>'
77
77
78
78
function closePlexOAuthWindow ( ) {
79
79
if ( plex_oauth_window ) {
80
- plex_oauth_window . close ( ) ;
80
+ plex_oauth_window . close ( )
81
81
}
82
82
}
83
83
84
- function setLocalStorage ( key , value , path ) {
85
- var key_path = key ;
84
+ function getKeyPath ( key , path ) {
85
+ var key_path = key
86
86
if ( path !== false ) {
87
- key_path = key_path + '_' + window . location . pathname ;
87
+ key_path = ` ${ key_path } _ ${ window . location . pathname } `
88
88
}
89
- localStorage . setItem ( key_path , value ) ;
89
+ return key_path
90
+ }
91
+
92
+ function setLocalStorage ( key , value , path ) {
93
+ var key_path = getKeyPath ( key , path )
94
+ localStorage . setItem ( key_path , value )
90
95
}
96
+
91
97
function getLocalStorage ( key , default_value , path ) {
92
- var key_path = key ;
93
- if ( path !== false ) {
94
- key_path = key_path + '_' + window . location . pathname ;
95
- }
96
- var value = localStorage . getItem ( key_path ) ;
98
+ var key_path = getKeyPath ( key , path )
99
+ var value = localStorage . getItem ( key_path )
97
100
if ( value !== null ) {
98
101
return value
99
102
} else if ( default_value !== undefined ) {
100
- setLocalStorage ( key , default_value , path ) ;
103
+ setLocalStorage ( key , default_value , path )
101
104
return default_value
102
105
}
103
106
}
104
107
105
108
function uuidv4 ( ) {
106
- return ( [ 1e7 ] + - 1e3 + - 4e3 + - 8e3 + - 1e11 ) . replace ( / [ 0 1 8 ] / g, function ( c ) {
107
- var cryptoObj = window . crypto || window . msCrypto ; // for IE 11
109
+ return ( [ 1e7 ] + - 1e3 + - 4e3 + - 8e3 + - 1e11 ) . replace ( / [ 0 1 8 ] / g, function ( c ) {
110
+ var cryptoObj = window . crypto || window . msCrypto // for IE 11
108
111
return ( c ^ cryptoObj . getRandomValues ( new Uint8Array ( 1 ) ) [ 0 ] & 15 >> c / 4 ) . toString ( 16 )
109
- } ) ;
112
+ } )
110
113
}
111
114
112
115
getPlexOAuthPin = function ( clientID ) {
113
- var x_plex_headers = getPlexHeaders ( clientID ) ;
114
- var deferred = $ . Deferred ( ) ;
116
+ var x_plex_headers = getPlexHeaders ( clientID )
117
+ var deferred = $ . Deferred ( )
115
118
116
119
$ . ajax ( {
117
120
url : 'https://plex.tv/api/v2/pins?strong=true' ,
118
121
type : 'POST' ,
119
122
headers : x_plex_headers ,
120
- success : function ( data ) {
121
- deferred . resolve ( { pin : data . id , code : data . code } ) ;
123
+ success : function ( data ) {
124
+ deferred . resolve ( { pin : data . id , code : data . code } )
122
125
} ,
123
- error : function ( ) {
124
- closePlexOAuthWindow ( ) ;
125
- deferred . reject ( ) ;
126
+ error : function ( ) {
127
+ closePlexOAuthWindow ( )
128
+ deferred . reject ( )
126
129
}
127
- } ) ;
128
- return deferred ;
129
- } ;
130
+ } )
131
+ return deferred
132
+ }
130
133
131
134
function PopupCenter ( url , title , w , h ) {
132
- // Fixes dual-screen position Most browsers Firefox
133
- var dualScreenLeft = window . screenLeft != undefined ? window . screenLeft : window . screenX ;
134
- var dualScreenTop = window . screenTop != undefined ? window . screenTop : window . screenY ;
135
+ // Fixes dual-screen position Most browsers Firefox
136
+ var dualScreenLeft = window . screenLeft != undefined ? window . screenLeft : window . screenX
137
+ var dualScreenTop = window . screenTop != undefined ? window . screenTop : window . screenY
135
138
136
- var width = window . innerWidth ? window . innerWidth : document . documentElement . clientWidth ? document . documentElement . clientWidth : screen . width ;
137
- var height = window . innerHeight ? window . innerHeight : document . documentElement . clientHeight ? document . documentElement . clientHeight : screen . height ;
139
+ var width = window . innerWidth ? window . innerWidth : document . documentElement . clientWidth ? document . documentElement . clientWidth : screen . width
140
+ var height = window . innerHeight ? window . innerHeight : document . documentElement . clientHeight ? document . documentElement . clientHeight : screen . height
138
141
139
- var left = ( ( width / 2 ) - ( w / 2 ) ) + dualScreenLeft ;
140
- var top = ( ( height / 2 ) - ( h / 2 ) ) + dualScreenTop ;
141
- var newWindow = window . open ( url , title , ' scrollbars=yes, width=' + w + ' , height=' + h + ' , top=' + top + ' , left=' + left ) ;
142
+ var left = ( ( width / 2 ) - ( w / 2 ) ) + dualScreenLeft
143
+ var top = ( ( height / 2 ) - ( h / 2 ) ) + dualScreenTop
144
+ var newWindow = window . open ( url , title , ` scrollbars=yes, width=${ w } , height=${ h } , top=${ top } , left=${ left } ` )
142
145
143
146
// Puts focus on the newWindow
144
147
if ( window . focus ) {
145
- newWindow . focus ( ) ;
148
+ newWindow . focus ( )
146
149
}
147
150
148
- return newWindow ;
151
+ return newWindow
149
152
}
150
153
151
- var polling = null ;
154
+ var polling = null
152
155
153
156
function PlexOAuth ( success , error , pre , clientID ) {
154
157
if ( typeof pre === "function" ) {
155
158
pre ( )
156
159
}
157
- closePlexOAuthWindow ( ) ;
158
- plex_oauth_window = PopupCenter ( '' , 'Plex-OAuth' , 600 , 700 ) ;
159
- $ ( plex_oauth_window . document . body ) . html ( plex_oauth_loader ) ;
160
+ closePlexOAuthWindow ( )
161
+ plex_oauth_window = PopupCenter ( '' , 'Plex-OAuth' , 600 , 700 )
162
+ $ ( plex_oauth_window . document . body ) . html ( plex_oauth_loader )
160
163
161
164
getPlexOAuthPin ( clientID ) . then ( function ( data ) {
162
- var x_plex_headers = getPlexHeaders ( clientID ) ;
163
- const pin = data . pin ;
164
- const code = data . code ;
165
+ var x_plex_headers = getPlexHeaders ( clientID )
166
+ const pin = data . pin
167
+ const code = data . code
165
168
166
169
var oauth_params = {
167
170
'clientID' : x_plex_headers [ 'X-Plex-Client-Identifier' ] ,
@@ -177,42 +180,42 @@ function PlexOAuth(success, error, pre, clientID) {
177
180
'code' : code
178
181
}
179
182
180
- plex_oauth_window . location = ' https://app.plex.tv/auth/#!?' + encodeData ( oauth_params ) ;
183
+ plex_oauth_window . location = ` https://app.plex.tv/auth/#!?${ encodeData ( oauth_params ) } `
181
184
polling = pin ;
182
185
183
186
( function poll ( ) {
184
187
$ . ajax ( {
185
- url : ' https://plex.tv/api/v2/pins/' + pin ,
188
+ url : ` https://plex.tv/api/v2/pins/${ pin } ` ,
186
189
type : 'GET' ,
187
190
headers : x_plex_headers ,
188
191
success : function ( data ) {
189
- if ( data . authToken ) {
190
- closePlexOAuthWindow ( ) ;
192
+ if ( data . authToken ) {
193
+ closePlexOAuthWindow ( )
191
194
if ( typeof success === "function" ) {
192
195
success ( data . authToken )
193
196
}
194
197
}
195
198
} ,
196
199
error : function ( jqXHR , textStatus , errorThrown ) {
197
200
if ( textStatus !== "timeout" ) {
198
- closePlexOAuthWindow ( ) ;
201
+ closePlexOAuthWindow ( )
199
202
if ( typeof error === "function" ) {
200
203
error ( )
201
204
}
202
205
}
203
206
} ,
204
207
complete : function ( ) {
205
- if ( ! plex_oauth_window . closed && polling === pin ) {
206
- setTimeout ( function ( ) { poll ( ) } , 1000 ) ;
208
+ if ( ! plex_oauth_window . closed && polling === pin ) {
209
+ setTimeout ( function ( ) { poll ( ) } , 1000 )
207
210
}
208
211
} ,
209
212
timeout : 10000
210
- } ) ;
211
- } ) ( ) ;
213
+ } )
214
+ } ) ( )
212
215
} , function ( ) {
213
- closePlexOAuthWindow ( ) ;
216
+ closePlexOAuthWindow ( )
214
217
if ( typeof error === "function" ) {
215
218
error ( )
216
219
}
217
- } ) ;
218
- }
220
+ } )
221
+ }
0 commit comments