Add ability to rename files prior to adding them in the gtkui
This commit is contained in:
parent
0a9a6b4816
commit
3194f0f994
|
@ -16,6 +16,7 @@
|
||||||
* Add Find More Plugins button to Plugins preference page
|
* Add Find More Plugins button to Plugins preference page
|
||||||
* Fix #518 remove header in add torrent dialog to save vertical space
|
* Fix #518 remove header in add torrent dialog to save vertical space
|
||||||
* Add a Cache preferences page to adjust cache settings and examine cache status
|
* Add a Cache preferences page to adjust cache settings and examine cache status
|
||||||
|
* Add ability to rename files prior to adding them
|
||||||
|
|
||||||
==== ConsoleUI ====
|
==== ConsoleUI ====
|
||||||
* Changed to use curses for a more interactive client
|
* Changed to use curses for a more interactive client
|
||||||
|
|
|
@ -344,6 +344,7 @@ class TorrentManager(component.Component):
|
||||||
# before adding to the session.
|
# before adding to the session.
|
||||||
if options["mapped_files"]:
|
if options["mapped_files"]:
|
||||||
for index, name in options["mapped_files"].items():
|
for index, name in options["mapped_files"].items():
|
||||||
|
log.debug("renaming file index %s to %s", index, name)
|
||||||
torrent_info.rename_file(index, name)
|
torrent_info.rename_file(index, name)
|
||||||
|
|
||||||
add_torrent_params["ti"] = torrent_info
|
add_torrent_params["ti"] = torrent_info
|
||||||
|
|
|
@ -87,6 +87,7 @@ class AddTorrentDialog(component.Component):
|
||||||
self.infos = {}
|
self.infos = {}
|
||||||
self.core_config = {}
|
self.core_config = {}
|
||||||
self.options = {}
|
self.options = {}
|
||||||
|
|
||||||
self.previous_selected_torrent = None
|
self.previous_selected_torrent = None
|
||||||
|
|
||||||
|
|
||||||
|
@ -107,6 +108,8 @@ class AddTorrentDialog(component.Component):
|
||||||
column.pack_start(render, False)
|
column.pack_start(render, False)
|
||||||
column.add_attribute(render, "stock-id", 5)
|
column.add_attribute(render, "stock-id", 5)
|
||||||
render = gtk.CellRendererText()
|
render = gtk.CellRendererText()
|
||||||
|
render.set_property("editable", True)
|
||||||
|
render.connect("edited", self._on_filename_edited)
|
||||||
column.pack_start(render, True)
|
column.pack_start(render, True)
|
||||||
column.add_attribute(render, "text", 1)
|
column.add_attribute(render, "text", 1)
|
||||||
column.set_expand(True)
|
column.set_expand(True)
|
||||||
|
@ -377,7 +380,11 @@ class AddTorrentDialog(component.Component):
|
||||||
|
|
||||||
torrent_id = self.torrent_liststore.get_value(row, 0)
|
torrent_id = self.torrent_liststore.get_value(row, 0)
|
||||||
|
|
||||||
options = {}
|
if torrent_id in self.options:
|
||||||
|
options = self.options[torrent_id]
|
||||||
|
else:
|
||||||
|
options = {}
|
||||||
|
|
||||||
if client.is_localhost():
|
if client.is_localhost():
|
||||||
options["download_location"] = \
|
options["download_location"] = \
|
||||||
self.glade.get_widget("button_location").get_current_folder()
|
self.glade.get_widget("button_location").get_current_folder()
|
||||||
|
@ -778,3 +785,78 @@ class AddTorrentDialog(component.Component):
|
||||||
def _on_delete_event(self, widget, event):
|
def _on_delete_event(self, widget, event):
|
||||||
self.hide()
|
self.hide()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def get_file_path(self, row, path=""):
|
||||||
|
if not row:
|
||||||
|
return path
|
||||||
|
|
||||||
|
path = self.files_treestore[row][1] + path
|
||||||
|
return self.get_file_path(self.files_treestore.iter_parent(row), path)
|
||||||
|
|
||||||
|
def _on_filename_edited(self, renderer, path, new_text):
|
||||||
|
index = self.files_treestore[path][3]
|
||||||
|
|
||||||
|
# Return if the text hasn't changed
|
||||||
|
if new_text == self.files_treestore[path][1]:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Get the tree iter
|
||||||
|
itr = self.files_treestore.get_iter(path)
|
||||||
|
|
||||||
|
# Get the torrent_id
|
||||||
|
(model, row) = self.listview_torrents.get_selection().get_selected()
|
||||||
|
torrent_id = model[row][0]
|
||||||
|
|
||||||
|
if "mapped_files" not in self.options[torrent_id]:
|
||||||
|
self.options[torrent_id]["mapped_files"] = {}
|
||||||
|
|
||||||
|
if index > -1:
|
||||||
|
# We're renaming a file! Yay! That's easy!
|
||||||
|
file_path = self.get_file_path(self.files_treestore.iter_parent(itr))
|
||||||
|
|
||||||
|
file_path += new_text
|
||||||
|
|
||||||
|
# Update the row's text
|
||||||
|
self.files_treestore[itr][1] = new_text
|
||||||
|
|
||||||
|
# Update the mapped_files dict in the options with the index and new
|
||||||
|
# file path.
|
||||||
|
# We'll send this to the core when adding the torrent so it knows
|
||||||
|
# what to rename before adding.
|
||||||
|
self.options[torrent_id]["mapped_files"][index] = file_path
|
||||||
|
else:
|
||||||
|
# Folder!
|
||||||
|
def walk_tree(row):
|
||||||
|
if not row:
|
||||||
|
return
|
||||||
|
|
||||||
|
# We recurse if there are children
|
||||||
|
if self.files_treestore.iter_has_child(row):
|
||||||
|
walk_tree(self.files_treestore.iter_children(row))
|
||||||
|
|
||||||
|
while row:
|
||||||
|
index = self.files_treestore[row][3]
|
||||||
|
|
||||||
|
# Don't do anything if this is a folder
|
||||||
|
if index == -1:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Get the new full path for this file
|
||||||
|
file_path = self.get_file_path(self.files_treestore.iter_parent(row))
|
||||||
|
file_path += self.files_treestore[row][1]
|
||||||
|
|
||||||
|
# Update the file path in the mapped_files dict
|
||||||
|
self.options[torrent_id]["mapped_files"][index] = file_path
|
||||||
|
|
||||||
|
# Get the next siblings iter
|
||||||
|
row = self.files_treestore.iter_next(row)
|
||||||
|
|
||||||
|
# Update the treestore row first so that when walking the tree
|
||||||
|
# we can construct the new proper paths
|
||||||
|
if len(new_text) == 0 or new_text[-1] != "/":
|
||||||
|
new_text += "/"
|
||||||
|
self.files_treestore[itr][1] = new_text
|
||||||
|
|
||||||
|
# Walk through the tree from 'itr' and add all the new file paths
|
||||||
|
# to the 'mapped_files' option
|
||||||
|
walk_tree(itr)
|
||||||
|
|
Loading…
Reference in New Issue