Skip to content

Commit

Permalink
update run ap signal
Browse files Browse the repository at this point in the history
  • Loading branch information
p-eli committed Oct 7, 2015
1 parent 99bf96c commit bceef17
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 63 deletions.
41 changes: 21 additions & 20 deletions createApGui/createEditAp.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/python3
__author__ = 'Jakub Pelikan'
from gi.repository import Gtk, Pango
from gi.repository import Gtk, Pango,GObject
from createApGui.terminalInterface import TerminalInterface
import re
class CreateEditAp(Gtk.Window):
Expand All @@ -23,7 +23,6 @@ def initWindow(self):
self.notebook = Gtk.Notebook()
self.add(self.notebook)
self.initStatusPage()
self.initInterfaceList()
self.initEditPage()
self.initCreatePage()
self.initSettingPage()
Expand All @@ -35,7 +34,7 @@ def initStatusPage(self):
table.set_row_spacings(5)
table.set_col_spacings(20)
#status label
self.statusTitleLabel = Gtk.Label(self.setting['runningAp'].status)
self.statusTitleLabel = Gtk.Label(self.setting['runningAp'].status['text'])
pangoFont = Pango.FontDescription("Sans 40")
self.statusTitleLabel.modify_font(pangoFont)
table.attach(self.statusTitleLabel, 0,3,0,3)
Expand Down Expand Up @@ -121,6 +120,11 @@ def initCreatePage(self):
self.notebook.append_page(table, Gtk.Label(self._('New AP')))

def initEditPage(self):
self.interfaceListSignal = GObject.GObject()
GObject.signal_new("interfaceListMsg", self.interfaceListSignal, GObject.SIGNAL_RUN_FIRST,
GObject.TYPE_NONE, ())
self.interfaceListSignal.connect('interfaceListMsg', self.readInterfaceList)
self.initInterfaceList()
table = Gtk.Table(10,3,True)
table.set_border_width(10)
table.set_row_spacings(10)
Expand Down Expand Up @@ -250,13 +254,12 @@ def createTextViewColumn(self, names):

def initInterfaceList(self):
self.interfaceListStore = Gtk.ListStore(str)
self.interface = TerminalInterface(self.readInterfaceList)
self.interface = TerminalInterface(self.interfaceListSignal, "interfaceListMsg")
self.interface.command = ['ifconfig']
self.interface.start()

def readInterfaceList(self):
def readInterfaceList(self, signal):
output = self.interface.read()

if self.interface.is_alive():
self.interface.stop()
interfacesList = []
Expand All @@ -268,7 +271,6 @@ def readInterfaceList(self):
for interfaceItem in interfacesList:
self.interfaceListStore.append([interfaceItem])


def refreshInterfaceList(self, button):
self.initInterfaceList()
self.interface1ComboBox.set_model(self.interfaceListStore)
Expand All @@ -282,9 +284,6 @@ def getComboBoxSelect(self, comboBox):
return None

def createAP(self, button=None, createAp=None):
if self.setting['runningAp'].errorMsg['newMsg']:
self.setting['runningAp'].stopAp()
self.setting['runningAp'].createNew()
if not self.setting['runningAp'].status['active']:
if createAp == None:
selection = self.treeview.get_selection()
Expand All @@ -299,16 +298,18 @@ def createAP(self, button=None, createAp=None):
self.sendErrorDialog(self._('AP is running'), self._('Before start new one, turn off running AP.'))
Gtk.Notebook.do_change_current_page(self.notebook,-self.notebook.get_current_page())

def updateStatusPage(self):
self.statusTitleLabel.set_text(self.setting['runningAp'].status['text'])
self.statusNameAp.set_text(self.setting['runningAp'].activeAp['name'])
self.statusInterface1.set_text(self.setting['runningAp'].activeAp['interface1'])
self.statusInterface2.set_text(self.setting['runningAp'].activeAp['interface2'])
self.statusReciving.set_text('None')
self.statusTotalReciving.set_text('None')
self.statusSending.set_text('None')
self.statusTotalSending.set_text('None')
self.connectDisconectButton.set_label(self.setting['runningAp'].status['button'])
def updateStatusPage(self, signal=None):
if self.statusTitleLabel.get_text() != self.setting['runningAp'].status['text']:
self.statusTitleLabel.set_text(self.setting['runningAp'].status['text'])
self.statusNameAp.set_text(self.setting['runningAp'].activeAp['name'])
self.statusInterface1.set_text(self.setting['runningAp'].activeAp['interface1'])
self.statusInterface2.set_text(self.setting['runningAp'].activeAp['interface2'])
self.statusReciving.set_text('None')
self.statusTotalReciving.set_text('None')
self.statusSending.set_text('None')
self.statusTotalSending.set_text('None')
self.connectDisconectButton.set_label(self.setting['runningAp'].status['button'])


def saveCreateAction(self, button=None):
try:
Expand Down
70 changes: 48 additions & 22 deletions createApGui/runningAp.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,53 +2,72 @@
__author__ = 'Jakub Pelikan'
from createApGui.terminalInterface import TerminalInterface
import threading
from gi.repository import GObject

class RunningAp():
def __init__(self, setting, tray=None, statusWindow=None):
self.setting = setting
self._ = self.setting['language'].gettext
self.__activeAp = {'name':'None', 'passwd':'None', 'interface1':'None', 'interface2':'None'}
self.status = {'active':False,'text':self._('No active AP'),'button':self._('Connect')}
self.errorMsg = {'newMsg':False,'title':None, 'text':None}
self.interface = TerminalInterface(self.newCmdMsg)
self.updatingPage = {'tray':tray, 'statusWindow':statusWindow}
self.lock = threading.Lock()
self.mysignal = GObject.GObject()
GObject.signal_new("newMsg", self.mysignal, GObject.SIGNAL_RUN_FIRST, GObject.TYPE_NONE, ())
GObject.signal_new("updateStatistic", self.mysignal, GObject.SIGNAL_RUN_FIRST, GObject.TYPE_NONE, ())
self.mysignal.connect('newMsg', self.newCmdMsg)
self.reInit()


def reInit(self):
self.lock.acquire()
self.__activeAp = {'name':'None', 'passwd':'None', 'interface1':'None', 'interface2':'None'}
self.__status = {'active':False,'text':self._('No active AP'),'button':self._('Connect')}
self.errorMsg = {'newMsg':False,'title':None, 'text':None}
self.interface = TerminalInterface(self.mysignal,'newMsg')
self.lock.release()

def runAp(self):
if self.__status['active']:
self.stopAp()
if self.errorMsg['newMsg']:
self.reInit()
self.lock.acquire()
if self.__activeAp['name']!='None':
self.interface.command = ['create_ap'+' '+self.__activeAp['interface1']+' '+self.__activeAp['interface2']+' '+self.__activeAp['name']+' '+self.__activeAp['passwd']]
self.interface.start()
self.status['text'] = self._('Creating AP...')
self.status['button'] = self._('Disconnect')
self.status['active'] = True
self.updatingStatus()
self.__status['text'] = self._('Creating AP...')
self.__status['button'] = self._('Disconnect')
self.__status['active'] = True

def createNew(self):
self.setting['runningAp'] = RunningAp(self.setting, tray=self.updatingPage['tray'],statusWindow=self.updatingPage['statusWindow'])
self.lock.release()
self.updatingStatus()

def stopAp(self):
self.lock.acquire()
self.interface.stop()
self.interface.stop()
self.createNew()
self.lock.release()
self.reInit()

def newCmdMsg(self):
def newCmdMsg(self, signal=None):
self.lock.acquire()
msg = self.interface.read()
if 'ERROR:' in msg or 'command not found' in msg:
self.errorMsg['newMsg'] = True
self.errorMsg['title'] = self._('Create failed')
self.errorMsg['text'] = msg
self.status['text'] = self._('AP Error')
self.status['button'] = self._('Error details')
self.status['active'] = False
self.__status['text'] = self._('AP Error')
self.__status['button'] = self._('Error details')
self.__status['active'] = False
elif 'AP-ENABLED' in msg:
self.status['text'] = self._('AP is active')
self.status['button'] = self._('Disconnect')
self.__status['text'] = self._('AP is active')
self.__status['button'] = self._('Disconnect')
elif 'INTERFACE-DISABLED' in msg:
self.status['text'] = self._('INTERFACE-DISABLED')
self.updatingStatus()
self.__status['text'] = self._('INTERFACE-DISABLED')
# elif 'AP-DISABLED' in msg or 'done' in msg:
# self.reInit()
# else:
# self.lock.release()
# return

self.lock.release()
self.updatingStatus()

def updatingStatus(self):
if self.updatingPage['statusWindow']:
Expand All @@ -66,3 +85,10 @@ def activeAp(self, data):
self.__activeAp['passwd'] = data[1]
self.__activeAp['interface1'] = data[2]
self.__activeAp['interface2'] = data[3]

@property
def status(self):
self.lock.acquire()
value = self.__status
self.lock.release()
return value
29 changes: 11 additions & 18 deletions createApGui/terminalInterface.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,23 @@
import os
import signal


class TerminalInterface(threading.Thread):

def __init__(self, aten=None):
def __init__(self, mySignal, signalMsg):
threading.Thread.__init__(self)
self.aten = aten
self.signalMsg = signalMsg
self.mySignal = mySignal
self.output = ''
self.errOutput = ''
self.p1 = None
self.lock = threading.Lock()
self.command = []
self.daemon = True

def run(self):
self.bashCommunicate()
self.lock.acquire()
if self.output != '':
self.lock.release()
import time
time.sleep(0.3)

def read(self):
self.lock.acquire()
Expand All @@ -32,19 +34,10 @@ def bashCommunicate(self):
self.lock.acquire()
self.output = self.output+'\n'+line.rstrip().decode('utf-8')
self.lock.release()
if self.aten != None:
self.aten()

def bashCommunicate1(self):
self.p1 = subprocess.Popen(self.command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
for line in self.p1.stdout:
self.lock.acquire()
self.output = self.output+'\n'+line.rstrip().decode('utf-8')
self.lock.release()
if self.aten != None:
self.aten()
self.mySignal.emit(self.signalMsg)

def stop(self):
if self.p1 != None:
os.kill(self.p1.pid, signal.SIGINT)
self.p1 = None
self.p1 = None

6 changes: 3 additions & 3 deletions createApGui/trayRightClickMenu.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ def initApList(self, menu):
self.createMenuItem(item[0], self.createAp, menu)

def createAp(self, button):
if self.setting['runningAp'].errorMsg['newMsg'] or self.setting['runningAp'].status['active']:
self.setting['runningAp'].stopAp()
if not self.setting['runningAp'].status['active']:
# if self.setting['runningAp'].errorMsg['newMsg'] or self.setting['runningAp'].status['active']:
# self.setting['runningAp'].stopAp()
#if not self.setting['runningAp'].status['active']:
self.setting['runningAp'].activeAp = self.setting['userSetting'].searchAp(button.get_label())
self.setting['runningAp'].runAp()

Expand Down

0 comments on commit bceef17

Please sign in to comment.