211 lines
7.3 KiB
JavaScript
211 lines
7.3 KiB
JavaScript
"use strict";
|
|
|
|
var Page = require("../lib/wModel/page");
|
|
var String = require("../lib/wModel/string");
|
|
var PanesList = require("../lib/wModel/panesList");
|
|
|
|
var Address = require("../lib/wType/address");
|
|
var Vocabulary = require("../lib/wType/vocabulary");
|
|
var Boolean = require("../lib/wType/boolean");
|
|
var Uint64 = require("../lib/wType/uint64");
|
|
|
|
var Link = require("../lib/wModel/link");
|
|
|
|
var List = require("./list");
|
|
var Artist = require("./artist");
|
|
var Album = require("./album");
|
|
var Song = require("./song");
|
|
|
|
var PaneModel = require("../lib/wModel/proxy/pane");
|
|
|
|
var MusicPage = Page.inherit({
|
|
"className": "MusicPage",
|
|
"constructor": function(address, name) {
|
|
Page.fn.constructor.call(this, address, name);
|
|
|
|
this._dbConnected = false;
|
|
this._addresses = Object.create(null);
|
|
|
|
this._createAddresses();
|
|
|
|
var header = new String(this._address["+"](new Address(["header"])), "Music");
|
|
header.addProperty("fontFamily", "casualFont");
|
|
//var hvo = new Vocabulary();
|
|
this.addItem(header, 0, 0, 1, 1, Page.Aligment.CenterTop);
|
|
|
|
this._errMessage = new String(this._address["+"](new Address(["message"])), "Database is not connected");
|
|
this._errMessage.addProperty("fontFamily", "largeFont");
|
|
this._errMessage.addProperty("fontSize", "largeFontSize");
|
|
|
|
this.addItem(this._errMessage, 1, 0, 1, 1, Page.Aligment.CenterTop);
|
|
},
|
|
"destructor": function() {
|
|
if (this._dbConnected && this._hasParentReporter) {
|
|
this._destroyLists();
|
|
} else {
|
|
this.removeItem(this._errMessage);
|
|
}
|
|
this._errMessage.destructor();
|
|
|
|
for (var tag in this._addresses) {
|
|
var group = this._addresses[tag];
|
|
for (var name in group) {
|
|
group[name].destructor();
|
|
}
|
|
}
|
|
|
|
Page.fn.destructor.call(this);
|
|
},
|
|
"_createAddresses": function() {
|
|
var ra = new Address(["artists"]);
|
|
var ral = new Address(["albums"]);
|
|
var rs = new Address(["songs"]);
|
|
|
|
var artists = Object.create(null);
|
|
var albums = Object.create(null);
|
|
var songs = Object.create(null);
|
|
|
|
artists.remote = ra.clone();
|
|
artists.local = this._address["+"](ra);
|
|
|
|
albums.remote = ral.clone();
|
|
albums.local = this._address["+"](ral);
|
|
|
|
songs.remote = rs.clone();
|
|
songs.local = this._address["+"](rs);
|
|
|
|
this._addresses.artists = artists;
|
|
this._addresses.albums = albums;
|
|
this._addresses.songs = songs;
|
|
|
|
var PaneArtist = PaneModel.Artists;
|
|
if (!PaneArtist) {
|
|
PaneArtist = PaneModel.inherit({});
|
|
PaneModel.Artists = PaneArtist;
|
|
} else {
|
|
PaneArtist.pageAddress.destructor()
|
|
}
|
|
PaneArtist.pageAddress = artists.local.clone();
|
|
|
|
var PaneAlbum = PaneModel.Albums;
|
|
if (!PaneAlbum) {
|
|
PaneAlbum = PaneModel.inherit({});
|
|
PaneModel.Albums = PaneAlbum;
|
|
} else {
|
|
PaneAlbum.pageAddress.destructor()
|
|
}
|
|
PaneAlbum.pageAddress = albums.local.clone();
|
|
|
|
var PaneSongs = PaneModel.Songs;
|
|
if (!PaneSongs) {
|
|
PaneSongs = PaneModel.inherit({});
|
|
PaneModel.Songs = PaneSongs;
|
|
} else {
|
|
PaneSongs.pageAddress.destructor()
|
|
}
|
|
PaneSongs.pageAddress = songs.local.clone();
|
|
|
|
ra.destructor();
|
|
ral.destructor();
|
|
rs.destructor();
|
|
},
|
|
"_createLists": function(socket) {
|
|
this._artists = new List(
|
|
this._addresses.artists.local.clone(),
|
|
"Artists",
|
|
this._addresses.artists.remote.clone(),
|
|
socket,
|
|
Artist
|
|
);
|
|
this._artistsLink = new Link(this._address["+"](new Address(["artistsLink"])), "Artists", this._addresses.artists.local.clone());
|
|
this._artistsLink.label.addProperty("fontSize", "largeFontSize");
|
|
this._artistsLink.label.addProperty("fontFamily", "largeFont");
|
|
this._artistsLink.label.addProperty("color", "primaryFontColor");
|
|
this._artistsLink.addProperty("backgroundColor", "primaryColor");
|
|
|
|
this._albums = new List(
|
|
this._addresses.albums.local.clone(),
|
|
"Albums",
|
|
this._addresses.albums.remote.clone(),
|
|
socket,
|
|
Album
|
|
);
|
|
this._albumsLink = new Link(this._address["+"](new Address(["albumsLink"])), "Albums", this._addresses.albums.local.clone());
|
|
this._albumsLink.label.addProperty("fontSize", "largeFontSize");
|
|
this._albumsLink.label.addProperty("fontFamily", "largeFont");
|
|
this._albumsLink.label.addProperty("color", "primaryFontColor");
|
|
this._albumsLink.addProperty("backgroundColor", "primaryColor");
|
|
|
|
var lOpts = new Vocabulary();
|
|
lOpts.insert("nestWidth", new Uint64(300));
|
|
this._songs = new List(
|
|
this._addresses.songs.local.clone(),
|
|
"Songs",
|
|
this._addresses.songs.remote.clone(),
|
|
socket,
|
|
Song,
|
|
lOpts,
|
|
[{
|
|
type: 0,
|
|
action: "play"
|
|
},
|
|
{
|
|
type: 0,
|
|
action: "scheduledToPlay"
|
|
}]
|
|
);
|
|
this._songsLink = new Link(this._address["+"](new Address(["songsLink"])), "Songs", this._addresses.songs.local.clone());
|
|
this._songsLink.label.addProperty("fontSize", "largeFontSize");
|
|
this._songsLink.label.addProperty("fontFamily", "largeFont");
|
|
this._songsLink.label.addProperty("color", "primaryFontColor");
|
|
this._songsLink.addProperty("backgroundColor", "primaryColor");
|
|
|
|
this.addItem(this._artistsLink, 1, 0, 1, 1);
|
|
this.addItem(this._albumsLink, 2, 0, 1, 1);
|
|
this.addItem(this._songsLink, 3, 0, 1, 1);
|
|
|
|
this.addPage(this._artists);
|
|
this.addPage(this._albums);
|
|
this.addPage(this._songs);
|
|
},
|
|
"_destroyLists": function() {
|
|
this.removePage(this._artists);
|
|
this.removePage(this._albums);
|
|
this.removePage(this._songs);
|
|
|
|
this.removeItem(this._artistsLink);
|
|
this.removeItem(this._albumsLink);
|
|
this.removeItem(this._songsLink);
|
|
|
|
this._artists.destructor();
|
|
this._albums.destructor();
|
|
this._songs.destructor();
|
|
|
|
this._artistsLink.destructor();
|
|
this._albumsLink.destructor();
|
|
this._songsLink.destructor();
|
|
},
|
|
"showError": function() {
|
|
if (this._dbConnected) {
|
|
if (!this._hasParentReporter) {
|
|
throw new Error("Parent reporter is required in music page");
|
|
}
|
|
this._destroyLists()
|
|
this.addItem(this._errMessage, 1, 0, 1, 1, Page.Aligment.CenterTop);
|
|
this._dbConnected = false;
|
|
}
|
|
},
|
|
"showBandList": function(perturaboSocket) {
|
|
if (!this._hasParentReporter) {
|
|
throw new Error("Parent reporter is required in music page");
|
|
}
|
|
if (!this._dbConnected) {
|
|
this.removeItem(this._errMessage);
|
|
this._createLists(perturaboSocket);
|
|
this._dbConnected = true;
|
|
}
|
|
}
|
|
});
|
|
|
|
module.exports = MusicPage;
|