297 lines
8.0 KiB
Python
297 lines
8.0 KiB
Python
#
|
|
# event.py
|
|
#
|
|
# Copyright (C) 2009 Andrew Resch <andrewresch@gmail.com>
|
|
# Copyright (C) 2010 Pedro Algarvio <pedro@algarvio.me>
|
|
#
|
|
# Deluge is free software.
|
|
#
|
|
# You may 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.
|
|
#
|
|
# deluge 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 deluge. If not, write to:
|
|
# The Free Software Foundation, Inc.,
|
|
# 51 Franklin Street, Fifth Floor
|
|
# Boston, MA 02110-1301, USA.
|
|
#
|
|
# In addition, as a special exception, the copyright holders give
|
|
# permission to link the code of portions of this program with the OpenSSL
|
|
# library.
|
|
# You must obey the GNU General Public License in all respects for all of
|
|
# the code used other than OpenSSL. If you modify file(s) with this
|
|
# exception, you may extend this exception to your version of the file(s),
|
|
# but you are not obligated to do so. If you do not wish to do so, delete
|
|
# this exception statement from your version. If you delete this exception
|
|
# statement from all source files in the program, then also delete it here.
|
|
#
|
|
#
|
|
|
|
"""
|
|
Event module.
|
|
|
|
This module describes the types of events that can be generated by the daemon
|
|
and subsequently emitted to the clients.
|
|
|
|
"""
|
|
|
|
known_events = {}
|
|
|
|
class DelugeEventMetaClass(type):
|
|
"""
|
|
This metaclass simply keeps a list of all events classes created.
|
|
"""
|
|
__slots__ = ()
|
|
|
|
def __init__(cls, name, bases, dct):
|
|
super(DelugeEventMetaClass, cls).__init__(name, bases, dct)
|
|
if name != "DelugeEvent":
|
|
known_events[name] = cls
|
|
|
|
class DelugeEvent(object):
|
|
"""
|
|
The base class for all events.
|
|
|
|
:prop name: this is the name of the class which is in-turn the event name
|
|
:type name: string
|
|
:prop args: a list of the attribute values
|
|
:type args: list
|
|
|
|
"""
|
|
__slots__ = ()
|
|
__metaclass__ = DelugeEventMetaClass
|
|
|
|
def _get_name(self):
|
|
return self.__class__.__name__
|
|
name = property(fget=_get_name)
|
|
|
|
def _get_args(self):
|
|
return [getattr(self, arg) for arg in self.__slots__]
|
|
args = property(fget=_get_args)
|
|
|
|
def copy(self):
|
|
return self.__class__(*self.args)
|
|
|
|
class TorrentAddedEvent(DelugeEvent):
|
|
"""
|
|
Emitted when a new torrent is successfully added to the session.
|
|
"""
|
|
__slots__ = ('torrent_id', 'from_state')
|
|
|
|
def __init__(self, torrent_id, from_state):
|
|
"""
|
|
:param torrent_id: the torrent_id of the torrent that was added
|
|
:type torrent_id: string
|
|
:param from_state: was the torrent loaded from state? Or is it a new torrent.
|
|
:type from_state: bool
|
|
"""
|
|
self.torrent_id = torrent_id
|
|
self.from_state = from_state
|
|
|
|
class TorrentRemovedEvent(DelugeEvent):
|
|
"""
|
|
Emitted when a torrent has been removed from the session.
|
|
"""
|
|
__slots__ = ('torrent_id',)
|
|
|
|
def __init__(self, torrent_id):
|
|
"""
|
|
:param torrent_id: the torrent_id
|
|
:type torrent_id: string
|
|
"""
|
|
self.torrent_id = torrent_id
|
|
|
|
class PreTorrentRemovedEvent(DelugeEvent):
|
|
"""
|
|
Emitted when a torrent is about to be removed from the session.
|
|
"""
|
|
__slots__ = ('torrent_id',)
|
|
|
|
def __init__(self, torrent_id):
|
|
"""
|
|
:param torrent_id: the torrent_id
|
|
:type torrent_id: string
|
|
"""
|
|
self.torrent_id = torrent_id
|
|
|
|
class TorrentStateChangedEvent(DelugeEvent):
|
|
"""
|
|
Emitted when a torrent changes state.
|
|
"""
|
|
__slots__ = ('torrent_id', 'state')
|
|
|
|
def __init__(self, torrent_id, state):
|
|
"""
|
|
:param torrent_id: the torrent_id
|
|
:type torrent_id: string
|
|
:param state: the new state
|
|
:type state: string
|
|
"""
|
|
self.torrent_id = torrent_id
|
|
self.state = state
|
|
|
|
class TorrentQueueChangedEvent(DelugeEvent):
|
|
"""
|
|
Emitted when the queue order has changed.
|
|
"""
|
|
|
|
class TorrentFolderRenamedEvent(DelugeEvent):
|
|
"""
|
|
Emitted when a folder within a torrent has been renamed.
|
|
"""
|
|
__slots__ = ('torrent_id', 'old', 'new')
|
|
|
|
def __init__(self, torrent_id, old, new):
|
|
"""
|
|
:param torrent_id: the torrent_id
|
|
:type torrent_id: string
|
|
:param old: the old folder name
|
|
:type old: string
|
|
:param new: the new folder name
|
|
:type new: string
|
|
"""
|
|
self.torrent_id = torrent_id
|
|
self.old = old
|
|
self.new = new
|
|
|
|
class TorrentFileRenamedEvent(DelugeEvent):
|
|
"""
|
|
Emitted when a file within a torrent has been renamed.
|
|
"""
|
|
__slots__ = ('torrent_id', 'index', 'filename')
|
|
|
|
def __init__(self, torrent_id, index, filename):
|
|
"""
|
|
:param torrent_id: the torrent_id
|
|
:type torrent_id: string
|
|
:param index: the index of the file
|
|
:type index: int
|
|
:param filename: the new filename
|
|
:type filename: string
|
|
"""
|
|
self.torrent_id = torrent_id
|
|
self.index = index
|
|
self.filename = filename
|
|
|
|
class TorrentFinishedEvent(DelugeEvent):
|
|
"""
|
|
Emitted when a torrent finishes downloading.
|
|
"""
|
|
__slots__ = ('torrent_id',)
|
|
|
|
def __init__(self, torrent_id):
|
|
"""
|
|
:param torrent_id: the torrent_id
|
|
:type torrent_id: string
|
|
"""
|
|
self.torrent_id = torrent_id
|
|
|
|
class TorrentResumedEvent(DelugeEvent):
|
|
"""
|
|
Emitted when a torrent resumes from a paused state.
|
|
"""
|
|
__slots__ = ('torrent_id',)
|
|
|
|
def __init__(self, torrent_id):
|
|
"""
|
|
:param torrent_id: the torrent_id
|
|
:type torrent_id: string
|
|
"""
|
|
self.torrent_id = torrent_id
|
|
|
|
class TorrentFileCompletedEvent(DelugeEvent):
|
|
"""
|
|
Emitted when a file completes.
|
|
|
|
This will only work with libtorrent 0.15 or greater.
|
|
|
|
"""
|
|
__slots__ = ('torrent_id', 'index')
|
|
|
|
def __init__(self, torrent_id, index):
|
|
"""
|
|
:param torrent_id: the torrent_id
|
|
:type torrent_id: string
|
|
:param index: the file index
|
|
:type index: int
|
|
"""
|
|
self.torrent_id = torrent_id
|
|
self.index = index
|
|
|
|
class NewVersionAvailableEvent(DelugeEvent):
|
|
"""
|
|
Emitted when a more recent version of Deluge is available.
|
|
"""
|
|
__slots__ = ('new_release',)
|
|
|
|
def __init__(self, new_release):
|
|
"""
|
|
:param new_release: the new version that is available
|
|
:type new_release: string
|
|
"""
|
|
self.new_release = new_release
|
|
|
|
class SessionStartedEvent(DelugeEvent):
|
|
"""
|
|
Emitted when a session has started. This typically only happens once when
|
|
the daemon is initially started.
|
|
"""
|
|
|
|
class SessionPausedEvent(DelugeEvent):
|
|
"""
|
|
Emitted when the session has been paused.
|
|
"""
|
|
|
|
class SessionResumedEvent(DelugeEvent):
|
|
"""
|
|
Emitted when the session has been resumed.
|
|
"""
|
|
|
|
class ConfigValueChangedEvent(DelugeEvent):
|
|
"""
|
|
Emitted when a config value changes in the Core.
|
|
"""
|
|
__slots__ = ('key', 'value')
|
|
|
|
def __init__(self, key, value):
|
|
"""
|
|
:param key: the key that changed
|
|
:type key: string
|
|
:param value: the new value of the `:param:key`
|
|
"""
|
|
self.key = key
|
|
self.value = value
|
|
|
|
class PluginEnabledEvent(DelugeEvent):
|
|
"""
|
|
Emitted when a plugin is enabled in the Core.
|
|
"""
|
|
__slots__ = ('plugin_name',)
|
|
|
|
def __init__(self, plugin_name):
|
|
"""
|
|
:param plugin_name: the plugin name
|
|
:type plugin_name: string
|
|
"""
|
|
self.plugin_name = plugin_name
|
|
|
|
class PluginDisabledEvent(DelugeEvent):
|
|
"""
|
|
Emitted when a plugin is disabled in the Core.
|
|
"""
|
|
__slots__ = ('plugin_name',)
|
|
|
|
def __init__(self, plugin_name):
|
|
"""
|
|
:param plugin_name: the plugin name
|
|
:type plugin_name: string
|
|
"""
|
|
self.plugin_name = plugin_name
|