Skip to content

Commit d5b32ab

Browse files
committed
Handle network errors when turning on the machines
1 parent 6ec99a2 commit d5b32ab

File tree

1 file changed

+22
-12
lines changed

1 file changed

+22
-12
lines changed

gwakeonlan/ui/main.py

+22-12
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
# You should have received a copy of the GNU General Public License
1818
# along with this program. If not, see <https://www.gnu.org/licenses/>.
1919
##
20-
20+
import logging
2121
import time
2222

2323
from gi.repository import Gdk
@@ -72,6 +72,7 @@ def __init__(self, application, options):
7272
True, 8, 24, 24)
7373
self.icon_empty.fill(0)
7474
self.icon_yes = get_pixbuf_from_icon_name('gtk-yes', 24)
75+
self.icon_no = get_pixbuf_from_icon_name('gtk-no', 24)
7576
# Load hosts
7677
self.settings.load_hosts(model=self.model,
7778
icon=self.icon_empty)
@@ -169,6 +170,23 @@ def do_autotests(self):
169170
# Close the main window
170171
self.ui.window.destroy()
171172

173+
def do_turn_on(self, treeiter):
174+
"""Turn on the machine for the specified TreeIter"""
175+
try:
176+
mac_address = self.model.get_mac_address(treeiter)
177+
port_number = self.model.get_port_number(treeiter)
178+
destination = self.model.get_destination(treeiter)
179+
wake_on_lan(mac_address=mac_address,
180+
port_number=port_number,
181+
destination=destination)
182+
self.model.set_icon(treeiter, self.icon_yes)
183+
except OSError as error:
184+
logging.error(f'Unable to turn on: {mac_address} '
185+
f'through {destination} '
186+
f'using port number {port_number}')
187+
logging.error(error)
188+
self.model.set_icon(treeiter, self.icon_no)
189+
172190
def on_window_delete_event(self, widget, event):
173191
"""Close the application by closing the main window"""
174192
self.ui.action_quit.emit('activate')
@@ -253,23 +271,15 @@ def on_action_turnon_activate(self, widget):
253271
for treeiter in self.model:
254272
self.model.set_icon(treeiter, self.icon_empty)
255273
for treeiter in self.model:
274+
# Turn on any selected machine
256275
if self.model.get_selected(treeiter):
257-
# If a machine was selected then it will turned on
258276
selected_count += 1
259-
wake_on_lan(
260-
mac_address=self.model.get_mac_address(treeiter),
261-
port_number=self.model.get_port_number(treeiter),
262-
destination=self.model.get_destination(treeiter))
263-
self.model.set_icon(treeiter, self.icon_yes)
277+
self.do_turn_on(treeiter)
264278
if selected_count == 0:
265279
# When no machines are selected use the currently selected row
266280
treeiter = get_treeview_selected_row(self.ui.treeview_machines)
267281
if treeiter:
268-
wake_on_lan(
269-
mac_address=self.model.get_mac_address(treeiter),
270-
port_number=self.model.get_port_number(treeiter),
271-
destination=self.model.get_destination(treeiter))
272-
self.model.set_icon(treeiter, self.icon_yes)
282+
self.do_turn_on(treeiter)
273283

274284
def on_action_import_arp_cache_activate(self, widget):
275285
"""Show the ARP cache picker dialog"""

0 commit comments

Comments
 (0)