diff --git a/onionr/default-plugins/gui/main.py b/onionr/default-plugins/gui/main.py
new file mode 100644
index 00000000..dcd87f89
--- /dev/null
+++ b/onionr/default-plugins/gui/main.py
@@ -0,0 +1,119 @@
+#!/usr/bin/python
+'''
+ Onionr - P2P Microblogging Platform & Social network
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+'''
+
+# Imports some useful libraries
+import logger, config
+from tkinter import *
+import os, sqlite3, core
+
+def sendMessage():
+ global sendEntry
+
+ messageToAdd = '-txt-' + sendEntry.get()
+ addedHash = pluginapi.get_core().setData(messageToAdd)
+ pluginapi.get_core().addToBlockDB(addedHash, selfInsert=True)
+ pluginapi.get_core().setBlockType(addedHash, 'txt')
+ sendEntry.delete(0, END)
+
+def update():
+ global listedBlocks, listbox, runningCheckDelayCount, runningCheckDelay, root, daemonStatus
+
+
+ for i in pluginapi.get_core().getBlocksByType('txt'):
+ if i.strip() == '' or i in listedBlocks:
+ continue
+ blockFile = open('./data/blocks/' + i + '.dat')
+ listbox.insert(END, str(blockFile.read().replace('-txt-', '')))
+ blockFile.close()
+ listedBlocks.append(i)
+ listbox.see(END)
+ blocksList = os.listdir('./data/blocks/') # dir is your directory path
+ number_blocks = len(blocksList)
+ runningCheckDelayCount += 1
+
+ if runningCheckDelayCount == runningCheckDelay:
+ resp = pluginapi.get_core()._utils.localCommand('ping')
+ if resp == 'pong':
+ daemonStatus.config(text="Onionr Daemon Status: Running")
+ else:
+ daemonStatus.config(text="Onionr Daemon Status: Not Running")
+ runningCheckDelayCount = 0
+ root.after(10000, update)
+
+
+def openGUI():
+ global root, runningCheckDelay, runningCheckDelayCount, scrollbar, listedBlocks, nodeInfo, keyInfo, idText, idEntry, pubKeyEntry, listbox, daemonStatus, sendEntry
+
+ root = Tk()
+
+ root.title("Onionr GUI")
+
+ runningCheckDelay = 5
+ runningCheckDelayCount = 4
+
+ scrollbar = Scrollbar(root)
+ scrollbar.pack(side=RIGHT, fill=Y)
+
+ listedBlocks = []
+
+ nodeInfo = Frame(root)
+ keyInfo = Frame(root)
+
+ idText = pluginapi.get_onionr().get_hostname()
+
+ idEntry = Entry(nodeInfo)
+ Label(nodeInfo, text="Node Address: ").pack(side=LEFT)
+ idEntry.pack()
+ idEntry.insert(0, idText.strip())
+ idEntry.configure(state="readonly")
+
+ nodeInfo.pack()
+
+ pubKeyEntry = Entry(keyInfo)
+
+ Label(keyInfo, text="Public key: ").pack(side=LEFT)
+
+ pubKeyEntry.pack()
+ pubKeyEntry.insert(0, pluginapi.get_core()._crypto.pubKey)
+ pubKeyEntry.configure(state="readonly")
+
+ keyInfo.pack()
+
+ sendEntry = Entry(root)
+ sendBtn = Button(root, text='Send Message', command=sendMessage)
+ sendEntry.pack(side=TOP, pady=5)
+ sendBtn.pack(side=TOP)
+
+ listbox = Listbox(root, yscrollcommand=scrollbar.set, height=15)
+
+ listbox.pack(fill=BOTH, pady=25)
+
+ daemonStatus = Label(root, text="Onionr Daemon Status: unknown")
+ daemonStatus.pack()
+
+ scrollbar.config(command=listbox.yview)
+ root.after(2000, update)
+ root.mainloop()
+
+def on_init(api, data = None):
+ global pluginapi
+ pluginapi = api
+
+ api.commands.register(['gui', 'launch-gui', 'open-gui'], openGUI)
+ api.commands.register_help('gui', 'Opens a graphical interface for Onionr')
+
+ return
diff --git a/onionr/gui.py b/onionr/gui.py
deleted file mode 100755
index 644ae5c2..00000000
--- a/onionr/gui.py
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/python
-'''
- Onionr - P2P Microblogging Platform & Social network
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-'''
-
-from tkinter import *
-import os, sqlite3, core
-
-class OnionrGUI:
- def __init__(self, myCore):
- self.root = Tk()
-
- self.myCore = myCore # onionr core
- self.root.title("PyOnionr")
-
- self.runningCheckDelay = 5
- self.runningCheckDelayCount = 4
-
- scrollbar = Scrollbar(self.root)
- scrollbar.pack(side=RIGHT, fill=Y)
-
- self.listedBlocks = []
-
- self.nodeInfo = Frame(self.root)
- self.keyInfo = Frame(self.root)
-
- idText = open('./data/hs/hostname', 'r').read()
- #idLabel = Label(self.info, text="Node Address: " + idText)
- #idLabel.pack(pady=5)
-
- idEntry = Entry(self.nodeInfo)
- Label(self.nodeInfo, text="Node Address: ").pack(side=LEFT)
- idEntry.pack()
- idEntry.insert(0, idText.strip())
- idEntry.configure(state="readonly")
-
- self.nodeInfo.pack()
-
- pubKeyEntry = Entry(self.keyInfo)
-
- Label(self.keyInfo, text="Public key: ").pack(side=LEFT)
-
- pubKeyEntry.pack()
- pubKeyEntry.insert(0, self.myCore._crypto.pubKey)
- pubKeyEntry.configure(state="readonly")
-
- self.keyInfo.pack()
-
- self.sendEntry = Entry(self.root)
- sendBtn = Button(self.root, text='Send Message', command=self.sendMessage)
- self.sendEntry.pack(side=TOP, pady=5)
- sendBtn.pack(side=TOP)
-
- self.listbox = Listbox(self.root, yscrollcommand=scrollbar.set, height=15)
-
- #listbox.insert(END, str(i))
- self.listbox.pack(fill=BOTH, pady=25)
-
- self.daemonStatus = Label(self.root, text="Onionr Daemon Status: unknown")
- self.daemonStatus.pack()
-
- scrollbar.config(command=self.listbox.yview)
- self.root.after(2000, self.update)
- self.root.mainloop()
-
- def sendMessage(self):
- messageToAdd = '-txt-' + self.sendEntry.get()
- addedHash = self.myCore.setData(messageToAdd)
- self.myCore.addToBlockDB(addedHash, selfInsert=True)
- self.myCore.setBlockType(addedHash, 'txt')
- self.sendEntry.delete(0, END)
-
- def update(self):
- for i in self.myCore.getBlocksByType('txt'):
- if i.strip() == '' or i in self.listedBlocks:
- continue
- blockFile = open('./data/blocks/' + i + '.dat')
- self.listbox.insert(END, str(blockFile.read().replace('-txt-', '')))
- blockFile.close()
- self.listedBlocks.append(i)
- self.listbox.see(END)
- blocksList = os.listdir('./data/blocks/') # dir is your directory path
- number_blocks = len(blocksList)
- self.runningCheckDelayCount += 1
-
- if self.runningCheckDelayCount == self.runningCheckDelay:
- if self.myCore._utils.localCommand('ping') == 'pong':
- self.daemonStatus.config(text="Onionr Daemon Status: Running")
- else:
- self.daemonStatus.config(text="Onionr Daemon Status: Not Running")
- self.runningCheckDelayCount = 0
- self.root.after(10000, self.update)
diff --git a/onionr/onionr.py b/onionr/onionr.py
index 321904c8..8e2f4888 100755
--- a/onionr/onionr.py
+++ b/onionr/onionr.py
@@ -22,6 +22,7 @@
'''
import sys, os, base64, random, getpass, shutil, subprocess, requests, time, platform, datetime, re
+from threading import Thread
import api, core, config, logger, onionrplugins as plugins, onionrevents as events
from onionrutils import OnionrUtils
from netcontroller import NetController
@@ -31,12 +32,6 @@ try:
except ImportError:
raise Exception("You need the PySocks module (for use with socks5 proxy to use Tor)")
-try:
- import gui
-except ImportError:
- logger.error('You need python3 tkinter and tk installed to use Onionr.')
- sys.exit(1)
-
ONIONR_TAGLINE = 'Anonymous P2P Platform - GPLv3 - https://Onionr.VoidNet.Tech'
ONIONR_VERSION = '0.0.0' # for debugging and stuff
API_VERSION = '1' # increments of 1; only change when something fundemental about how the API works changes. This way other nodes knows how to communicate without learning too much information about you.
@@ -171,8 +166,6 @@ class Onionr:
'getpms': self.getPMs,
'get-pms': self.getPMs,
- 'gui': self.openGUI,
-
'addpeer': self.addPeer,
'add-peer': self.addPeer,
'add-address': self.addAddress,
@@ -200,7 +193,6 @@ class Onionr:
'add-msg': 'Broadcasts a message to the Onionr network',
'pm': 'Adds a private message to block',
'get-pms': 'Shows private messages sent to you',
- 'gui': 'Opens a graphical interface for Onionr',
'introduce': 'Introduce your node to the public Onionr network (DAEMON MUST BE RUNNING)',
}
@@ -319,13 +311,6 @@ class Onionr:
self.onionrUtils.sendPM(peer, message)
- def openGUI(self):
- '''
- Opens a graphical interface for Onionr
- '''
-
- gui.OnionrGUI(self.onionrCore)
-
def listKeys(self):
'''
Displays a list of keys (used to be called peers) (?)
@@ -476,7 +461,7 @@ class Onionr:
logger.info('Do ' + logger.colors.bold + sys.argv[0] + ' --help' + logger.colors.reset + logger.colors.fg.green + ' for Onionr help.')
- def start(self):
+ def start(self, input = False):
'''
Starts the Onionr daemon
'''
@@ -488,7 +473,9 @@ class Onionr:
lockFile = open('.onionr-lock', 'w')
lockFile.write('')
lockFile.close()
+ self.running = True
self.daemon()
+ self.running = False
if not self.debug and not self._developmentMode:
os.remove('.onionr-lock')
@@ -550,13 +537,16 @@ class Onionr:
self.showHelp(cmd)
elif not command is None:
if command.lower() in helpmenu:
- logger.info(logger.colors.bold + command + logger.colors.reset + logger.colors.fg.blue + ' : ' + logger.colors.reset + helpmenu[command.lower()])
+ logger.info(logger.colors.bold + command + logger.colors.reset + logger.colors.fg.blue + ' : ' + logger.colors.reset + helpmenu[command.lower()], timestamp = False)
else:
- logger.warn(logger.colors.bold + command + logger.colors.reset + logger.colors.fg.blue + ' : ' + logger.colors.reset + 'No help menu entry was found')
+ logger.warn(logger.colors.bold + command + logger.colors.reset + logger.colors.fg.blue + ' : ' + logger.colors.reset + 'No help menu entry was found', timestamp = False)
else:
self.version(0)
for command, helpmessage in helpmenu.items():
self.showHelp(command)
return
+ def get_hostname(self):
+ return open('./data/hs/hostname', 'r').read()
+
Onionr()