commit
70cbbcdcf0
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,3 +4,4 @@ msg/*
|
|||||||
index
|
index
|
||||||
interfaceip6adress
|
interfaceip6adress
|
||||||
nodes/*
|
nodes/*
|
||||||
|
*.log
|
||||||
|
@ -32,11 +32,12 @@ sed -i -e "s/option 'interfaces' 'mesh'/option 'interfaces' 'adhoc0'/g" /etc/con
|
|||||||
|
|
||||||
opkg install python git
|
opkg install python git
|
||||||
sleep 1
|
sleep 1
|
||||||
git clone git://github.com/jngrt/meshenger.git /meshenger
|
git clone ://github.com/rscmbbng/meshenger /root/meshenger
|
||||||
|
|
||||||
mv uhttpd /etc/config/uhttpd
|
mv uhttpd /etc/config/uhttpd
|
||||||
|
|
||||||
mv meshenger /etc/init.d/meshenger
|
mv meshenger /etc/init.d/meshenger
|
||||||
|
/etc/init.d/meshenger enable
|
||||||
|
|
||||||
echo 'my ip address is:' #klopt nog niet
|
echo 'my ip address is:' #klopt nog niet
|
||||||
ifconfig br-lan | grep 'inet addr'
|
ifconfig br-lan | grep 'inet addr'
|
||||||
|
4
log/.gitignore
vendored
Normal file
4
log/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# Ignore everything in this directory
|
||||||
|
*
|
||||||
|
# Except this file
|
||||||
|
!.gitignore
|
62
main.py
62
main.py
@ -1,6 +1,9 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
|
||||||
import socket, os, time, select, urllib, sys, threading
|
import socket, os, time, select, urllib, sys, threading, json, logging, logging.config
|
||||||
|
|
||||||
|
logging.config.fileConfig('pylog.conf')
|
||||||
|
logger = logging.getLogger('meshenger'+'.main')
|
||||||
|
|
||||||
class Meshenger:
|
class Meshenger:
|
||||||
devices = {} #the dictionary of all the nodes this this node has seen
|
devices = {} #the dictionary of all the nodes this this node has seen
|
||||||
@ -22,7 +25,7 @@ class Meshenger:
|
|||||||
|
|
||||||
if not os.path.exists(self.msg_dir):
|
if not os.path.exists(self.msg_dir):
|
||||||
os.mkdir(self.msg_dir)
|
os.mkdir(self.msg_dir)
|
||||||
print 'Making message directory'
|
logger.info('Making message directory')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
d = threading.Thread(target=self.discover)
|
d = threading.Thread(target=self.discover)
|
||||||
@ -48,7 +51,7 @@ class Meshenger:
|
|||||||
#os.system("python meshenger_clientserve.py")
|
#os.system("python meshenger_clientserve.py")
|
||||||
|
|
||||||
except (KeyboardInterrupt, SystemExit):
|
except (KeyboardInterrupt, SystemExit):
|
||||||
print 'exiting discovery thread'
|
logger.info('exiting discovery thread')
|
||||||
d.join()
|
d.join()
|
||||||
a.join()
|
a.join()
|
||||||
b.join()
|
b.join()
|
||||||
@ -57,31 +60,31 @@ class Meshenger:
|
|||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
print 'Entering main loop'
|
logger.debug('Entering main loop')
|
||||||
#
|
#
|
||||||
if len(self.devices) > 0:
|
if len(self.devices) > 0:
|
||||||
print 'found', len(self.devices),'device(s)'
|
logger.info('found %s device(s)', len(self.devices))
|
||||||
|
|
||||||
for device in self.devices.keys():
|
for device in self.devices.keys():
|
||||||
nodepath = self.ip_to_hash_path(device) #make a folder for the node (nodes/'hash'/)
|
nodehash = self.hasj(device)
|
||||||
nodeupdatepath = os.path.join(self.ip_to_hash_path(device), 'lastupdate')
|
nodepath = os.path.join(os.path.abspath('nodes'), nodehash)
|
||||||
|
nodeupdatepath = os.path.join(nodepath, 'lastupdate')
|
||||||
|
|
||||||
|
logger.info('Checking age of foreign node index')
|
||||||
print 'Checking age of foreign node index'
|
logger.info('%s Foreign announce timestamp', self.devices[device])
|
||||||
print self.devices[device], 'Foreign announce timestamp'
|
|
||||||
try:
|
try:
|
||||||
foreign_node_update = open(nodeupdatepath).read()
|
foreign_node_update = open(nodeupdatepath).read()
|
||||||
except:
|
except:
|
||||||
foreign_node_update = 0 #means it was never seen before
|
foreign_node_update = 0 #means it was never seen before
|
||||||
|
|
||||||
print foreign_node_update, 'Locally stored timestamp for device'
|
logger.info('%s Locally stored timestamp for device', foreign_node_update)
|
||||||
|
|
||||||
|
|
||||||
if self.devices[device] > foreign_node_update:
|
if self.devices[device] > foreign_node_update:
|
||||||
print 'Foreign node"s index is newer, proceed to download index'
|
logger.info('Foreign node"s index is newer, proceed to download index')
|
||||||
self.get_index(device, nodepath)
|
self.get_index(device, nodepath)
|
||||||
print 'downloading messages'
|
logger.info('downloading messages')
|
||||||
self.get_messages(device, nodepath)
|
self.get_messages(device, nodepath, nodehash)
|
||||||
self.node_timestamp(device)
|
self.node_timestamp(device)
|
||||||
|
|
||||||
time.sleep(5) #free process or ctrl+c
|
time.sleep(5) #free process or ctrl+c
|
||||||
@ -99,7 +102,7 @@ class Meshenger:
|
|||||||
"""
|
"""
|
||||||
Announce the node's existance to other nodes
|
Announce the node's existance to other nodes
|
||||||
"""
|
"""
|
||||||
print 'Announcing'
|
logger.info('Announcing')
|
||||||
while not self.exitapp:
|
while not self.exitapp:
|
||||||
sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
||||||
sock.sendto(self.index_last_update, ("ff02::1", self.announce_port))
|
sock.sendto(self.index_last_update, ("ff02::1", self.announce_port))
|
||||||
@ -120,7 +123,7 @@ Discover other devices by listening to the Meshenger announce port
|
|||||||
while not self.exitapp:
|
while not self.exitapp:
|
||||||
result = select.select([s],[],[])[0][0].recvfrom(bufferSize)
|
result = select.select([s],[],[])[0][0].recvfrom(bufferSize)
|
||||||
ip = result[1][0]
|
ip = result[1][0]
|
||||||
print ip, "*"*45
|
logger.info('%s %s', ip, "*"*45)
|
||||||
node_path = os.path.join(os.path.abspath('nodes'), self.hasj(ip))
|
node_path = os.path.join(os.path.abspath('nodes'), self.hasj(ip))
|
||||||
|
|
||||||
if not os.path.exists(node_path) and ip != self.own_ip:
|
if not os.path.exists(node_path) and ip != self.own_ip:
|
||||||
@ -128,10 +131,10 @@ Discover other devices by listening to the Meshenger announce port
|
|||||||
self.ip_to_hash_path(ip) #make a folder /nodes/hash
|
self.ip_to_hash_path(ip) #make a folder /nodes/hash
|
||||||
self.devices[ip] = result[0]
|
self.devices[ip] = result[0]
|
||||||
#self.node_timestamp(ip) #make a local copy of the timestamp in /nodes/hash/updatetimestamp
|
#self.node_timestamp(ip) #make a local copy of the timestamp in /nodes/hash/updatetimestamp
|
||||||
print 'New node', ip
|
logger.info('New node %s', ip)
|
||||||
|
|
||||||
elif os.path.exists(node_path) and ip != self.own_ip:
|
elif os.path.exists(node_path) and ip != self.own_ip:
|
||||||
print 'Known node', ip
|
logger.info('Known node %s', ip)
|
||||||
self.devices[ip] = result[0]
|
self.devices[ip] = result[0]
|
||||||
|
|
||||||
|
|
||||||
@ -141,7 +144,7 @@ Discover other devices by listening to the Meshenger announce port
|
|||||||
"""
|
"""
|
||||||
Initialize the nodeserver
|
Initialize the nodeserver
|
||||||
"""
|
"""
|
||||||
print 'Serving to nodes'
|
logger.info('Serving to nodes')
|
||||||
import meshenger_nodeserve
|
import meshenger_nodeserve
|
||||||
meshenger_nodeserve.main()
|
meshenger_nodeserve.main()
|
||||||
|
|
||||||
@ -149,7 +152,7 @@ Initialize the nodeserver
|
|||||||
"""
|
"""
|
||||||
Initialize the clientserver
|
Initialize the clientserver
|
||||||
"""
|
"""
|
||||||
print 'Serving to client'
|
logger.info('Serving to client')
|
||||||
import meshenger_clientserve
|
import meshenger_clientserve
|
||||||
meshenger_clientserve.main()
|
meshenger_clientserve.main()
|
||||||
|
|
||||||
@ -160,7 +163,7 @@ Make an index file of all the messages present on the node.
|
|||||||
Save the time of the last update.
|
Save the time of the last update.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
print 'Building own index for the first time\n'
|
logger.info('Building own index for the first time\n')
|
||||||
|
|
||||||
if not os.path.exists('index'):
|
if not os.path.exists('index'):
|
||||||
with open('index','wb') as index:
|
with open('index','wb') as index:
|
||||||
@ -178,7 +181,7 @@ Save the time of the last update.
|
|||||||
index.write('\n')
|
index.write('\n')
|
||||||
self.index_last_update = str(int(time.time()))
|
self.index_last_update = str(int(time.time()))
|
||||||
|
|
||||||
print 'Index updated:', current_index
|
logger.info('Index updated: %s', current_index)
|
||||||
|
|
||||||
with open('index_last_update', 'wb') as indexupdate:
|
with open('index_last_update', 'wb') as indexupdate:
|
||||||
indexupdate.write(self.index_last_update) ### misschien moet dit index_last_update zijn
|
indexupdate.write(self.index_last_update) ### misschien moet dit index_last_update zijn
|
||||||
@ -194,7 +197,7 @@ Download the indices from other nodes.
|
|||||||
os.system('wget http://['+ip+'%adhoc0]:'+self.serve_port+'/index -O '+os.path.join(path,'index'))
|
os.system('wget http://['+ip+'%adhoc0]:'+self.serve_port+'/index -O '+os.path.join(path,'index'))
|
||||||
|
|
||||||
|
|
||||||
def get_messages(self, ip, path):
|
def get_messages(self, ip, path, hash):
|
||||||
"""
|
"""
|
||||||
Get new messages from other node based on it's index file
|
Get new messages from other node based on it's index file
|
||||||
"""
|
"""
|
||||||
@ -204,10 +207,16 @@ Get new messages from other node based on it's index file
|
|||||||
for message in index:
|
for message in index:
|
||||||
messagepath = os.path.join(os.path.abspath(self.msg_dir), message)
|
messagepath = os.path.join(os.path.abspath(self.msg_dir), message)
|
||||||
if not os.path.exists(messagepath):
|
if not os.path.exists(messagepath):
|
||||||
print 'downloading', message, 'to', messagepath
|
logger.info('downloading %s to %s', message, messagepath)
|
||||||
os.system('wget http://['+ip+'%adhoc0]:'+self.serve_port+'/msg/'+message+' -O '+messagepath)
|
os.system('wget http://['+ip+'%adhoc0]:'+self.serve_port+'/msg/'+message+' -O '+messagepath)
|
||||||
|
with open(messagepath, 'r+') as f:
|
||||||
|
data=json.load(f)
|
||||||
|
data['hops']=str(int(data['hops'])+1)
|
||||||
|
data['node']=hash
|
||||||
|
f.seek(0)
|
||||||
|
json.dump(data, f)
|
||||||
except:
|
except:
|
||||||
print 'Failed to download messages'
|
logger.info('Failed to download messages')
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def ip_to_hash_path(self, ip):
|
def ip_to_hash_path(self, ip):
|
||||||
@ -223,6 +232,7 @@ Convert a node's ip into a hash and make a directory to store it's files
|
|||||||
|
|
||||||
return nodepath
|
return nodepath
|
||||||
|
|
||||||
|
|
||||||
def hasj(self, ip):
|
def hasj(self, ip):
|
||||||
"""
|
"""
|
||||||
Convert a node's ip into a hash
|
Convert a node's ip into a hash
|
||||||
@ -243,7 +253,7 @@ Hack to adhoc0's inet6 adress
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
print "test"
|
logger.info("starting main...")
|
||||||
try:
|
try:
|
||||||
meshenger = Meshenger()
|
meshenger = Meshenger()
|
||||||
except (KeyboardInterrupt, SystemExit):
|
except (KeyboardInterrupt, SystemExit):
|
||||||
|
@ -8,6 +8,10 @@ from BaseHTTPServer import HTTPServer
|
|||||||
import SimpleHTTPServer
|
import SimpleHTTPServer
|
||||||
import urlparse
|
import urlparse
|
||||||
import unicodedata
|
import unicodedata
|
||||||
|
import logging, logging.config
|
||||||
|
|
||||||
|
logging.config.fileConfig('pylog.conf')
|
||||||
|
logger = logging.getLogger('meshenger'+'.clientserve')
|
||||||
|
|
||||||
|
|
||||||
class ClientServeHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
class ClientServeHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
||||||
@ -23,14 +27,20 @@ class ClientServeHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
|||||||
self.send_response(200)
|
self.send_response(200)
|
||||||
self.send_header('Content-type', 'text/html')
|
self.send_header('Content-type', 'text/html')
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
|
f = os.path.relpath('webapp.html')
|
||||||
f = os.path.join('/root/meshenger/',"webapp.html")
|
# f = os.path.join('/root/meshenger/',"webapp.html")
|
||||||
with open( f, 'r') as the_file:
|
with open( f, 'r') as the_file:
|
||||||
self.wfile.write(the_file.read())
|
self.wfile.write(the_file.read())
|
||||||
|
|
||||||
elif self.path == '/index' or self.path.startswith( "/"+self.messageDir ):
|
elif self.path == '/index' or self.path.startswith( "/"+self.messageDir ):
|
||||||
return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
|
return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
|
||||||
|
elif self.path == '/log':
|
||||||
|
self.send_response(200)
|
||||||
|
self.send_header('Content-type', 'text-html')
|
||||||
|
self.end_headers()
|
||||||
|
f = os.path.relpath('log/meshenger.log')
|
||||||
|
with open( f, 'r') as the_file:
|
||||||
|
self.wfile.write(the_file.read())
|
||||||
else:
|
else:
|
||||||
self.send_response(200) #serve the webapp on every url requested
|
self.send_response(200) #serve the webapp on every url requested
|
||||||
self.send_header('Content-type', 'text/html')
|
self.send_header('Content-type', 'text/html')
|
||||||
|
@ -7,6 +7,11 @@ import socket
|
|||||||
import BaseHTTPServer
|
import BaseHTTPServer
|
||||||
import SimpleHTTPServer
|
import SimpleHTTPServer
|
||||||
import urlparse
|
import urlparse
|
||||||
|
import logging
|
||||||
|
import logging.config
|
||||||
|
|
||||||
|
logging.config.fileConfig('pylog.conf')
|
||||||
|
logger = logging.getLogger('meshenger'+'.nodeserve')
|
||||||
|
|
||||||
#GOTTMITTUNS
|
#GOTTMITTUNS
|
||||||
|
|
||||||
|
34
pylog.conf
Normal file
34
pylog.conf
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[loggers]
|
||||||
|
keys=root,meshenger
|
||||||
|
|
||||||
|
[handlers]
|
||||||
|
keys=consoleHandler, fileHandler
|
||||||
|
|
||||||
|
[formatters]
|
||||||
|
keys=simpleFormatter
|
||||||
|
|
||||||
|
[logger_root]
|
||||||
|
level=DEBUG
|
||||||
|
handlers=consoleHandler
|
||||||
|
|
||||||
|
[logger_meshenger]
|
||||||
|
level=DEBUG
|
||||||
|
handlers=consoleHandler, fileHandler
|
||||||
|
qualname=meshenger
|
||||||
|
propagate=0
|
||||||
|
|
||||||
|
[handler_fileHandler]
|
||||||
|
class=handlers.RotatingFileHandler
|
||||||
|
level=INFO
|
||||||
|
args=('log/meshenger.log','a','maxBytes=10000','backupCount=5')
|
||||||
|
formatter=simpleFormatter
|
||||||
|
|
||||||
|
[handler_consoleHandler]
|
||||||
|
class=StreamHandler
|
||||||
|
level=DEBUG
|
||||||
|
formatter=simpleFormatter
|
||||||
|
args=(sys.stdout,)
|
||||||
|
|
||||||
|
[formatter_simpleFormatter]
|
||||||
|
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
|
||||||
|
datefmt=
|
70
webapp.html
70
webapp.html
@ -110,7 +110,7 @@
|
|||||||
//background:-moz-linear-gradient(top, #fff, #eee);
|
//background:-moz-linear-gradient(top, #fff, #eee);
|
||||||
}
|
}
|
||||||
#outbox{
|
#outbox{
|
||||||
display:hidden;
|
display:none;
|
||||||
}
|
}
|
||||||
#header{
|
#header{
|
||||||
width:100%;
|
width:100%;
|
||||||
@ -118,6 +118,9 @@
|
|||||||
}
|
}
|
||||||
#name{
|
#name{
|
||||||
|
|
||||||
|
}
|
||||||
|
.hops .node{
|
||||||
|
// display:hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
@ -142,8 +145,6 @@
|
|||||||
<option value="dateSend">Sort by Date Send</option>
|
<option value="dateSend">Sort by Date Send</option>
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
<ul id="inbox"></ul>
|
<ul id="inbox"></ul>
|
||||||
|
|
||||||
<!--<h2>outbox</h2>-->
|
<!--<h2>outbox</h2>-->
|
||||||
@ -152,6 +153,7 @@
|
|||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
localStorage.clear();
|
||||||
/*
|
/*
|
||||||
* OUTBOX STUFF
|
* OUTBOX STUFF
|
||||||
*/
|
*/
|
||||||
@ -165,8 +167,18 @@ document.getElementById( 'send' ).onclick = function() {
|
|||||||
var namm= document.getElementById('name').value;
|
var namm= document.getElementById('name').value;
|
||||||
}
|
}
|
||||||
var mess = document.getElementById('message').value.replace(/\r?\n/g, "<br />");
|
var mess = document.getElementById('message').value.replace(/\r?\n/g, "<br />");
|
||||||
outStr += new Date().getTime() + ' ' + namm + '///' + mess + '\n';
|
var newMsgs ={};
|
||||||
localStorage.setItem( 'outbox', outStr );
|
var ddata= new Date().getTime();
|
||||||
|
var contento = {
|
||||||
|
"time" : ddata,
|
||||||
|
"message" : mess,
|
||||||
|
"name" : namm,
|
||||||
|
"node" : "local",
|
||||||
|
"hops" : "0"
|
||||||
|
}
|
||||||
|
newMsgs.message = contento;
|
||||||
|
|
||||||
|
localStorage.setItem( 'outbox', JSON.stringify(newMsgs) );
|
||||||
updateOutboxView();
|
updateOutboxView();
|
||||||
checkOutbox();
|
checkOutbox();
|
||||||
document.getElementById('message').value = '';
|
document.getElementById('message').value = '';
|
||||||
@ -181,8 +193,10 @@ function checkOutbox() {
|
|||||||
if ( lines[i].length === 0 ) {
|
if ( lines[i].length === 0 ) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
var ts = lines[ i ].substr( 0, lines[ i ].indexOf( ' ' ));
|
var obj = JSON.parse(lines[i]);
|
||||||
var msg = lines[ i ].substr( lines[ i ].indexOf( ' ' ));
|
var ts = obj.message.time;
|
||||||
|
delete obj.message.time;
|
||||||
|
var msg = JSON.stringify(obj.message);
|
||||||
sendMessage( ts, msg );
|
sendMessage( ts, msg );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -208,7 +222,8 @@ function removeOutboxItem( timestamp ) {
|
|||||||
var outStr = localStorage.getItem( 'outbox' ) || '';
|
var outStr = localStorage.getItem( 'outbox' ) || '';
|
||||||
var lines = outStr.split( /\n/ );
|
var lines = outStr.split( /\n/ );
|
||||||
for ( var i in lines ) {
|
for ( var i in lines ) {
|
||||||
var ts = lines[ i ].substr( 0, lines[ i ].indexOf( ' ' ));
|
var obj = JSON.parse(lines[i]);
|
||||||
|
var ts = obj.message.time;
|
||||||
if ( ts === timestamp ) {
|
if ( ts === timestamp ) {
|
||||||
lines.splice( i, 1 );
|
lines.splice( i, 1 );
|
||||||
break;
|
break;
|
||||||
@ -226,30 +241,21 @@ function updateOutboxView() {
|
|||||||
if ( lines[ i ].length === 0 ) {
|
if ( lines[ i ].length === 0 ) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
var ts = lines[ i ].substr( 0, lines[ i ].indexOf( ' ' ));
|
var obj = JSON.parse(lines[i]);
|
||||||
var msg = lines[ i ].substr( lines[ i ].indexOf( ' ' ));
|
var ts = obj.message.time;
|
||||||
|
delete obj.message.time;
|
||||||
|
var msg = JSON.stringify(obj.message);
|
||||||
|
|
||||||
contentString += '<li><b>' + ts + ' </b>' + msg + '</li>';
|
contentString += '<li><b>' + ts + ' </b>' + msg + '</li>';
|
||||||
}
|
}
|
||||||
document.getElementById( 'outbox' ).innerHTML = contentString;
|
document.getElementById( 'outbox' ).innerHTML = contentString;
|
||||||
}
|
}
|
||||||
|
|
||||||
function doStuffForEach( entriesString, stuffFunction ) {
|
|
||||||
if ( ! entriesString ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var lines = entriesString.split( /\n/ );
|
|
||||||
for ( var i in lines ) {
|
|
||||||
var ts = lines[ i ].substr( 0, lines[ i ].indexOf( ' ' ));
|
|
||||||
var msg = lines[ i ].substr( lines[ i ].indexOf( ' ' ) + 1 );
|
|
||||||
stuffFunction( ts, msg );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
* INBOX STUFF
|
* INBOX STUFF
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function updateInboxView() {
|
function updateInboxView() {
|
||||||
var localStorageArray = new Array();
|
var localStorageArray = new Array();
|
||||||
var contentString = '';
|
var contentString = '';
|
||||||
@ -257,15 +263,19 @@ function updateInboxView() {
|
|||||||
if (localStorage.length>0) {
|
if (localStorage.length>0) {
|
||||||
for (i=0;i<localStorage.length;i++){
|
for (i=0;i<localStorage.length;i++){
|
||||||
|
|
||||||
|
element=localStorage.getItem(localStorage.key(i));
|
||||||
|
|
||||||
element=localStorage.getItem(localStorage.key(i))
|
if ( localStorage.key(i).length < 10 || element === 'outbox' ) {
|
||||||
|
continue;
|
||||||
elesplit=element.split('///');
|
|
||||||
|
|
||||||
if ( localStorage.key(i).length === 0 || element === 'outbox' ) {
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
localStorageArray[i] = { time:localStorage.key(i), user:elesplit[0], message:elesplit[1] };
|
// alert(element);
|
||||||
|
try {
|
||||||
|
elementj = JSON.parse(element);
|
||||||
|
} catch (e) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
localStorageArray[i] = { time:localStorage.key(i), user:elementj.name, message:elementj.message, node:elementj.node, hops:elementj.hops };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
orderStorage = localStorageArray.sort(function(a,b) { return b.time - a.time } );
|
orderStorage = localStorageArray.sort(function(a,b) { return b.time - a.time } );
|
||||||
@ -278,7 +288,7 @@ function updateInboxView() {
|
|||||||
var date = new Date(parseInt(orderStorage[i].time));
|
var date = new Date(parseInt(orderStorage[i].time));
|
||||||
// date.setHours(date.getHours() + 2);
|
// date.setHours(date.getHours() + 2);
|
||||||
var datereadable = date.getDate()+"/"+(date.getMonth()+1)+"/"+date.getFullYear()+" "+date.getHours()+":"+date.getMinutes();
|
var datereadable = date.getDate()+"/"+(date.getMonth()+1)+"/"+date.getFullYear()+" "+date.getHours()+":"+date.getMinutes();
|
||||||
contentString += '<li><b>' + datereadable + ' </b>' + ' <i>'+ orderStorage[i].user +'</i><br/> '+orderStorage[i].message+'</li>';
|
contentString += '<li><b>' + datereadable + ' </b>' + ' <i>'+ orderStorage[i].user +'</i><br/> '+orderStorage[i].message+' <span class="node '+orderStorage[i].node+'">'+orderStorage[i].node+'</span> <span class="hops '+orderStorage[i].hops+'">'+orderStorage[i].hops+'</span></li>';
|
||||||
}
|
}
|
||||||
document.getElementById( 'inbox' ).innerHTML = contentString;
|
document.getElementById( 'inbox' ).innerHTML = contentString;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user