=== modified file 'sabnzbd/__init__.py' --- sabnzbd/__init__.py 2009-09-25 14:17:51 +0000 +++ sabnzbd/__init__.py 2009-09-25 16:16:40 +0000 @@ -36,7 +36,7 @@ #------------------------------------------------------------------------ # Determine platform flags -WIN32 = DARWIN = DARWIN_INTEL = POSIX = FOUNDATION = WIN64 = False +WIN32 = DARWIN = DARWIN_INTEL = LINUX = POSIX = FOUNDATION = WIN64 = False KERNEL32 = None if os.name == 'nt': @@ -58,6 +58,8 @@ pass if platform.machine() == 'i386': DARWIN_INTEL = True + elif platform.system().lower() == 'linux': + LINUX = True #------------------------------------------------------------------------ @@ -484,13 +486,49 @@ os._exit(0) elif DARWIN: - Thread(target=halt).start() - while __INITIALIZED__: - time.sleep(1.0) try: subprocess.call(['osascript', '-e', 'tell app "System Events" to shut down']) finally: os._exit(0) + + elif LINUX: + """ + Shutdown system for linux. + + Requires DBus plus either HAL [1] or the more modern ConsoleKit [2]. + HAL will eventually be deprecated but older systems might still use it. + + [1] http://people.freedesktop.org/~hughsient/temp/dbus-interface.html + [2] http://www.freedesktop.org/software/ConsoleKit/doc/ConsoleKit.html + """ + try: + import dbus + except ImportError: + pass + else: + try: + name = 'org.freedesktop.PowerManagement' + path = '/org/freedesktop/PowerManagement' + interface = 'org.freedesktop.PowerManagement' + bus = dbus.SessionBus() + proxy = bus.get_object(name, path) + except dbus.exceptions.DBusException: + try: + name = 'org.freedesktop.ConsoleKit' + path = '/org/freedesktop/ConsoleKit/Manager' + interface = 'org.freedesktop.ConsoleKit.Manager' + bus = dbus.SystemBus() + proxy = bus.get_object(name, path) + except dbus.exceptions.DBusException: + pass + else: + if proxy.CanStop(dbus_interface=interface): + proxy.Stop(dbus_interface=interface) + else: + if proxy.CanShutdown(): + proxy.Shutdown(dbus_interface=interface) + finally: + os._exit(0) def system_hibernate(): @@ -498,7 +536,47 @@ try: if sabnzbd.WIN32: subprocess.Popen("rundll32 powrprof.dll,SetSuspendState Hibernate") - time.sleep(10) + + elif LINUX: + """ + Hibernate system for linux. + + Requires DBus plus either HAL [1] or the more modern DeviceKit [2]. + HAL will eventually be deprecated but older systems might still use it. + + [1] http://people.freedesktop.org/~hughsient/temp/dbus-interface.html + [2] http://hal.freedesktop.org/docs/DeviceKit-power/ + """ + try: + import dbus + except ImportError: + raise + else: + try: + name = 'org.freedesktop.PowerManagement' + path = '/org/freedesktop/PowerManagement' + interface = 'org.freedesktop.PowerManagement' + bus = dbus.SessionBus() + proxy = bus.get_object(name, path) + except dbus.exceptions.DBusException: + try: + name = 'org.freedesktop.DeviceKit.Power' + path = '/org/freedesktop/DeviceKit/Power' + interface = 'org.freedesktop.DeviceKit.Power' + pinterface = 'org.freedesktop.DBus.Properties' + bus = dbus.SystemBus() + proxy = bus.get_object(name, path) + except dbus.exceptions.DBusException: + raise + else: + if proxy.Get(interface, 'can-hibernate', + dbus_interface=pinterface): + proxy.Hibernate(dbus_interface=interface) + else: + if proxy.CanHibernate(): + proxy.Hibernate(dbus_interface=interface) + + time.sleep(10) except: logging.error(T('error-hibernate')) logging.debug("Traceback: ", exc_info = True) @@ -511,6 +589,46 @@ subprocess.Popen("rundll32 powrprof.dll,SetSuspendState Standby") elif DARWIN: subprocess.call(['osascript', '-e','tell app "System Events" to sleep']) + + elif LINUX: + """ + Suspend (standby) system for linux. + + Requires DBus plus either HAL [1] or the more modern DeviceKit [2]. + HAL will eventually be deprecated but older systems might still use it. + + [1] http://people.freedesktop.org/~hughsient/temp/dbus-interface.html + [2] http://hal.freedesktop.org/docs/DeviceKit-power/ + """ + try: + import dbus + except ImportError: + raise + else: + try: + name = 'org.freedesktop.PowerManagement' + path = '/org/freedesktop/PowerManagement' + interface = 'org.freedesktop.PowerManagement' + bus = dbus.SessionBus() + proxy = bus.get_object(name, path) + except dbus.exceptions.DBusException: + try: + name = 'org.freedesktop.DeviceKit.Power' + path = '/org/freedesktop/DeviceKit/Power' + interface = 'org.freedesktop.DeviceKit.Power' + pinterface = 'org.freedesktop.DBus.Properties' + bus = dbus.SystemBus() + proxy = bus.get_object(name, path) + except dbus.exceptions.DBusException: + raise + else: + if proxy.Get(interface, 'can-suspend', + dbus_interface=pinterface): + proxy.Suspend(dbus_interface=interface) + else: + if proxy.CanSuspend(): + proxy.Suspend(dbus_interface=interface) + time.sleep(10) except: logging.error(T('error-standby'))