Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
R
rockodi
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
CeRiAl
rockodi
Commits
247a20ca
Commit
247a20ca
authored
Mar 09, 2016
by
CeRiAl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Beautify JS-code and add .jshintrc
parent
450a1b0d
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
530 additions
and
216 deletions
+530
-216
.jshintrc
src/js/.jshintrc
+22
-0
pebble-js-app.js
src/js/pebble-js-app.js
+508
-216
No files found.
src/js/.jshintrc
0 → 100644
View file @
247a20ca
{
"browser": true,
"indent": 4,
"eqeqeq": true,
"undef": true,
"curly": true,
"eqnull": true,
"noarg": true,
"bitwise": true,
"forin": true,
"newcap": true,
"unused": "vars",
"quotmark": "double",
"globals": {
"Pebble": false,
"toString": false,
"console": false
}
}
src/js/pebble-js-app.js
View file @
247a20ca
...
@@ -21,13 +21,135 @@
...
@@ -21,13 +21,135 @@
// MessageQueue implementation is copyright (c) 2014 by Matthew Tole, https://github.com/smallstoneapps/js-message-queue
// MessageQueue implementation is copyright (c) 2014 by Matthew Tole, https://github.com/smallstoneapps/js-message-queue
// Distributed under the MIT license, see above. Many thanks Matthew!
// Distributed under the MIT license, see above. Many thanks Matthew!
//
//
var
MessageQueue
=
function
(){
var
RETRY_MAX
=
5
;
var
queue
=
[];
var
sending
=
false
;
var
timer
=
null
;
return
{
reset
:
reset
,
sendAppMessage
:
sendAppMessage
,
size
:
size
};
function
reset
(){
queue
=
[];
sending
=
false
}
function
sendAppMessage
(
message
,
ack
,
nack
){
if
(
!
isValidMessage
(
message
)){
return
false
}
queue
.
push
({
message
:
message
,
ack
:
ack
||
null
,
nack
:
nack
||
null
,
attempts
:
0
});
setTimeout
(
function
(){
sendNextMessage
()},
1
);
return
true
}
function
size
(){
return
queue
.
length
}
function
isValidMessage
(
message
){
if
(
message
!==
Object
(
message
)){
return
false
}
var
keys
=
Object
.
keys
(
message
);
if
(
!
keys
.
length
){
return
false
}
for
(
var
k
=
0
;
k
<
keys
.
length
;
k
+=
1
){
var
validKey
=
/^
[
0-9a-zA-Z-_
]
*$/
.
test
(
keys
[
k
]);
if
(
!
validKey
){
return
false
}
var
value
=
message
[
keys
[
k
]];
if
(
!
validValue
(
value
)){
return
false
}}
return
true
;
function
validValue
(
value
){
switch
(
typeof
value
){
case
"string"
:
return
true
;
case
"number"
:
return
true
;
case
"object"
:
if
(
toString
.
call
(
value
)
==
"[object Array]"
){
return
true
}}
return
false
}}
function
sendNextMessage
(){
if
(
sending
){
return
}
var
message
=
queue
.
shift
();
if
(
!
message
){
return
}
message
.
attempts
+=
1
;
sending
=
true
;
Pebble
.
sendAppMessage
(
message
.
message
,
ack
,
nack
);
timer
=
setTimeout
(
function
(){
timeout
()},
1
e3
);
function
ack
(){
clearTimeout
(
timer
);
setTimeout
(
function
(){
sending
=
false
;
sendNextMessage
()},
200
);
if
(
message
.
ack
){
message
.
ack
.
apply
(
null
,
arguments
)}}
function
nack
(){
clearTimeout
(
timer
);
if
(
message
.
attempts
<
RETRY_MAX
){
queue
.
unshift
(
message
);
setTimeout
(
function
(){
sending
=
false
;
sendNextMessage
()},
200
*
message
.
attempts
)}
else
{
if
(
message
.
nack
){
message
.
nack
.
apply
(
null
,
arguments
)}}}
function
timeout
(){
setTimeout
(
function
(){
sending
=
false
;
sendNextMessage
()},
1
e3
);
if
(
message
.
ack
){
message
.
ack
.
apply
(
null
,
arguments
)}}}}();
var
MessageQueue
=
function
()
{
var
RETRY_MAX
=
5
;
var
queue
=
[];
var
sending
=
false
;
var
timer
=
null
;
return
{
reset
:
reset
,
sendAppMessage
:
sendAppMessage
,
size
:
size
};
function
reset
()
{
queue
=
[];
sending
=
false
;
}
function
sendAppMessage
(
message
,
ack
,
nack
)
{
if
(
!
isValidMessage
(
message
))
{
return
false
;
}
queue
.
push
({
message
:
message
,
ack
:
ack
||
null
,
nack
:
nack
||
null
,
attempts
:
0
});
setTimeout
(
function
()
{
sendNextMessage
();
},
1
);
return
true
;
}
function
size
()
{
return
queue
.
length
;
}
function
isValidMessage
(
message
)
{
if
(
message
!==
Object
(
message
))
{
return
false
;
}
var
keys
=
Object
.
keys
(
message
);
if
(
!
keys
.
length
)
{
return
false
;
}
for
(
var
k
=
0
;
k
<
keys
.
length
;
k
+=
1
)
{
var
validKey
=
/^
[
0-9a-zA-Z-_
]
*$/
.
test
(
keys
[
k
]);
if
(
!
validKey
)
{
return
false
;
}
var
value
=
message
[
keys
[
k
]];
if
(
!
validValue
(
value
))
{
return
false
;
}
}
return
true
;
function
validValue
(
value
)
{
switch
(
typeof
value
)
{
case
"string"
:
return
true
;
case
"number"
:
return
true
;
case
"object"
:
if
(
toString
.
call
(
value
)
===
"[object Array]"
)
{
return
true
;
}
}
return
false
;
}
}
function
sendNextMessage
()
{
if
(
sending
)
{
return
;
}
var
message
=
queue
.
shift
();
if
(
!
message
)
{
return
;
}
message
.
attempts
+=
1
;
sending
=
true
;
Pebble
.
sendAppMessage
(
message
.
message
,
ack
,
nack
);
timer
=
setTimeout
(
function
()
{
timeout
();
},
1
e3
);
function
ack
()
{
clearTimeout
(
timer
);
setTimeout
(
function
()
{
sending
=
false
;
sendNextMessage
();
},
200
);
if
(
message
.
ack
)
{
message
.
ack
.
apply
(
null
,
arguments
);
}
}
function
nack
()
{
clearTimeout
(
timer
);
if
(
message
.
attempts
<
RETRY_MAX
)
{
queue
.
unshift
(
message
);
setTimeout
(
function
()
{
sending
=
false
;
sendNextMessage
();
},
200
*
message
.
attempts
);
}
else
{
if
(
message
.
nack
)
{
message
.
nack
.
apply
(
null
,
arguments
);
}
}
}
function
timeout
()
{
setTimeout
(
function
()
{
sending
=
false
;
sendNextMessage
();
},
1
e3
);
if
(
message
.
ack
)
{
message
.
ack
.
apply
(
null
,
arguments
);
}
}
}
}();
// global variables
// global variables
var
storage_keys
=
{
var
storage_keys
=
{
"IP_ADDRESS"
:
0
,
"IP_ADDRESS"
:
0
,
"USERNAME"
:
1
,
"USERNAME"
:
1
,
"PASSWORD"
:
2
"PASSWORD"
:
2
};
};
var
ISDEBUG
=
false
;
var
ISDEBUG
=
false
;
var
g_ip_address
=
""
;
var
g_ip_address
=
""
;
...
@@ -40,311 +162,481 @@ var g_muted;
...
@@ -40,311 +162,481 @@ var g_muted;
var
g_play_state
;
var
g_play_state
;
var
JsonRpcRequest
=
function
(
method
,
params
)
{
var
JsonRpcRequest
=
function
(
method
,
params
)
{
this
.
jsonrpc
=
"2.0"
;
this
.
jsonrpc
=
"2.0"
;
this
.
id
=
1
;
this
.
id
=
1
;
this
.
method
=
method
;
this
.
method
=
method
;
this
.
params
=
params
;
this
.
params
=
params
;
};
};
function
sendJsonRequest
(
requests
,
callback
)
{
function
sendJsonRequest
(
requests
,
callback
)
{
var
username
=
null
;
var
username
=
null
;
var
password
=
null
;
var
password
=
null
;
var
response
=
null
;
var
response
=
null
;
var
req
=
new
XMLHttpRequest
();
var
req
=
new
XMLHttpRequest
();
req
.
onreadystatechange
=
function
(
e
)
{
req
.
onreadystatechange
=
function
(
e
)
{
if
(
req
.
readyState
==
4
)
{
if
(
req
.
readyState
===
4
)
{
if
(
req
.
status
==
200
)
{
if
(
req
.
status
===
200
)
{
if
(
ISDEBUG
)
console
.
log
(
"Response text: "
+
req
.
responseText
);
if
(
ISDEBUG
)
{
response
=
JSON
.
parse
(
req
.
responseText
);
console
.
log
(
"Response text: "
+
req
.
responseText
);
if
(
response
.
result
==
null
)
{
}
handleJsonRpcError
(
response
);
response
=
JSON
.
parse
(
req
.
responseText
);
}
else
if
(
callback
!=
null
)
{
if
(
response
.
result
===
null
)
{
callback
(
response
.
result
);
handleJsonRpcError
(
response
);
}
else
if
(
callback
!==
null
)
{
callback
(
response
.
result
);
}
}
else
{
if
(
req
.
status
!==
0
)
{
console
.
log
(
"Error connecting ["
+
req
.
status
+
"]: "
+
req
.
statusText
);
Pebble
.
showSimpleNotificationOnPebble
(
"Could not connect ["
+
req
.
status
+
"]"
,
"Please check your Rockodi settings in the Pebble app."
);
}
}
}
}
}
else
{
};
if
(
req
.
status
!==
0
)
{
if
(
g_username
!==
""
)
{
console
.
log
(
"Error connecting ["
+
req
.
status
+
"]: "
+
req
.
statusText
);
username
=
g_username
;
Pebble
.
showSimpleNotificationOnPebble
(
"Could not connect ["
+
req
.
status
+
"]"
,
"Please check your Rockodi settings in the Pebble app."
);
if
(
g_password
!==
""
)
{
password
=
g_password
;
}
}
}
}
}
};
var
url_string
=
"http://"
+
g_ip_address
+
"/jsonrpc?request="
;
if
(
g_username
!==
""
)
{
req
.
open
(
"GET"
,
url_string
+
encodeURI
(
JSON
.
stringify
(
requests
)),
true
,
username
,
password
);
username
=
g_username
;
req
.
timeout
=
4000
;
if
(
g_password
!==
""
)
{
req
.
send
(
null
);
password
=
g_password
;
if
(
ISDEBUG
)
{
console
.
log
(
"Sent request: "
+
url_string
+
encodeURI
(
JSON
.
stringify
(
requests
)));
}
}
}
var
url_string
=
"http://"
+
g_ip_address
+
"/jsonrpc?request="
;
req
.
open
(
'GET'
,
url_string
+
encodeURI
(
JSON
.
stringify
(
requests
)),
true
,
username
,
password
);
req
.
timeout
=
4000
;
req
.
send
(
null
);
if
(
ISDEBUG
)
console
.
log
(
"Sent request: "
+
url_string
+
encodeURI
(
JSON
.
stringify
(
requests
)));
}
}
function
handleJsonRpcError
(
response
)
{
function
handleJsonRpcError
(
response
)
{
var
err_msg
=
"Unknown error"
;
var
err_msg
=
"Unknown error"
;
if
(
response
.
constructor
===
Array
)
{
if
(
response
.
constructor
===
Array
)
{
for
(
var
i
=
0
;
i
<
response
.
length
;
i
++
)
{
for
(
var
i
=
0
;
i
<
response
.
length
;
i
++
)
{
if
(
response
[
i
].
result
==
null
)
{
if
(
response
[
i
].
result
===
null
)
{
if
(
response
[
i
].
error
!=
null
)
{
err_msg
=
response
[
i
].
error
.
message
;}
if
(
response
[
i
].
error
!==
null
)
{
console
.
log
(
"Kodi responded with an error: "
+
err_msg
);
err_msg
=
response
[
i
].
error
.
message
;
}
}
}
console
.
log
(
"Kodi responded with an error: "
+
err_msg
);
}
else
{
}
if
(
response
.
result
==
null
)
{
}
if
(
response
.
error
!=
null
)
{
err_msg
=
response
.
error
.
message
;}
}
else
{
console
.
log
(
"Kodi responded with an error: "
+
err_msg
);
if
(
response
.
result
===
null
)
{
if
(
response
.
error
!==
null
)
{
err_msg
=
response
.
error
.
message
;
}
console
.
log
(
"Kodi responded with an error: "
+
err_msg
);
}
}
}
}
}
}
// player methods
// player methods
function
getStatus
()
{
function
getStatus
()
{
g_player_id
=
-
1
;
g_player_id
=
-
1
;
sendJsonRequest
(
new
JsonRpcRequest
(
"Application.GetProperties"
,
{
"properties"
:[
"volume"
,
"muted"
]}),
getAppPropertiesCb
);
sendJsonRequest
(
new
JsonRpcRequest
(
"Application.GetProperties"
,
{
sendJsonRequest
(
new
JsonRpcRequest
(
"Player.GetActivePlayers"
,
{}),
getActivePlayersCb
);
"properties"
:
[
"volume"
,
"muted"
]
}),
getAppPropertiesCb
);
sendJsonRequest
(
new
JsonRpcRequest
(
"Player.GetActivePlayers"
,
{}),
getActivePlayersCb
);
}
}
function
getAppPropertiesCb
(
result
)
{
function
getAppPropertiesCb
(
result
)
{
g_volume
=
result
.
volume
;
g_volume
=
result
.
volume
;
g_muted
=
(
result
.
muted
)
?
1
:
0
;
g_muted
=
(
result
.
muted
)
?
1
:
0
;
MessageQueue
.
sendAppMessage
({
"MSG_KEY_VOLUME"
:
g_volume
,
"MSG_KEY_MUTED"
:
g_muted
});
MessageQueue
.
sendAppMessage
({
"MSG_KEY_VOLUME"
:
g_volume
,
"MSG_KEY_MUTED"
:
g_muted
});
}
}
function
getActivePlayersCb
(
result
)
{
function
getActivePlayersCb
(
result
)
{
g_player_id
=
-
1
;
g_player_id
=
-
1
;
for
(
var
i
=
0
;
i
<
result
.
length
;
i
++
)
{
for
(
var
i
=
0
;
i
<
result
.
length
;
i
++
)
{
var
player
=
result
[
i
];
var
player
=
result
[
i
];
g_player_type
=
player
.
type
;
g_player_type
=
player
.
type
;
if
(
g_player_type
==
"audio"
||
g_player_type
==
"video"
)
{
if
(
g_player_type
===
"audio"
||
g_player_type
===
"video"
)
{
g_player_id
=
player
.
playerid
;
g_player_id
=
player
.
playerid
;
break
;
break
;
}
}
if
(
g_player_id
>=
0
)
{
sendJsonRequest
(
new
JsonRpcRequest
(
"Player.GetProperties"
,
{
"playerid"
:
g_player_id
,
"properties"
:
[
"speed"
]
}),
getPlayerPropertiesCb
);
sendJsonRequest
(
new
JsonRpcRequest
(
"Player.GetItem"
,
{
"playerid"
:
g_player_id
,
"properties"
:
[
"title"
,
"album"
,
"artist"
,
"director"
,
"duration"
]
}),
getItemCb
);
}
else
{
MessageQueue
.
sendAppMessage
({
"MSG_KEY_TITLE"
:
"No player available"
,
"MSG_KEY_ARTIST"
:
""
});
}
}
}
if
(
g_player_id
>=
0
)
{
sendJsonRequest
(
new
JsonRpcRequest
(
"Player.GetProperties"
,
{
"playerid"
:
g_player_id
,
"properties"
:
[
"speed"
]}),
getPlayerPropertiesCb
);
sendJsonRequest
(
new
JsonRpcRequest
(
"Player.GetItem"
,
{
"playerid"
:
g_player_id
,
"properties"
:
[
"title"
,
"album"
,
"artist"
,
"director"
,
"duration"
]}),
getItemCb
);
}
else
{
MessageQueue
.
sendAppMessage
({
"MSG_KEY_TITLE"
:
"No player available"
,
"MSG_KEY_ARTIST"
:
""
});
}
}
}
function
getPlayerPropertiesCb
(
result
)
{
function
getPlayerPropertiesCb
(
result
)
{
g_play_state
=
(
result
.
speed
>
0
)
?
1
:
0
;
g_play_state
=
(
result
.
speed
>
0
)
?
1
:
0
;
MessageQueue
.
sendAppMessage
({
"MSG_KEY_PLAY_STATE"
:
g_play_state
});
MessageQueue
.
sendAppMessage
({
"MSG_KEY_PLAY_STATE"
:
g_play_state
});
}
}
function
getItemCb
(
result
)
{
function
getItemCb
(
result
)
{
var
title
=
(
result
.
item
.
title
===
""
)
?
result
.
item
.
label
:
result
.
item
.
title
;
var
title
=
(
result
.
item
.
title
===
""
)
?
result
.
item
.
label
:
result
.
item
.
title
;
var
artist
=
""
;
var
artist
=
""
;
if
(
result
.
item
.
type
==
"movie"
)
{
if
(
result
.
item
.
type
===
"movie"
)
{
artist
=
(
result
.
item
.
director
.
length
<
1
)
?
""
:
result
.
item
.
director
[
0
];
artist
=
(
result
.
item
.
director
.
length
<
1
)
?
""
:
result
.
item
.
director
[
0
];
}
else
{
}
else
{
artist
=
(
result
.
item
.
artist
.
length
<
1
)
?
""
:
result
.
item
.
artist
[
0
];
artist
=
(
result
.
item
.
artist
.
length
<
1
)
?
""
:
result
.
item
.
artist
[
0
];
}
}
MessageQueue
.
sendAppMessage
({
"MSG_KEY_TITLE"
:
title
,
"MSG_KEY_ARTIST"
:
artist
});
MessageQueue
.
sendAppMessage
({
"MSG_KEY_TITLE"
:
title
,
"MSG_KEY_ARTIST"
:
artist
});
}
}
function
playPause
()
{
function
playPause
()
{
if
(
g_player_id
>=
0
)
{
if
(
g_player_id
>=
0
)
{
sendJsonRequest
(
new
JsonRpcRequest
(
"Player.PlayPause"
,
{
"playerid"
:
g_player_id
}),
playPauseCb
);
sendJsonRequest
(
new
JsonRpcRequest
(
"Player.PlayPause"
,
{
}
"playerid"
:
g_player_id
}),
playPauseCb
);
}
}
}
function
playPauseCb
(
result
)
{
function
playPauseCb
(
result
)
{
g_play_state
=
result
.
speed
;
g_play_state
=
result
.
speed
;
MessageQueue
.
sendAppMessage
({
"MSG_KEY_PLAY_STATE"
:
g_play_state
});
MessageQueue
.
sendAppMessage
({
"MSG_KEY_PLAY_STATE"
:
g_play_state
});
}
}
function
raiseVolume
()
{
function
raiseVolume
()
{
g_volume
=
(
g_volume
>
95
)
?
100
:
g_volume
+
5
;
g_volume
=
(
g_volume
>
95
)
?
100
:
g_volume
+
5
;
sendJsonRequest
(
new
JsonRpcRequest
(
"Application.SetVolume"
,
{
"volume"
:
g_volume
}),
setVolumeCb
);
sendJsonRequest
(
new
JsonRpcRequest
(
"Application.SetVolume"
,
{
"volume"
:
g_volume
}),
setVolumeCb
);
}
}
function
lowerVolume
()
{
function
lowerVolume
()
{
g_volume
=
(
g_volume
<
5
)
?
0
:
g_volume
-
5
;
g_volume
=
(
g_volume
<
5
)
?
0
:
g_volume
-
5
;
sendJsonRequest
(
new
JsonRpcRequest
(
"Application.SetVolume"
,
{
"volume"
:
g_volume
}),
setVolumeCb
);
sendJsonRequest
(
new
JsonRpcRequest
(
"Application.SetVolume"
,
{
"volume"
:
g_volume
}),
setVolumeCb
);
}
}
function
setVolumeCb
(
result
)
{
g_volume
=
result
;
function
setVolumeCb
(
result
)
{
MessageQueue
.
sendAppMessage
({
"MSG_KEY_VOLUME"
:
g_volume
});
g_volume
=
result
;
MessageQueue
.
sendAppMessage
({
"MSG_KEY_VOLUME"
:
g_volume
});
}
}
function
previous
()
{
function
previous
()
{
if
(
g_player_id
>=
0
)
{
if
(
g_player_id
>=
0
)
{
sendJsonRequest
(
new
JsonRpcRequest
(
"Player.GoTo"
,
{
"playerid"
:
g_player_id
,
"to"
:
"previous"
}),
changeTransportCb
);
sendJsonRequest
(
new
JsonRpcRequest
(
"Player.GoTo"
,
{
}
"playerid"
:
g_player_id
,
"to"
:
"previous"
}),
changeTransportCb
);
}
}
}
function
next
()
{
function
next
()
{
if
(
g_player_id
>=
0
)
{
if
(
g_player_id
>=
0
)
{
sendJsonRequest
(
new
JsonRpcRequest
(
"Player.GoTo"
,
{
"playerid"
:
g_player_id
,
"to"
:
"next"
}),
changeTransportCb
);
sendJsonRequest
(
new
JsonRpcRequest
(
"Player.GoTo"
,
{
}
"playerid"
:
g_player_id
,
"to"
:
"next"
}),
changeTransportCb
);
}
}
}
function
stop
()
{
function
stop
()
{
if
(
g_player_id
>=
0
)
{
if
(
g_player_id
>=
0
)
{
sendJsonRequest
(
new
JsonRpcRequest
(
"Player.Stop"
,
{
"playerid"
:
g_player_id
}),
changeTransportCb
);
sendJsonRequest
(
new
JsonRpcRequest
(
"Player.Stop"
,
{
}
"playerid"
:
g_player_id
}),
changeTransportCb
);
}
}
}
function
changeTransportCb
(
result
)
{
function
changeTransportCb
(
result
)
{
getStatus
();
getStatus
();
}
}
// Remote methods
// Remote methods
function
sendKey
(
input_key
)
{
function
sendKey
(
input_key
)
{
switch
(
input_key
)
{
switch
(
input_key
)
{
case
"KEY_UP"
:
case
"KEY_UP"
:
sendJsonRequest
(
new
JsonRpcRequest
(
"Input.Up"
));
sendJsonRequest
(
new
JsonRpcRequest
(
"Input.Up"
));
break
;
break
;
case
"KEY_DOWN"
:
case
"KEY_DOWN"
:
sendJsonRequest
(
new
JsonRpcRequest
(
"Input.Down"
));
sendJsonRequest
(
new
JsonRpcRequest
(
"Input.Down"
));
break
;
break
;
case
"KEY_SELECT"
:
case
"KEY_SELECT"
:
sendJsonRequest
(
new
JsonRpcRequest
(
"Input.Select"
));
sendJsonRequest
(
new
JsonRpcRequest
(
"Input.Select"
));
break
;
break
;
case
"KEY_BACK"
:
case
"KEY_BACK"
:
sendJsonRequest
(
new
JsonRpcRequest
(
"Input.Back"
));
sendJsonRequest
(
new
JsonRpcRequest
(
"Input.Back"
));
break
;
break
;
case
"KEY_LEFT"
:
case
"KEY_LEFT"
:
sendJsonRequest
(
new
JsonRpcRequest
(
"Input.Left"
));
sendJsonRequest
(
new
JsonRpcRequest
(
"Input.Left"
));
break
;
break
;
case
"KEY_RIGHT"
:
case
"KEY_RIGHT"
:
sendJsonRequest
(
new
JsonRpcRequest
(
"Input.Right"
));
sendJsonRequest
(
new
JsonRpcRequest
(
"Input.Right"
));
break
;
break
;
}
}
}
}
// Goto methods
// Goto methods
function
gotoFullscreen
()
{
function
gotoFullscreen
()
{
sendJsonRequest
(
new
JsonRpcRequest
(
"GUI.setFullScreen"
,{
"fullscreen"
:
true
}));
sendJsonRequest
(
new
JsonRpcRequest
(
"GUI.setFullScreen"
,
{
"fullscreen"
:
true
}));
}
}
function
gotoInfo
()
{
function
gotoInfo
()
{
sendJsonRequest
(
new
JsonRpcRequest
(
"Input.Info"
));
sendJsonRequest
(
new
JsonRpcRequest
(
"Input.Info"
));
}
}
function
gotoHome
()
{
function
gotoHome
()
{
sendJsonRequest
(
new
JsonRpcRequest
(
"GUI.ActivateWindow"
,{
"window"
:
"home"
}));
sendJsonRequest
(
new
JsonRpcRequest
(
"GUI.ActivateWindow"
,
{
"window"
:
"home"
}));
}
}
function
gotoMusic
()
{
function
gotoMusic
()
{
sendJsonRequest
(
new
JsonRpcRequest
(
"GUI.ActivateWindow"
,{
"window"
:
"music"
}));
sendJsonRequest
(
new
JsonRpcRequest
(
"GUI.ActivateWindow"
,
{
"window"
:
"music"
}));
}
}
function
gotoVideo
()
{
function
gotoVideo
()
{
sendJsonRequest
(
new
JsonRpcRequest
(
"GUI.ActivateWindow"
,{
"window"
:
"video"
}));
sendJsonRequest
(
new
JsonRpcRequest
(
"GUI.ActivateWindow"
,
{
"window"
:
"video"
}));
}
}
function
gotoPictures
()
{
function
gotoPictures
()
{
sendJsonRequest
(
new
JsonRpcRequest
(
"GUI.ActivateWindow"
,{
"window"
:
"pictures"
}));
sendJsonRequest
(
new
JsonRpcRequest
(
"GUI.ActivateWindow"
,
{
"window"
:
"pictures"
}));
}
}
function
gotoWeather
()
{
function
gotoWeather
()
{
sendJsonRequest
(
new
JsonRpcRequest
(
"GUI.ActivateWindow"
,{
"window"
:
"weather"
}));
sendJsonRequest
(
new
JsonRpcRequest
(
"GUI.ActivateWindow"
,
{
"window"
:
"weather"
}));
}
}
// Playlist methods
// Playlist methods
function
getMusicPlaylists
()
{
function
getMusicPlaylists
()
{
sendJsonRequest
(
new
JsonRpcRequest
(
"Files.GetDirectory"
,
{
"directory"
:
"special://musicplaylists"
,
"media"
:
"files"
,
"properties"
:[
"title"
],
"limits"
:{
"start"
:
0
,
"end"
:
10
}}),
getMusicPlaylistsCb
);
sendJsonRequest
(
new
JsonRpcRequest
(
"Files.GetDirectory"
,
{
"directory"
:
"special://musicplaylists"
,
"media"
:
"files"
,
"properties"
:
[
"title"
],
"limits"
:
{
"start"
:
0
,
"end"
:
10
}
}),
getMusicPlaylistsCb
);
}
}
function
getMusicPlaylistsCb
(
result
)
{
function
getMusicPlaylistsCb
(
result
)
{
var
dict
=
{};
var
dict
=
{};
var
key
=
0
;
var
key
=
0
;
var
files
=
result
.
files
;
var
files
=
result
.
files
;
for
(
var
i
=
0
;
i
<
files
.
length
;
i
++
)
{
for
(
var
i
=
0
;
i
<
files
.
length
;
i
++
)
{
var
filename
=
files
[
i
].
file
;
var
filename
=
files
[
i
].
file
;
var
label
=
files
[
i
].
label
;
var
label
=
files
[
i
].
label
;
dict
[
key
++
]
=
filename
+
"|"
+
label
;
dict
[
key
++
]
=
filename
+
"|"
+
label
;
}
}
MessageQueue
.
sendAppMessage
(
dict
);
MessageQueue
.
sendAppMessage
(
dict
);
}
}
function
playMusicPlaylist
(
payload
)
{
function
playMusicPlaylist
(
payload
)
{
var
filename
=
payload
.
MSG_KEY_CMD_DATA
;
var
filename
=
payload
.
MSG_KEY_CMD_DATA
;
var
requests
=
[];
var
requests
=
[];
requests
.
push
(
new
JsonRpcRequest
(
"PlayList.Clear"
,
{
"playlistid"
:
0
}));
requests
.
push
(
new
JsonRpcRequest
(
"PlayList.Clear"
,
{
requests
.
push
(
new
JsonRpcRequest
(
"PlayList.Add"
,
{
"playlistid"
:
0
,
"item"
:{
"directory"
:
filename
,
"recursive"
:
true
}}));
"playlistid"
:
0
requests
.
push
(
new
JsonRpcRequest
(
"Player.Open"
,
{
"item"
:{
"playlistid"
:
0
,
"position"
:
0
}}));
}));
sendJsonRequest
(
requests
);
requests
.
push
(
new
JsonRpcRequest
(
"PlayList.Add"
,
{
"playlistid"
:
0
,
"item"
:
{
"directory"
:
filename
,
"recursive"
:
true
}
}));
requests
.
push
(
new
JsonRpcRequest
(
"Player.Open"
,
{
"item"
:
{
"playlistid"
:
0
,
"position"
:
0
}
}));
sendJsonRequest
(
requests
);
}
}
// Addon methods
// Addon methods
function
getAddons
()
{
function
getAddons
()
{
sendJsonRequest
(
new
JsonRpcRequest
(
"Addons.GetAddons"
,
{
"type"
:
"xbmc.python.script"
,
"properties"
:
[
"name"
],
"limits"
:{
"start"
:
0
,
"end"
:
10
}}),
getAddonsCb
);
sendJsonRequest
(
new
JsonRpcRequest
(
"Addons.GetAddons"
,
{
"type"
:
"xbmc.python.script"
,
"properties"
:
[
"name"
],
"limits"
:
{
"start"
:
0
,
"end"
:
10
}
}),
getAddonsCb
);
}
}
function
getAddonsCb
(
result
)
{
function
getAddonsCb
(
result
)
{
var
dict
=
{};
var
dict
=
{};
var
key
=
0
;
var
key
=
0
;
var
addons
=
result
.
addons
;
var
addons
=
result
.
addons
;
for
(
var
i
=
0
;
i
<
addons
.
length
;
i
++
)
{
for
(
var
i
=
0
;
i
<
addons
.
length
;
i
++
)
{
var
id
=
addons
[
i
].
addonid
;
var
id
=
addons
[
i
].
addonid
;
var
name
=
addons
[
i
].
name
;
var
name
=
addons
[
i
].
name
;
dict
[
key
++
]
=
id
+
"|"
+
name
;
dict
[
key
++
]
=
id
+
"|"
+
name
;
}
}
MessageQueue
.
sendAppMessage
(
dict
);
MessageQueue
.
sendAppMessage
(
dict
);
}
}
function
executeAddon
(
payload
)
{
function
executeAddon
(
payload
)
{
var
addonid
=
payload
.
MSG_KEY_CMD_DATA
;
var
addonid
=
payload
.
MSG_KEY_CMD_DATA
;
sendJsonRequest
(
new
JsonRpcRequest
(
"Addons.ExecuteAddon"
,
{
"addonid"
:
addonid
}));
sendJsonRequest
(
new
JsonRpcRequest
(
"Addons.ExecuteAddon"
,
{
"addonid"
:
addonid
}));
}
}
// Power methods
// Power methods
function
systemShutdown
()
{
function
systemShutdown
()
{
sendJsonRequest
(
new
JsonRpcRequest
(
"System.Shutdown"
));
sendJsonRequest
(
new
JsonRpcRequest
(
"System.Shutdown"
));
}
}
function
systemReboot
()
{
function
systemReboot
()
{
sendJsonRequest
(
new
JsonRpcRequest
(
"System.Reboot"
));
sendJsonRequest
(
new
JsonRpcRequest
(
"System.Reboot"
));
}
}
function
systemHibernate
()
{
function
systemHibernate
()
{
sendJsonRequest
(
new
JsonRpcRequest
(
"System.Hibernate"
));
sendJsonRequest
(
new
JsonRpcRequest
(
"System.Hibernate"
));
}
}
function
systemSuspend
()
{
function
systemSuspend
()
{
sendJsonRequest
(
new
JsonRpcRequest
(
"System.Suspend"
));
sendJsonRequest
(
new
JsonRpcRequest
(
"System.Suspend"
));
}
}
// Event listeners
// Event listeners
Pebble
.
addEventListener
(
'ready'
,
Pebble
.
addEventListener
(
"ready"
,
function
(
e
)
{
function
(
e
)
{
console
.
log
(
'Rockodi copyright (c) 2015, Douglas Otwell'
);
console
.
log
(
"Rockodi copyright (c) 2015, Douglas Otwell"
);
g_ip_address
=
localStorage
.
getItem
(
storage_keys
.
IP_ADDRESS
);
g_ip_address
=
localStorage
.
getItem
(
storage_keys
.
IP_ADDRESS
);
g_username
=
localStorage
.
getItem
(
storage_keys
.
USERNAME
);
g_username
=
localStorage
.
getItem
(
storage_keys
.
USERNAME
);
g_password
=
localStorage
.
getItem
(
storage_keys
.
PASSWORD
);
g_password
=
localStorage
.
getItem
(
storage_keys
.
PASSWORD
);
}
}
);
);
Pebble
.
addEventListener
(
'showConfiguration'
,
function
(
e
)
{
Pebble
.
addEventListener
(
"showConfiguration"
,
function
(
e
)
{
var
query_string
=
encodeURI
(
"?ip_address="
+
g_ip_address
+
"&username="
+
g_username
+
"&password="
+
g_password
);
var
query_string
=
encodeURI
(
"?ip_address="
+
g_ip_address
+
"&username="
+
g_username
+
"&password="
+
g_password
);
Pebble
.
openURL
(
'http://www.dkographicdetails.com/rockodi/config/config-page.html'
+
query_string
);
Pebble
.
openURL
(
"http://www.dkographicdetails.com/rockodi/config/config-page.html"
+
query_string
);
});
});
Pebble
.
addEventListener
(
'webviewclosed'
,
Pebble
.
addEventListener
(
"webviewclosed"
,
function
(
e
)
{
function
(
e
)
{
var
configuration
=
JSON
.
parse
(
decodeURIComponent
(
e
.
response
));
var
configuration
=
JSON
.
parse
(
decodeURIComponent
(
e
.
response
));
if
(
typeof
configuration
.
ip_address
!==
"undefined"
)
{
if
(
typeof
configuration
.
ip_address
!==
"undefined"
)
{
localStorage
.
setItem
(
storage_keys
.
IP_ADDRESS
,
configuration
.
ip_address
);
localStorage
.
setItem
(
storage_keys
.
IP_ADDRESS
,
configuration
.
ip_address
);
localStorage
.
setItem
(
storage_keys
.
USERNAME
,
configuration
.
username
);
localStorage
.
setItem
(
storage_keys
.
USERNAME
,
configuration
.
username
);
localStorage
.
setItem
(
storage_keys
.
PASSWORD
,
configuration
.
password
);
localStorage
.
setItem
(
storage_keys
.
PASSWORD
,
configuration
.
password
);
g_ip_address
=
localStorage
.
getItem
(
storage_keys
.
IP_ADDRESS
);
g_ip_address
=
localStorage
.
getItem
(
storage_keys
.
IP_ADDRESS
);
g_username
=
localStorage
.
getItem
(
storage_keys
.
USERNAME
);
g_username
=
localStorage
.
getItem
(
storage_keys
.
USERNAME
);
g_password
=
localStorage
.
getItem
(
storage_keys
.
PASSWORD
);
g_password
=
localStorage
.
getItem
(
storage_keys
.
PASSWORD
);
}
}
}
}
);
);
Pebble
.
addEventListener
(
"appmessage"
,
Pebble
.
addEventListener
(
"appmessage"
,
function
(
e
)
{
function
(
e
)
{
var
cmd
=
e
.
payload
.
MSG_KEY_CMD
;
var
cmd
=
e
.
payload
.
MSG_KEY_CMD
;
switch
(
cmd
)
{
switch
(
cmd
)
{
// Player messages
// Player messages
case
"GET_STATUS"
:
getStatus
();
break
;
case
"GET_STATUS"
:
case
"PLAY_PAUSE"
:
playPause
();
break
;
getStatus
();
case
"VOLUME_UP"
:
raiseVolume
();
break
;
break
;
case
"VOLUME_DOWN"
:
lowerVolume
();
break
;
case
"PLAY_PAUSE"
:
case
"NEXT"
:
next
();
break
;
playPause
();
case
"STOP"
:
stop
();
break
;
break
;
case
"PREVIOUS"
:
previous
();
break
;
case
"VOLUME_UP"
:
// Remote messages
raiseVolume
();
case
"KEY_SELECT"
:
sendKey
(
cmd
);
break
;
break
;
case
"KEY_UP"
:
sendKey
(
cmd
);
break
;
case
"VOLUME_DOWN"
:
case
"KEY_DOWN"
:
sendKey
(
cmd
);
break
;
lowerVolume
();
case
"KEY_BACK"
:
sendKey
(
cmd
);
break
;
break
;
case
"KEY_LEFT"
:
sendKey
(
cmd
);
break
;
case
"NEXT"
:
case
"KEY_RIGHT"
:
sendKey
(
cmd
);
break
;
next
();
// Goto messages
break
;
case
"GO_FULL"
:
gotoFullscreen
();
break
;
case
"STOP"
:
case
"GO_INFO"
:
gotoInfo
();
break
;
stop
();
case
"GO_HOME"
:
gotoHome
();
break
;
break
;
case
"GO_MUSIC"
:
gotoMusic
();
break
;
case
"PREVIOUS"
:
case
"GO_VIDEO"
:
gotoVideo
();
break
;
previous
();
case
"GO_PICS"
:
gotoPictures
();
break
;
break
;
case
"GO_WEATHER"
:
gotoWeather
();
break
;
// Remote messages
// Playlist messages
case
"KEY_SELECT"
:
case
"GET_MUSIC_PLAYLISTS"
:
getMusicPlaylists
();
break
;
sendKey
(
cmd
);
case
"PLAY_MUSIC_PLAYLIST"
:
playMusicPlaylist
(
e
.
payload
);
break
;
break
;
// Addons messages
case
"KEY_UP"
:
case
"GET_ADDONS"
:
getAddons
();
break
;
sendKey
(
cmd
);
case
"EXE_ADDON"
:
executeAddon
(
e
.
payload
);
break
;
break
;
// Power messages
case
"KEY_DOWN"
:
case
"PWR_SHUTDOWN"
:
systemShutdown
();
break
;
sendKey
(
cmd
);
case
"PWR_REBOOT"
:
systemReboot
();
break
;
break
;
case
"PWR_SUSPEND"
:
systemSuspend
();
break
;
case
"KEY_BACK"
:
case
"PWR_HIBERNATE"
:
systemHibernate
();
break
;
sendKey
(
cmd
);
default
:
console
.
log
(
"Command is not defined: "
+
cmd
+
"; payload: "
+
e
.
payload
);
break
;
case
"KEY_LEFT"
:
sendKey
(
cmd
);
break
;
case
"KEY_RIGHT"
:
sendKey
(
cmd
);
break
;
// Goto messages
case
"GO_FULL"
:
gotoFullscreen
();
break
;
case
"GO_INFO"
:
gotoInfo
();
break
;
case
"GO_HOME"
:
gotoHome
();
break
;
case
"GO_MUSIC"
:
gotoMusic
();
break
;
case
"GO_VIDEO"
:
gotoVideo
();
break
;
case
"GO_PICS"
:
gotoPictures
();
break
;
case
"GO_WEATHER"
:
gotoWeather
();
break
;
// Playlist messages
case
"GET_MUSIC_PLAYLISTS"
:
getMusicPlaylists
();
break
;
case
"PLAY_MUSIC_PLAYLIST"
:
playMusicPlaylist
(
e
.
payload
);
break
;
// Addons messages
case
"GET_ADDONS"
:
getAddons
();
break
;
case
"EXE_ADDON"
:
executeAddon
(
e
.
payload
);
break
;
// Power messages
case
"PWR_SHUTDOWN"
:
systemShutdown
();
break
;
case
"PWR_REBOOT"
:
systemReboot
();
break
;
case
"PWR_SUSPEND"
:
systemSuspend
();
break
;
case
"PWR_HIBERNATE"
:
systemHibernate
();
break
;
default
:
console
.
log
(
"Command is not defined: "
+
cmd
+
"; payload: "
+
e
.
payload
);
}
}
}
}
);
);
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment