364 lines
13 KiB
JavaScript
364 lines
13 KiB
JavaScript
var db = undefined;
|
|
var newStation = false
|
|
|
|
function settings_db_open() {
|
|
if (db === undefined)
|
|
db = LocalStorage.openDatabaseSync("harbour-allradio-2", "2.0", "Database", 100000);
|
|
return db;
|
|
}
|
|
|
|
function checkforold() {
|
|
db = settings_db_open();
|
|
try {
|
|
db.transaction(function(tx)
|
|
{
|
|
var rs = tx.executeSql('SELECT * FROM channels');
|
|
// console.log("OLD DATABSE TABLE EXISTS")
|
|
});
|
|
}
|
|
catch(a)
|
|
{
|
|
// console.log("NO OLD DATABASE")
|
|
}
|
|
}
|
|
|
|
function init() {
|
|
db = settings_db_open();
|
|
checkforold()
|
|
try {
|
|
db.transaction(
|
|
function(tx) {
|
|
tx.executeSql('CREATE TABLE IF NOT EXISTS settings(setting TEXT UNIQUE, value TEXT)');
|
|
tx.executeSql('CREATE TABLE IF NOT EXISTS stations (id TEXT UNIQUE, name TEXT, countrycode STRING, homepage TEXT, radiourlresolved TEXT, favicon TEXT, tagslist TEXT, codec TEXT, bitrate TEXT, hls TEXT, myclicktimestamp STRING, myclickcount INTEGER, favorite INTEGER)');
|
|
tx.executeSql('CREATE TABLE IF NOT EXISTS countries (countrycode TEXT UNIQUE, myclickcount INTEGER)');
|
|
tx.executeSql('CREATE TABLE IF NOT EXISTS tags (tag TEXT UNIQUE, myclickcount INTEGER)');
|
|
}
|
|
);
|
|
}
|
|
catch(a)
|
|
{
|
|
console.log("create failed: "+a)
|
|
return false
|
|
}
|
|
}
|
|
function setSetting(key, value) {
|
|
db = settings_db_open();
|
|
var res = "";
|
|
db.transaction(function(tx) {
|
|
var rs = tx.executeSql('INSERT OR REPLACE INTO settings VALUES (?,?);', [key,value]);
|
|
if (rs.rowsAffected > 0) {
|
|
res = "OK";
|
|
} else {
|
|
res = "Error";
|
|
}
|
|
}
|
|
);
|
|
//console.log("setSetting: "+value)
|
|
return res;
|
|
}
|
|
|
|
function getSetting(key, default_value) {
|
|
db = settings_db_open();
|
|
var res="";
|
|
try {
|
|
db.transaction(function(tx) {
|
|
var rs = tx.executeSql('SELECT value FROM settings WHERE setting=?;', [key]);
|
|
if (rs.rows.length > 0) {
|
|
res = rs.rows.item(0).value;
|
|
} else {
|
|
res = default_value;
|
|
}
|
|
})
|
|
} catch (err) {
|
|
//console.log("Database " + err);
|
|
res = default_value;
|
|
};
|
|
//console.log("getSetting: "+res)
|
|
return res
|
|
}
|
|
|
|
// id TEXT UNIQUE, name TEXT, countrycode STRING, homepage TEXT, radiourlresolved TEXT, favicon TEXT, tagslist TEXT, codec TEXT, bitrate TEXT, hls TEXT, myclicktimestamp STRING, myclickcount INTEGER, favorite INTEGER
|
|
// UPDATE OR INSERT STATION CLICKED
|
|
function setStationClicked(myclicktimestamp,id,name,countrycode,homepage,radiourlresolved,favicon,tagslist,codec,bitrate,hls,favorite) {
|
|
db = settings_db_open();
|
|
var cc
|
|
var t
|
|
var fav
|
|
if (countrycode === "") cc = "No Country"; else cc = countrycode
|
|
if (tagslist === "") t = "NoTag"; else t = tagslist
|
|
if (favorite === true) fav = 1; else fav = 0
|
|
try {
|
|
db.transaction(function(tx) {
|
|
var rs = tx.executeSql('UPDATE stations SET myclicktimestamp="'+myclicktimestamp+'",favorite='+fav+',myclickcount=myclickcount+1 WHERE id="'+id+'"');
|
|
if (rs.rowsAffected > 0) {
|
|
// console.log("DB UPDATE STATION CLICK: "+id)
|
|
} else {
|
|
tx.executeSql('INSERT INTO stations VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)',[id, name, cc, homepage, radiourlresolved,favicon,t,codec,bitrate,hls,myclicktimestamp,1,fav]);
|
|
// console.log("DB INSERT STATION CLICK: "+id)
|
|
}
|
|
});
|
|
setCountryClicked(cc)
|
|
setTagClicked(t)
|
|
}
|
|
catch(a)
|
|
{
|
|
console.log("ERROR SETSTATIONCLICKED: "+a)
|
|
}
|
|
}
|
|
// GET LIMIT NUMBER OF RECENT CLICKED TO MODEL
|
|
function getStationRecentClicked(model,limit)
|
|
{
|
|
db = settings_db_open();
|
|
try {
|
|
db.transaction(function(tx)
|
|
{
|
|
model.clear()
|
|
var rs = tx.executeSql('SELECT * FROM stations ORDER BY myclicktimestamp DESC LIMIT ?',limit);
|
|
for(var i = 0; i < rs.rows.length; i++) {
|
|
model.append({"stationuuid" : rs.rows.item(i).id, "name" : rs.rows.item(i).name, "countrycode" : rs.rows.item(i).countrycode,"homepage" : rs.rows.item(i).homepage,"url_resolved": rs.rows.item(i).radiourlresolved,"favicon":rs.rows.item(i).favicon,
|
|
"tags":rs.rows.item(i).tagslist,"codec":rs.rows.item(i).codec, "bitrate":rs.rows.item(i).bitrate,"hls":rs.rows.item(i).hls,"lastcheckok": "1","favorite": rs.rows.item(i).favorite})
|
|
}
|
|
return true
|
|
});
|
|
}
|
|
catch(a)
|
|
{
|
|
console.log("FAVO STATION RESENT failed: "+a);
|
|
return false;
|
|
}
|
|
}
|
|
function getFavorites(model,sort,limit) // name, myclickcount,myclicktimestamp
|
|
{
|
|
var reverse = sort === "name" ? "ASC" : "DESC"
|
|
db = settings_db_open();
|
|
try {
|
|
db.transaction(function(tx)
|
|
{
|
|
model.clear()
|
|
var rs = tx.executeSql('SELECT * FROM stations WHERE favorite=1 ORDER BY '+sort+' '+reverse+' LIMIT '+limit);
|
|
for(var i = 0; i < rs.rows.length; i++) {
|
|
model.append({"stationuuid" : rs.rows.item(i).id, "name" : rs.rows.item(i).name, "countrycode" : rs.rows.item(i).countrycode,"homepage" : rs.rows.item(i).homepage,"url_resolved": rs.rows.item(i).radiourlresolved,"favicon":rs.rows.item(i).favicon,
|
|
"tags":rs.rows.item(i).tagslist,"codec":rs.rows.item(i).codec, "bitrate":rs.rows.item(i).bitrate,"hls":rs.rows.item(i).hls,"lastcheckok": "1","favorite": rs.rows.item(i).favorite})
|
|
}
|
|
return true
|
|
});
|
|
}
|
|
catch(a)
|
|
{
|
|
console.log("FAVO STATION MOST PLAYED failed: "+a);
|
|
return false;
|
|
}
|
|
}
|
|
function getHistory(model,limit)
|
|
{
|
|
db = settings_db_open();
|
|
try {
|
|
db.transaction(function(tx)
|
|
{
|
|
model.clear()
|
|
var rs = tx.executeSql('SELECT * FROM stations ORDER BY myclicktimestamp DESC LIMIT ?',limit);
|
|
for(var i = 0; i < rs.rows.length; i++) {
|
|
model.append({"stationuuid" : rs.rows.item(i).id, "name" : rs.rows.item(i).name, "countrycode" : rs.rows.item(i).countrycode,"homepage" : rs.rows.item(i).homepage,"url_resolved": rs.rows.item(i).radiourlresolved,"favicon":rs.rows.item(i).favicon,
|
|
"tags":rs.rows.item(i).tagslist,"codec":rs.rows.item(i).codec, "bitrate":rs.rows.item(i).bitrate,"hls":rs.rows.item(i).hls,"lastcheckok": "1","favorite": rs.rows.item(i).favorite})
|
|
}
|
|
return true
|
|
});
|
|
}
|
|
catch(a)
|
|
{
|
|
console.log("FAVO STATION MOST PLAYED failed: "+a);
|
|
return false;
|
|
}
|
|
}
|
|
function getMostPlayedFavorites(model,limit)
|
|
{
|
|
db = settings_db_open();
|
|
try {
|
|
db.transaction(function(tx)
|
|
{
|
|
model.clear()
|
|
var rs = tx.executeSql('SELECT * FROM stations WHERE favorite=1 ORDER BY myclickcount DESC LIMIT ?',limit);
|
|
for(var i = 0; i < rs.rows.length; i++) {
|
|
model.append({"stationuuid" : rs.rows.item(i).id, "name" : rs.rows.item(i).name, "countrycode" : rs.rows.item(i).countrycode,"homepage" : rs.rows.item(i).homepage,"url_resolved": rs.rows.item(i).radiourlresolved,"favicon":rs.rows.item(i).favicon,
|
|
"tags":rs.rows.item(i).tagslist,"codec":rs.rows.item(i).codec, "bitrate":rs.rows.item(i).bitrate,"hls":rs.rows.item(i).hls,"lastcheckok": "1","favorite": rs.rows.item(i).favorite})
|
|
}
|
|
return true
|
|
});
|
|
}
|
|
catch(a)
|
|
{
|
|
console.log("FAVO STATION MOST PLAYED failed: "+a);
|
|
return false;
|
|
}
|
|
}
|
|
function setStationFavorite(id,name,countrycode,homepage,radiourlresolved,favicon,tagslist,codec,bitrate,hls,favorite) {
|
|
db = settings_db_open();
|
|
var cc
|
|
var t
|
|
var fav
|
|
// console.log("FAVORITE = "+favorite)
|
|
if (countrycode === "") cc = "No Country"; else cc = countrycode
|
|
if (tagslist === "") t = "NoTag"; else t = tagslist
|
|
if (favorite === true) fav = 1; else fav = 0
|
|
try {
|
|
db.transaction(function(tx) {
|
|
var rs = tx.executeSql('UPDATE stations SET favorite='+fav+' WHERE id="'+id+'"');
|
|
if (rs.rowsAffected > 0) {
|
|
// console.log("DB UPDATE STATION CLICK: "+fav+" - "+id)
|
|
} else {
|
|
tx.executeSql('INSERT INTO stations VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)',[id, name, cc, homepage, radiourlresolved,favicon,t,codec,bitrate,hls,"",1,fav]);
|
|
// console.log("DB INSERT STATION CLICK: "+id)
|
|
}
|
|
}
|
|
);
|
|
}
|
|
catch(a)
|
|
{
|
|
console.log("ERROR SET FAVORITE: "+a)
|
|
}
|
|
}
|
|
// get if favorite
|
|
// get if favorite
|
|
function getStationFavorite(id) { // Get info about number of clicks and if station is a favorite
|
|
//model.clear()
|
|
var db = settings_db_open();
|
|
var res = 0;
|
|
try {
|
|
db.transaction(function(tx) {
|
|
var rs = tx.executeSql('SELECT * FROM stations WHERE id = "'+id+'" AND favorite = 1');
|
|
res = rs.rows.length
|
|
// console.log("FAVO RESULT: "+res+" ID: "+id )
|
|
if (res>0) return true; else return false;
|
|
|
|
|
|
})
|
|
} catch (err) {
|
|
res = 0
|
|
console.log("ERROR ON FAVORITE CHECK: "+err)
|
|
return false
|
|
};
|
|
return res
|
|
}
|
|
function setCountryClicked(countrycode) {
|
|
db = settings_db_open();
|
|
// var clicks = getCountryClick(countrycode) + 1
|
|
try {
|
|
db.transaction(function(tx) {
|
|
var rs = tx.executeSql('UPDATE countries SET myclickcount=myclickcount+1 WHERE countrycode="'+countrycode+'"');
|
|
if (rs.rowsAffected > 0) {
|
|
// console.log("DB UPDATE COUNTRY CLICK: "+countrycode)
|
|
} else {
|
|
tx.executeSql('INSERT INTO countries VALUES (?,?);', [countrycode, 1]);
|
|
// console.log("DB INSERT COUNTRY CLICK: "+countrycode)
|
|
}
|
|
}
|
|
);
|
|
}
|
|
catch(a)
|
|
{
|
|
console.log("Failed setCountryClicked: "+a)
|
|
return false
|
|
}
|
|
}
|
|
function getCountryRecentClicked(model,limit)
|
|
{
|
|
db = settings_db_open();
|
|
try {
|
|
db.transaction(function(tx)
|
|
{
|
|
model.clear()
|
|
var rs = tx.executeSql('SELECT * FROM countries ORDER BY myclickcount DESC LIMIT '+limit);
|
|
for(var i = 0; i < rs.rows.length; i++) {
|
|
model.append({"alpha_2" : rs.rows.item(i).countrycode})
|
|
}
|
|
return true
|
|
});
|
|
}
|
|
catch(a)
|
|
{
|
|
console.log("FAVO COUNTRY failed: "+a);
|
|
return false;
|
|
}
|
|
}
|
|
function setTagClicked(tagslist) {
|
|
db = settings_db_open();
|
|
var tags = tagslist.split(",")
|
|
//var tempTag
|
|
try {
|
|
db.transaction(function(tx) {
|
|
for(var i = 0; i < tags.length; i++) {
|
|
var rs = tx.executeSql('UPDATE tags SET myclickcount=myclickcount+1 WHERE tag="'+tags[i]+'"');
|
|
if (rs.rowsAffected > 0) {
|
|
// console.log("DB UPDATE TAG CLICK: "+tags[i])
|
|
} else {
|
|
tx.executeSql('INSERT INTO tags VALUES (?,?);', [tags[i], 1]);
|
|
// console.log("DB INSERT TAG CLICK: "+tags[i])
|
|
}
|
|
}
|
|
}
|
|
);
|
|
}
|
|
catch(a)
|
|
{
|
|
console.log("Failed settagsclicked: "+a)
|
|
return false
|
|
}
|
|
}
|
|
function getTagsRecentClicked(model,limit)
|
|
{
|
|
db = settings_db_open();
|
|
//var max = 0
|
|
try {
|
|
db.transaction(function(tx)
|
|
{
|
|
model.clear()
|
|
var rs = tx.executeSql('SELECT * FROM tags ORDER BY myclickcount DESC limit '+limit);
|
|
for(var i = 0; i < rs.rows.length; i++) {
|
|
if (rs.rows.item(i).tag !== "NoTag") {
|
|
model.append({"tag" : rs.rows.item(i).tag,"myclickcount" : rs.rows.item(i).myclickcount})
|
|
}
|
|
// if (rs.rows.item(i).myclickcount > max) max = rs.rows.item(i).myclickcount
|
|
}
|
|
// radioPlayer.maxTagClicks = max
|
|
// console.log("MAX TAGS: "+max)
|
|
return true
|
|
});
|
|
|
|
|
|
}
|
|
catch(a)
|
|
{
|
|
console.log("FAVO TAGS failed: "+a);
|
|
return false;
|
|
}
|
|
}
|
|
function getTagsClicked(model,limit)
|
|
{
|
|
db = settings_db_open();
|
|
var max = 0
|
|
try {
|
|
db.transaction(function(tx)
|
|
{
|
|
model.clear()
|
|
var rs = tx.executeSql('SELECT * FROM tags ORDER BY tag limit '+limit);
|
|
for(var i = 0; i < rs.rows.length; i++) {
|
|
if (rs.rows.item(i).tag !== "NoTag") {
|
|
model.append({"tag" : rs.rows.item(i).tag,"myclickcount" : rs.rows.item(i).myclickcount})
|
|
if (rs.rows.item(i).myclickcount > max) max = rs.rows.item(i).myclickcount
|
|
}
|
|
}
|
|
// radioPlayer.maxTagClicks = max
|
|
console.log("MAX TAGS: "+max)
|
|
maxTags = max
|
|
return true
|
|
});
|
|
|
|
|
|
}
|
|
catch(a)
|
|
{
|
|
console.log("FAVO TAGS failed: "+a);
|
|
return false;
|
|
}
|
|
}
|