initial commit
This commit is contained in:
commit
4b60ece582
327 changed files with 28286 additions and 0 deletions
10
magnus/pages/CMakeLists.txt
Normal file
10
magnus/pages/CMakeLists.txt
Normal file
|
@ -0,0 +1,10 @@
|
|||
cmake_minimum_required(VERSION 2.8.12)
|
||||
|
||||
configure_file(music.js music.js)
|
||||
configure_file(home.js home.js)
|
||||
configure_file(test.js test.js)
|
||||
configure_file(list.js list.js)
|
||||
configure_file(tempPage.js tempPage.js)
|
||||
configure_file(artist.js artist.js)
|
||||
configure_file(album.js album.js)
|
||||
configure_file(song.js song.js)
|
144
magnus/pages/album.js
Normal file
144
magnus/pages/album.js
Normal file
|
@ -0,0 +1,144 @@
|
|||
"use strict";
|
||||
|
||||
var TempPage = require("./tempPage");
|
||||
var String = require("../lib/wModel/string");
|
||||
var ProxyCatModel = require("../lib/wModel/proxy/catalogue");
|
||||
var PaneModel = require("../lib/wModel/proxy/pane");
|
||||
var Image = require("../lib/wModel/image");
|
||||
var Model = require("../lib/wModel/model");
|
||||
|
||||
var VCController = require("../lib/wController/vocabulary");
|
||||
|
||||
var Address = require("../lib/wType/address");
|
||||
var Uint64 = require("../lib/wType/uint64");
|
||||
var Vocabulary = require("../lib/wType/vocabulary");
|
||||
|
||||
var AlbumPage = TempPage.inherit({
|
||||
"className": "AlbumPage",
|
||||
"constructor": function(address, name, id, proxySocket) {
|
||||
TempPage.fn.constructor.call(this, address, name);
|
||||
|
||||
this._remoteId = id;
|
||||
this._proxySocket = proxySocket;
|
||||
this._ctrls = Object.create(null);
|
||||
|
||||
this._image = new Image(this._address["+"](new Address(["image"])), new Uint64(0));
|
||||
var imageOptions = new Vocabulary();
|
||||
imageOptions.insert("minWidth", new Uint64(200));
|
||||
imageOptions.insert("maxWidth", new Uint64(200));
|
||||
imageOptions.insert("minHeight", new Uint64(200));
|
||||
imageOptions.insert("maxHeight", new Uint64(200));
|
||||
this.addItem(this._image, 0, 0, 2, 1, TempPage.Aligment.CenterCenter, new Uint64(TempPage.getModelTypeId(this._image)), imageOptions);
|
||||
|
||||
var header = this._header = new String(this._address["+"](new Address(["header"])), "");
|
||||
header.addProperty("fontFamily", "casualFont");
|
||||
this.addItem(header, 0, 1, 1, 1, TempPage.Aligment.LeftTop);
|
||||
|
||||
var artist = this._artist = new String(this._address["+"](new Address(["artist"])), "Artist name");
|
||||
artist.addProperty("fontFamily", "casualFont");
|
||||
this.addItem(artist, 1, 1, 1, 1, TempPage.Aligment.LeftTop);
|
||||
|
||||
var spacer = new Model(this._address["+"](new Address(["spacer"])));
|
||||
this.addItem(spacer, 0, 2, 2, 1);
|
||||
|
||||
this._songs = new ProxyCatModel(
|
||||
this._address["+"](new Address(["songs"])),
|
||||
new Address(["songs"]),
|
||||
{
|
||||
sorting: {ascending: true, field: "name"},
|
||||
filter: {album: id.clone()}
|
||||
},
|
||||
proxySocket
|
||||
);
|
||||
this._songs.className = "PanesList";
|
||||
var PaneClass = PaneModel.Songs;
|
||||
this._songs.setChildrenClass(PaneClass);
|
||||
this.addItem(this._songs, 2, 0, 1, 3, TempPage.Aligment.CenterTop);
|
||||
},
|
||||
"destructor": function() {
|
||||
this._clearCtrls();
|
||||
|
||||
TempPage.fn.destructor.call(this);
|
||||
},
|
||||
"_clearCtrls": function() {
|
||||
for (var key in this._ctrls) {
|
||||
this._ctrls[key].destructor();
|
||||
}
|
||||
|
||||
this._ctrls = Object.create(null);
|
||||
},
|
||||
"_onAlbumNewElement": function(key, el) {
|
||||
switch(key) {
|
||||
case "name":
|
||||
this._header.set(el);
|
||||
break;
|
||||
case "image":
|
||||
this._image.set(el.clone());
|
||||
break;
|
||||
case "artist":
|
||||
var arVC = new VCController(new Address(["artists", el.toString()]));
|
||||
arVC.on("newElement", this._onArtistNewElement, this);
|
||||
arVC.on("removeElement", this._onArtistRemoveElement, this);
|
||||
this._ctrls.artist = arVC;
|
||||
arVC.register(this._dp, this._proxySocket);
|
||||
arVC.subscribe();
|
||||
break;
|
||||
}
|
||||
},
|
||||
"_onAlbumRemoveElement": function(key) {
|
||||
switch(key) {
|
||||
case "name":
|
||||
this._header.set("");
|
||||
break;
|
||||
case "image":
|
||||
this._image.set(new Uint64(0));
|
||||
break;
|
||||
case "artist":
|
||||
this._artist.set("");
|
||||
this._ctrls.artist.destructor();
|
||||
delete this._ctrls.artist;
|
||||
}
|
||||
},
|
||||
"_onArtistNewElement": function(key, el) {
|
||||
switch(key) {
|
||||
case "name":
|
||||
this._artist.set(el);
|
||||
break;
|
||||
}
|
||||
},
|
||||
"_onArtistRemoveElement": function(key) {
|
||||
switch(key) {
|
||||
case "name":
|
||||
this._artist.set("unknown");
|
||||
}
|
||||
},
|
||||
"register": function(dp, server) {
|
||||
TempPage.fn.register.call(this, dp, server);
|
||||
|
||||
for (var key in this._ctrls) {
|
||||
this._ctrls[key].register(dp, this._proxySocket);
|
||||
}
|
||||
},
|
||||
"setParentReporter": function(pr) {
|
||||
TempPage.fn.setParentReporter.call(this, pr);
|
||||
|
||||
this._pr.registerParent(this._songs.getAddress(), this._songs.reporterHandler);
|
||||
this._songs.subscribe();
|
||||
|
||||
var albumVC = new VCController(new Address(["albums", this._remoteId.toString()]));
|
||||
albumVC.on("newElement", this._onAlbumNewElement, this);
|
||||
albumVC.on("removeElement", this._onAlbumRemoveElement, this);
|
||||
this._ctrls.album = albumVC;
|
||||
albumVC.register(this._dp, this._proxySocket);
|
||||
albumVC.subscribe();
|
||||
},
|
||||
"unsetParentReporter": function() {
|
||||
this._pr.unregisterParent(this._songs.getAddress());
|
||||
|
||||
this._clearCtrls();
|
||||
|
||||
TempPage.fn.unsetParentReporter.call(this);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = AlbumPage;
|
112
magnus/pages/artist.js
Normal file
112
magnus/pages/artist.js
Normal file
|
@ -0,0 +1,112 @@
|
|||
"use strict";
|
||||
|
||||
var TempPage = require("./tempPage");
|
||||
var String = require("../lib/wModel/string");
|
||||
var ProxyCatModel = require("../lib/wModel/proxy/catalogue");
|
||||
var PaneModel = require("../lib/wModel/proxy/pane");
|
||||
|
||||
var VCController = require("../lib/wController/vocabulary");
|
||||
|
||||
var Address = require("../lib/wType/address");
|
||||
|
||||
var ArtistPage = TempPage.inherit({
|
||||
"className": "ArtistPage",
|
||||
"constructor": function(address, name, id, proxySocket) {
|
||||
TempPage.fn.constructor.call(this, address, name);
|
||||
|
||||
this._remoteId = id;
|
||||
this._proxySocket = proxySocket;
|
||||
this._ctrls = Object.create(null);
|
||||
|
||||
var header = this._header = new String(this._address["+"](new Address(["header"])), "");
|
||||
header.addProperty("fontFamily", "casualFont");
|
||||
this.addItem(header, 0, 0, 1, 1, TempPage.Aligment.CenterTop);
|
||||
|
||||
this._albums = new ProxyCatModel(
|
||||
this._address["+"](new Address(["albums"])),
|
||||
new Address(["albums"]),
|
||||
{
|
||||
sorting: {ascending: true, field: "name"},
|
||||
filter: {artist: id.clone()}
|
||||
},
|
||||
proxySocket
|
||||
);
|
||||
this._albums.className = "PanesList";
|
||||
var PaneClass = PaneModel.Albums;
|
||||
this._albums.setChildrenClass(PaneClass);
|
||||
this.addItem(this._albums, 1, 0, 1, 1, TempPage.Aligment.CenterTop);
|
||||
|
||||
this._songs = new ProxyCatModel(
|
||||
this._address["+"](new Address(["songs"])),
|
||||
new Address(["songs"]),
|
||||
{
|
||||
sorting: {ascending: true, field: "name"},
|
||||
filter: {artist: id.clone()}
|
||||
},
|
||||
proxySocket
|
||||
);
|
||||
this._songs.className = "PanesList";
|
||||
var PaneClass = PaneModel.Songs;
|
||||
this._songs.setChildrenClass(PaneClass);
|
||||
this.addItem(this._songs, 2, 0, 1, 1, TempPage.Aligment.CenterTop);
|
||||
},
|
||||
"destructor": function() {
|
||||
this._clearCtrls();
|
||||
|
||||
TempPage.fn.destructor.call(this);
|
||||
},
|
||||
"_clearCtrls": function() {
|
||||
for (var key in this._ctrls) {
|
||||
this._ctrls[key].destructor();
|
||||
}
|
||||
|
||||
this._ctrls = Object.create(null);
|
||||
},
|
||||
"_onArtistNewElement": function(key, el) {
|
||||
switch(key) {
|
||||
case "name":
|
||||
this._header.set(el);
|
||||
break;
|
||||
}
|
||||
},
|
||||
"_onArtistRemoveElement": function(key) {
|
||||
switch(key) {
|
||||
case "name":
|
||||
this._header.set("");
|
||||
break;
|
||||
}
|
||||
},
|
||||
"register": function(dp, server) {
|
||||
TempPage.fn.register.call(this, dp, server);
|
||||
|
||||
for (var key in this._ctrls) {
|
||||
this._ctrls[key].register(dp, this._proxySocket);
|
||||
}
|
||||
},
|
||||
"setParentReporter": function(pr) {
|
||||
TempPage.fn.setParentReporter.call(this, pr);
|
||||
|
||||
this._pr.registerParent(this._albums.getAddress(), this._albums.reporterHandler);
|
||||
this._pr.registerParent(this._songs.getAddress(), this._songs.reporterHandler);
|
||||
|
||||
this._albums.subscribe()
|
||||
this._songs.subscribe();
|
||||
|
||||
var artistVC = new VCController(new Address(["artists", this._remoteId.toString()]));
|
||||
artistVC.on("newElement", this._onArtistNewElement, this);
|
||||
artistVC.on("removeElement", this._onArtistRemoveElement, this);
|
||||
this._ctrls.artist = artistVC;
|
||||
artistVC.register(this._dp, this._proxySocket);
|
||||
artistVC.subscribe();
|
||||
},
|
||||
"unsetParentReporter": function() {
|
||||
this._pr.unregisterParent(this._albums.getAddress());
|
||||
this._pr.unregisterParent(this._songs.getAddress());
|
||||
|
||||
this._clearCtrls();
|
||||
|
||||
TempPage.fn.unsetParentReporter.call(this);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = ArtistPage;
|
19
magnus/pages/home.js
Normal file
19
magnus/pages/home.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
"use strict";
|
||||
|
||||
var Page = require("../lib/wModel/page");
|
||||
var String = require("../lib/wModel/string");
|
||||
|
||||
var Address = require("../lib/wType/address");
|
||||
|
||||
var HomePage = Page.inherit({
|
||||
"className": "HomePage",
|
||||
"constructor": function(address, name) {
|
||||
Page.fn.constructor.call(this, address, name);
|
||||
|
||||
var header = new String(this._address["+"](new Address(["message"])), "This is the root page");
|
||||
header.addProperty("fontFamily", "casualFont");
|
||||
this.addItem(header, 0, 0, 1, 1, Page.Aligment.CenterTop);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = HomePage;
|
115
magnus/pages/list.js
Normal file
115
magnus/pages/list.js
Normal file
|
@ -0,0 +1,115 @@
|
|||
"use strict";
|
||||
|
||||
var Page = require("../lib/wModel/page");
|
||||
var String = require("../lib/wModel/string");
|
||||
var ProxyCatModel = require("../lib/wModel/proxy/catalogue");
|
||||
var PaneModel = require("../lib/wModel/proxy/pane");
|
||||
|
||||
var Address = require("../lib/wType/address");
|
||||
var Uint64 = require("../lib/wType/uint64");
|
||||
|
||||
var Handler = require("../lib/wDispatcher/handler");
|
||||
|
||||
var List = Page.inherit({
|
||||
"className": "ListPage",
|
||||
"constructor": function(address, name, remoteAddress, socket, ChildClass) {
|
||||
Page.fn.constructor.call(this, address, name);
|
||||
|
||||
this._proxySocket = socket;
|
||||
this._ChildClass = ChildClass;
|
||||
|
||||
var header = new String(this._address["+"](new Address(["header"])), name);
|
||||
header.addProperty("fontFamily", "casualFont");
|
||||
this.addItem(header, 0, 0, 1, 1, Page.Aligment.CenterTop);
|
||||
|
||||
this._list = new ProxyCatModel(
|
||||
this._address["+"](new Address(["list"])),
|
||||
remoteAddress,
|
||||
{
|
||||
sorting: {ascending: true, field: "name"}
|
||||
},
|
||||
socket
|
||||
);
|
||||
this._list.className = "PanesList";
|
||||
var PaneClass = PaneModel[name];
|
||||
if (!PaneClass) {
|
||||
PaneClass = PaneModel.inherit({});
|
||||
PaneClass.pageAddress = address;
|
||||
}
|
||||
this._list.setChildrenClass(PaneClass);
|
||||
this.addItem(this._list, 1, 0, 1, 1, Page.Aligment.CenterTop);
|
||||
|
||||
this._reporterHandler = new Handler(this._address["+"](new Address(["subscribeMember"])), this, this._h_subscribeMember);
|
||||
},
|
||||
"destructor": function() {
|
||||
this._reporterHandler.destructor();
|
||||
this.removeItem(this._list);
|
||||
this._list.destructor();
|
||||
|
||||
Page.fn.destructor.call(this);
|
||||
},
|
||||
"_createChildPage": function(id) {
|
||||
var childName = id.toString();
|
||||
var postfix = new Address([childName]);
|
||||
var childAddr = this._address["+"](postfix);
|
||||
|
||||
var child = new this._ChildClass(childAddr, childName, id.clone(), this._proxySocket);
|
||||
this.addPage(child);
|
||||
child.on("destroyMe", this._destroyChild.bind(this, child)); //to remove model if it has no subscribers
|
||||
child.checkSubscribersAndDestroy();
|
||||
|
||||
return child;
|
||||
},
|
||||
"_destroyChild": function(child) {
|
||||
this.removePage(child);
|
||||
child.destructor();
|
||||
},
|
||||
"getChildPage": function(name) {
|
||||
var child = this._childPages[name];
|
||||
if (child === undefined) {
|
||||
var int = parseInt(name);
|
||||
if (int == name) {
|
||||
var id = new Uint64(int);
|
||||
var itr = this._list.controller.data.find(id);
|
||||
if (!itr["=="](this._list.controller.data.end())) {
|
||||
child = this._createChildPage(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return child;
|
||||
},
|
||||
"_h_subscribeMember": function(ev) {
|
||||
var dest = ev.getDestination();
|
||||
var lastHops = dest["<<"](this._address.length());
|
||||
|
||||
if (lastHops.length() === 2) {
|
||||
var command = lastHops.back().toString();
|
||||
var numId = parseInt(lastHops.front().toString());
|
||||
if ((command === "subscribe" || command === "get" || command === "ping") && numId === numId) {
|
||||
var id = new Uint64(numId);
|
||||
var child = this._createChildPage(id);
|
||||
child["_h_" + command](ev);
|
||||
} else {
|
||||
this.trigger("serviceMessage", "ListPage model got a strange event: " + ev.toString(), 1);
|
||||
}
|
||||
} else {
|
||||
this.trigger("serviceMessage", "ListPage model got a strange event: " + ev.toString(), 1);
|
||||
}
|
||||
},
|
||||
"setParentReporter": function(pr) {
|
||||
Page.fn.setParentReporter.call(this, pr);
|
||||
|
||||
this._pr.registerParent(this._list.getAddress(), this._list.reporterHandler);
|
||||
this._pr.registerParent(this.getAddress(), this._reporterHandler);
|
||||
this._list.subscribe();
|
||||
},
|
||||
"unsetParentReporter": function() {
|
||||
this._pr.unregisterParent(this.getAddress());
|
||||
this._pr.unregisterParent(this._list.getAddress());
|
||||
|
||||
Page.fn.unsetParentReporter.call(this);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = List;
|
198
magnus/pages/music.js
Normal file
198
magnus/pages/music.js
Normal file
|
@ -0,0 +1,198 @@
|
|||
"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 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");
|
||||
|
||||
this._songs = new List(
|
||||
this._addresses.songs.local.clone(),
|
||||
"Songs",
|
||||
this._addresses.songs.remote.clone(),
|
||||
socket,
|
||||
Song
|
||||
);
|
||||
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;
|
151
magnus/pages/song.js
Normal file
151
magnus/pages/song.js
Normal file
|
@ -0,0 +1,151 @@
|
|||
"use strict";
|
||||
|
||||
var TempPage = require("./tempPage");
|
||||
var String = require("../lib/wModel/string");
|
||||
var Image = require("../lib/wModel/image");
|
||||
|
||||
var VCController = require("../lib/wController/vocabulary");
|
||||
|
||||
var Address = require("../lib/wType/address");
|
||||
var Uint64 = require("../lib/wType/uint64");
|
||||
|
||||
var SongPage = TempPage.inherit({
|
||||
"className": "SongPage",
|
||||
"constructor": function(address, name, id, proxySocket) {
|
||||
TempPage.fn.constructor.call(this, address, name);
|
||||
|
||||
this._remoteId = id;
|
||||
this._proxySocket = proxySocket;
|
||||
this._ctrls = Object.create(null);
|
||||
|
||||
var header = this._header = new String(this._address["+"](new Address(["header"])), "");
|
||||
header.addProperty("fontFamily", "casualFont");
|
||||
this.addItem(header, 0, 1, 1, 1, TempPage.Aligment.CenterTop);
|
||||
|
||||
var album = this._album = new String(this._address["+"](new Address(["album"])), "Album name");
|
||||
album.addProperty("fontFamily", "casualFont");
|
||||
this.addItem(album, 1, 1, 1, 1, TempPage.Aligment.CenterTop);
|
||||
|
||||
var artist = this._artist = new String(this._address["+"](new Address(["artist"])), "Artist name");
|
||||
artist.addProperty("fontFamily", "casualFont");
|
||||
this.addItem(artist, 2, 1, 1, 1, TempPage.Aligment.CenterTop);
|
||||
|
||||
var image = this._image = new Image(this._address["+"](new Address(["image"])), new Uint64(0));
|
||||
this.addItem(image, 0, 0, 3, 1, TempPage.Aligment.CenterCenter);
|
||||
},
|
||||
"destructor": function() {
|
||||
this._clearCtrls();
|
||||
|
||||
TempPage.fn.destructor.call(this);
|
||||
},
|
||||
"_clearCtrls": function() {
|
||||
for (var key in this._ctrls) {
|
||||
this._ctrls[key].destructor();
|
||||
}
|
||||
|
||||
this._ctrls = Object.create(null);
|
||||
},
|
||||
"_onAlbumNewElement": function(key, el) {
|
||||
switch(key) {
|
||||
case "name":
|
||||
this._album.set(el);
|
||||
break;
|
||||
case "image":
|
||||
this._image.set(el.clone());
|
||||
break;
|
||||
|
||||
}
|
||||
},
|
||||
"_onAlbumRemoveElement": function(key) {
|
||||
switch(key) {
|
||||
case "name":
|
||||
this._album.set("unknown");
|
||||
case "image":
|
||||
this._image.set(new Uint64(0));
|
||||
break;
|
||||
}
|
||||
},
|
||||
"_onArtistNewElement": function(key, el) {
|
||||
switch(key) {
|
||||
case "name":
|
||||
this._artist.set(el);
|
||||
break;
|
||||
}
|
||||
},
|
||||
"_onArtistRemoveElement": function(key) {
|
||||
switch(key) {
|
||||
case "name":
|
||||
this._artist.set("unknown");
|
||||
}
|
||||
},
|
||||
"_onSongNewElement": function(key, el) {
|
||||
switch(key) {
|
||||
case "name":
|
||||
this._header.set(el);
|
||||
break;
|
||||
case "album":
|
||||
if (this._ctrls.album) {
|
||||
this.trigger("serviceMessage", "an album controller reinitializes in song page, not suppose to happen!", 1);
|
||||
this._ctrls.album.destructor();
|
||||
}
|
||||
var aVC = new VCController(new Address(["albums", el.toString()]));
|
||||
aVC.on("newElement", this._onAlbumNewElement, this);
|
||||
aVC.on("removeElement", this._onAlbumRemoveElement, this);
|
||||
this._ctrls.album = aVC;
|
||||
aVC.register(this._dp, this._proxySocket);
|
||||
aVC.subscribe();
|
||||
break;
|
||||
case "artist":
|
||||
if (this._ctrls.artist) {
|
||||
this.trigger("serviceMessage", "an artist controller reinitializes in song page, not suppose to happen!", 1);
|
||||
this._ctrls.artist.destructor();
|
||||
}
|
||||
var arVC = new VCController(new Address(["artists", el.toString()]));
|
||||
arVC.on("newElement", this._onArtistNewElement, this);
|
||||
arVC.on("removeElement", this._onArtistRemoveElement, this);
|
||||
this._ctrls.artist = arVC;
|
||||
arVC.register(this._dp, this._proxySocket);
|
||||
arVC.subscribe();
|
||||
break;
|
||||
}
|
||||
},
|
||||
"_onSongRemoveElement": function(key) {
|
||||
switch(key) {
|
||||
case "name":
|
||||
this._header.set("");
|
||||
break;
|
||||
case "album":
|
||||
this._album.set("");
|
||||
this._ctrls.album.destructor();
|
||||
delete this._ctrls.album;
|
||||
case "artist":
|
||||
this._artist.set("");
|
||||
this._ctrls.artist.destructor();
|
||||
delete this._ctrls.artist;
|
||||
}
|
||||
},
|
||||
"register": function(dp, server) {
|
||||
TempPage.fn.register.call(this, dp, server);
|
||||
|
||||
for (var key in this._ctrls) {
|
||||
this._ctrls[key].register(dp, this._proxySocket);
|
||||
}
|
||||
},
|
||||
"setParentReporter": function(pr) {
|
||||
TempPage.fn.setParentReporter.call(this, pr);
|
||||
|
||||
var songVC = new VCController(new Address(["songs", this._remoteId.toString()]));
|
||||
songVC.on("newElement", this._onSongNewElement, this);
|
||||
songVC.on("removeElement", this._onSongRemoveElement, this);
|
||||
this._ctrls.song = songVC;
|
||||
songVC.register(this._dp, this._proxySocket);
|
||||
songVC.subscribe();
|
||||
},
|
||||
"unsetParentReporter": function() {
|
||||
this._clearCtrls();
|
||||
|
||||
TempPage.fn.unsetParentReporter.call(this);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = SongPage;
|
46
magnus/pages/tempPage.js
Normal file
46
magnus/pages/tempPage.js
Normal file
|
@ -0,0 +1,46 @@
|
|||
"use strict";
|
||||
|
||||
var Page = require("../lib/wModel/page");
|
||||
|
||||
var config = require("../config/config.json");
|
||||
|
||||
var TempPage = Page.inherit({
|
||||
"className": "TempPage",
|
||||
"constructor": function(address, name) {
|
||||
Page.fn.constructor.call(this, address, name);
|
||||
|
||||
this._destructionTimeout = undefined;
|
||||
},
|
||||
"destructor": function() {
|
||||
if (this._destructionTimeout) {
|
||||
clearTimeout(this._destructionTimeout);
|
||||
}
|
||||
Page.fn.destructor.call(this);
|
||||
},
|
||||
"checkSubscribersAndDestroy": function() {
|
||||
if (this._subscribersCount === 0 && this._destructionTimeout === undefined) {
|
||||
this.trigger("serviceMessage", this._address.toString() + " has no more subscribers, destroying page");
|
||||
this._destructionTimeout = setTimeout(this.trigger.bind(this, "destroyMe"), config.modelDestructionTimeout);
|
||||
}
|
||||
},
|
||||
"_h_subscribe": function(ev) {
|
||||
Page.fn._h_subscribe.call(this, ev);
|
||||
|
||||
if (this._destructionTimeout !== undefined) {
|
||||
clearTimeout(this._destructionTimeout);
|
||||
this._destructionTimeout = undefined;
|
||||
}
|
||||
},
|
||||
"_h_unsubscribe": function(ev) {
|
||||
Page.fn._h_unsubscribe.call(this, ev);
|
||||
|
||||
this.checkSubscribersAndDestroy();
|
||||
},
|
||||
"_onSocketDisconnected": function(ev, socket) {
|
||||
Page.fn._onSocketDisconnected.call(this, ev, socket);
|
||||
|
||||
this.checkSubscribersAndDestroy();
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = TempPage;
|
19
magnus/pages/test.js
Normal file
19
magnus/pages/test.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
"use strict";
|
||||
|
||||
var Page = require("../lib/wModel/page");
|
||||
var String = require("../lib/wModel/string");
|
||||
|
||||
var Address = require("../lib/wType/address");
|
||||
|
||||
var TestPage = Page.inherit({
|
||||
"className": "TestPage",
|
||||
"constructor": function(address, name) {
|
||||
Page.fn.constructor.call(this, address, name);
|
||||
|
||||
var header = new String(this._address["+"](new Address(["message"])), "This is a test page");
|
||||
header.addProperty("fontFamily", "casualFont");
|
||||
this.addItem(header, 0, 0, 1, 1, Page.Aligment.CenterTop);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = TestPage;
|
Loading…
Add table
Add a link
Reference in a new issue