root/src/public/js/Application.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GNU-GPL-3.0
function Application() {
    G.app = this;
    this.page = null;
    this.addServerEventListener();
    this.setScreenFromLocationHash();
    this.playerUi = new PlayerUi();

    var playerNode = this.playerUi.createNodes();
    $(function() {
        $(".playerFooter").append(playerNode);
    });
}

Application.prototype.setScreenFromLocationHash = function() {
    var self = this;
    if (!this.page) {
        $(".page").empty();
    }

    var fields = Utils.parseHashUrl(window.location.hash);

    if (fields.length > 0) {
        if (self.pageList[fields[0]]) {
            var nextPage = new self.pageList[fields[0]];
            self.pageList[fields[0]].prototype.constructor.apply(
                nextPage,
                fields.slice(1)
            );
            self.setPage(nextPage);
        }
    } else {
        self.setPage(new StartPage());
        /*
        $.getJSON("api/activePage", function(data) {
            if (self.pageList[data.page]) {
                //self.setPage(new self.pageList[data.page]);
                self.setPage(new StartPage());
            } else if (data.page == "TvShowPage") {
                self.setPage(new StartPage());
            } else {
                self.setPage(new StartPage());
            }
        }).error(function() {
            console.error("did not receive active page id");
        });
        */
    }
}

Application.prototype.addServerEventListener = function() {
    this.serverEvents = new EventSource("api/events/all");
    this.serverEvents.onopen = function(event) {
        console.log("sse open", event);
    }
    this.serverEvents.onmessage = function(event) {
        console.log("sse message", event);
    }
    this.serverEvents.onerror = function(event) {
        console.log("sse error", event);
    }
}

Application.prototype.pageList = {
    "StartPage": StartPage,
    "TvShowPage": TvShowPage,
    "StreamPlayerPage": StreamPlayerPage,
    "MissingFilesPage": MissingFilesPage

};

Application.prototype.setPage = function(page) {
    if (this.page && this.page.removeNodes) {
        this.page.removeNodes();
    }

    this.page = page;
    var node = null;
    if (page) {
        node = page.createNodes();
    }

    $(function() {
        $(".page").empty();
        if (node) {
            $(".page").append(node);
        }
    });
};

(function() {
    G.app = new Application();
    G.playerType = "remote";

    $(window).bind("hashchange", function()
    {
        G.app.setScreenFromLocationHash();
    });
})();