-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathnodewebkit_main.js
122 lines (106 loc) · 3.4 KB
/
nodewebkit_main.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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
var template = require("./js/ui/template"); // r.js
var server = global.require("./server"); // nodejs
var moment = global.require("./js/moment/min/moment-with-locales.min.js")
var nodeapi = global.require("./nodewebkit_api");
var path = global.require("path");
var mkdirp = global.require("mkdirp");
var nw_gui = window.require('nw.gui');
var env = process.env;
window.addEventListener('beforeunload', function(e) {
console.log(e.target);
console.log(e.cancelable);
e.preventDefault();
e.stopPropagation();
});
var xdg_data_dirs = (env.XDG_DATA_DIRS || "").split(":");
var xdg_data_home = (env.XDG_DATA_HOME || env.HOME + "/.local/share")
console.log("nodewebkit_main.js");
var srv = new server();
srv.setPort(undefined);
for(var i = 0; i < xdg_data_dirs.length; i++){
if(xdg_data_dirs[i].length == 0) continue;
srv.addDataDir(path.join(xdg_data_dirs[i], "p2pweb", "data"));
}
var datadir = path.join(xdg_data_home, "p2pweb", "data");
mkdirp(datadir);
srv.setDataDir(datadir);
module.exports = nodeapi(srv);
var update_nodes_handler;
window.document.addEventListener("template-push", function(e){
if(update_nodes_handler) update_nodes_handler(e.target);
});
srv.on('listening', function(port) {
template.status.listening_port.push({port: port});
update_nodes_handler = function(node){
var links = node.querySelectorAll("a.external, a.internal-popup");
for(var i = 0; i < links.length; i++){
var lnk = links[i];
lnk.addEventListener('click', function(e){
var href = this.getAttribute('href');
if(href[0] == '/')
href = "http://localhost:" + port + href
nw_gui.Shell.openExternal(href);
e.preventDefault();
e.stopPropagation();
return false;
});
}
}
update_nodes_handler(window.document);
});
srv.on("public-address", function(address, remote_address){
var now = moment();
try {
template.status.public_addr.push({
address: address,
remote_address: remote_address,
date: now.format(),
dateFromNow: now.fromNow()
});
} catch(e) {
alert(address + "\n" + e);
}
});
var new_seed_input = window.document.querySelector("#section-status .new-seed input[type=text]");
var new_seed_button = window.document.querySelector("#section-status .new-seed input[type=button]");
new_seed_button.addEventListener('click', function(){
srv.addSeed(new_seed_input.value);
});
module.loaded = false;
srv.start(function(){
module.loaded = true;
});
function updateStatus() {
if(!srv.dht) return;
var seeds = srv.dht.getSeeds();
template.status.seeds.push({
seeds: seeds
});
var datalist = srv.storage.getCacheFileList();
var datalistr = datalist.filter(function(item){
return Object.keys(item.depends).length == 0;
}).map(fillRelations);
function fillRelations(item){
item.rel = {};
item.relations = [];
for(subid in item.rdepends) {
var relation = item.rdepends[subid];
var subitem = datalist[subid];
if(!subitem) {
subitem = {id: subid, missing: true};
}
if(!item.rel[relation]) {
var rel = {relation: relation, children: []};
item.rel[relation] = rel;
item.relations.push(rel);
}
item.rel[relation].children.push(fillRelations(subitem));
}
return item;
}
template.status.data.push({
data: datalistr
});
};
updateStatus();
setInterval(updateStatus, 1000);