173 lines
6.9 KiB
Python
Executable File
173 lines
6.9 KiB
Python
Executable File
#!/usr/bin/env python
|
|
#
|
|
# deluge
|
|
# Copyright (C) Zach Tibbitts 2006 <zach@collegegeek.org>
|
|
# Copyright (C) Alon Zakai 2006 <kripkensteiner@gmail.com>
|
|
#
|
|
#
|
|
#
|
|
# 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 2 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.
|
|
|
|
import os
|
|
from optparse import OptionParser
|
|
import re
|
|
import sys
|
|
|
|
import deluge
|
|
import deluge.common
|
|
import deluge.core
|
|
import deluge._dbus as dbus
|
|
import deluge.interface
|
|
import deluge.pref
|
|
|
|
if not deluge.common.windows_check():
|
|
import platform
|
|
i = 1
|
|
arguments = ""
|
|
while i < len(sys.argv):
|
|
arguments = arguments + " " + sys.argv[i]
|
|
i+=1
|
|
if platform.system() == "Linux": # Add this, FreeBSD and other OSs than Linux do not have /etc/issue.
|
|
print "checking for ubuntu..."
|
|
if os.WEXITSTATUS(os.system('grep -iq "Ubuntu" /etc/issue')) == 0:
|
|
if os.environ.get("MOZILLA_FIVE_HOME") != "/usr/lib/firefox":
|
|
print "found and fixing ubuntu"
|
|
os.environ["MOZILLA_FIVE_HOME"] = "/usr/lib/firefox"
|
|
os.environ["LD_LIBRARY_PATH"] = "/usr/lib/firefox"
|
|
os.system("/usr/bin/deluge %s &" % arguments)
|
|
raise SystemExit
|
|
elif platform.system() == "FreeBSD":
|
|
if os.environ.get("MOZILLA_FIVE_HOME") != "/usr/local/lib/firefox":
|
|
print "found and fixing freebsd..."
|
|
os.environ["MOZILLA_FIVE_HOME"] = "/usr/local/lib/firefox"
|
|
os.environ["LD_LIBRARY_PATH"] = "/usr/local/lib/firefox"
|
|
os.system("/usr/local/bin/deluge %s &" % arguments)
|
|
raise SystemExit
|
|
|
|
parser = OptionParser(usage="%prog [options] [torrents to add]",
|
|
version=deluge.common.PROGRAM_VERSION)
|
|
parser.add_option("-c", "--config", dest="config", help="Sets the configuration path")
|
|
(options, args) = parser.parse_args()
|
|
|
|
if (options.config != None):
|
|
deluge.common.CONFIG_DIR = options.config
|
|
|
|
if hasattr(sys, "frozen"):
|
|
sys.stdout = open(os.path.join(deluge.common.CONFIG_DIR,"deluge.stdout.log"), "w")
|
|
sys.stderr = open(os.path.join(deluge.common.CONFIG_DIR,"deluge.stderr.log"), "w")
|
|
|
|
def upgrade_old_persistent_state():
|
|
pstate_file_path = os.path.join(deluge.common.CONFIG_DIR,
|
|
deluge.core.STATE_FILENAME)
|
|
## The persistent_state object moved from the deluge.deluge module to the
|
|
## deluge.core module from 0.5; so let's edit the user's saved data to
|
|
## reflect this.
|
|
if os.path.isfile(pstate_file_path):
|
|
try:
|
|
pstate_fd = open(pstate_file_path, "r")
|
|
pstate_data = pstate_fd.read()
|
|
pstate_fd.close()
|
|
|
|
## If the file was empty, then we should remove it so that the
|
|
## pickler doesn't not attempt to unpack an empty state.
|
|
if len(pstate_data) is 0:
|
|
os.remove(pstate_file_path)
|
|
print "Empty persistent state data file removed successfully."
|
|
## The file exists and contains data, so let's do a regex-based
|
|
## find/replace to update the module name.
|
|
else:
|
|
pstate_old_regex = re.compile("\(ideluge\.deluge$",
|
|
re.MULTILINE)
|
|
if re.search(pstate_old_regex, pstate_data):
|
|
pstate_new_data = re.sub(pstate_old_regex,
|
|
"(ideluge.core", pstate_data)
|
|
pstate_fd = open(pstate_file_path, "w")
|
|
pstate_fd.write(pstate_new_data)
|
|
pstate_fd.close()
|
|
print "Persistent state data updated successfully."
|
|
except OSError, oopsie:
|
|
print >> sys.stderr, \
|
|
"""There was an error updating the persistent.state file.
|
|
If this is an upgrade from an earlier version of Deluge, this may cause bugs
|
|
or failures in startup. You may wish to remove it manually. (%s)
|
|
Continuing...""" % pstate_file_path
|
|
print >> sys.stderr, "The error was: %s." % oopsie
|
|
|
|
def get_cmd_line_torrents():
|
|
cmd_line_torrents = []
|
|
for torrent in args:
|
|
if deluge.common.is_url(torrent):
|
|
filename = deluge.common.fetch_url(torrent)
|
|
if filename:
|
|
cmd_line_torrents.append(filename)
|
|
else:
|
|
if not torrent.endswith(".torrent"):
|
|
print "Error,", torrent, " does not seem to be a .torrent file"
|
|
else:
|
|
cmd_line_torrents.append(os.path.abspath(torrent))
|
|
return cmd_line_torrents
|
|
|
|
def start_deluge():
|
|
print "Starting new Deluge session..."
|
|
upgrade_old_persistent_state()
|
|
interface = deluge.interface.DelugeGTK()
|
|
interface.start(get_cmd_line_torrents())
|
|
|
|
try:
|
|
bus = dbus.SessionBus()
|
|
except:
|
|
if not deluge.common.windows_check():
|
|
while i < len(sys.argv):
|
|
arguments = arguments + " " + sys.argv[i]
|
|
i+=1
|
|
pid = os.fork()
|
|
if not pid:
|
|
os.popen('dbus-launch deluge %s' %arguments)
|
|
else:
|
|
dbus_objects = dbus.Interface(bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus'), 'org.freedesktop.DBus').ListNames()
|
|
|
|
if not "org.deluge_torrent.Deluge" in dbus_objects:
|
|
print "no existing Deluge session"
|
|
if not os.path.exists(os.path.join(deluge.common.CONFIG_DIR, 'firstrun')):
|
|
import deluge.wizard
|
|
deluge.wizard.WizardGTK()
|
|
|
|
start_deluge()
|
|
|
|
else:
|
|
## This connects to the deluge interface
|
|
print "create proxy object"
|
|
proxy = bus.get_object('org.deluge_torrent.Deluge', '/org/deluge_torrent/DelugeObject')
|
|
print "create iface"
|
|
deluge_iface = dbus.Interface(proxy, 'org.deluge_torrent.Deluge')
|
|
print "send to iface"
|
|
|
|
for filename in get_cmd_line_torrents():
|
|
deluge_iface.interactive_add_torrent(filename)
|