Feature #1734
openФункция перемещения отдельных файлов и директорий торрента
Added by Mellon about 10 years ago. Updated almost 10 years ago.
0%
Description
Эта штука успешно обходится симлинками или сабстами, но зачем костыли, когда можно перенести часть файлов на другой диск непосредственно из клиента?
Впилить в контекстное меню.
Updated by 0xd34df00d about 10 years ago
- Status changed from New to Assigned
- Target version set to 0.6.75
Updated by 0xd34df00d about 10 years ago
- Blocked by Bug #1736: Некорректное поведение при переименовывании директорий в qtreeview вкладки файлов. added
Updated by 0xd34df00d about 10 years ago
Так, хорошо, пусть у тебя торрент качается в /home/Mellon/$ROOTPATH, а ты переносишь часть файлов торрента в /var/lib/mpd/$Mitolcore. И как их отображать в дереве файлов тогда?
Updated by Mellon about 10 years ago
Хз... эта хрень действительно не очесовместима с возможностью перемещения файла по всей иерархии торрента при переименовывании...
Имхо, можно отображать перемещенные за пределы пути сохранения объекты как отдельные деревья с полным путём в иерархии.
Ппц наркомания, конечно.
Другой, более трудный путь.
Отделить (полные) имена в qtreeview от их фактического пути.
Допустим есть следующие атрибуты:
tree_path - путь отображаемый в дереве;
real_path - реальный путь до файла/директории;
torrent_path - путь сохранения торрента.
Как производится переименовывание (оформил в виде абстрактной bash-функции, чтоб покороче):
rename() { object1="$1" object2="$2" objdir1="$(dirname \"$object1\")" objname1="$(basename \"$object1\")" objdir2="$(dirname \"$object2\")" objname2="$(basename \"$object2\")" if [[ "$objname2" == "$object2" || "$objdir2" == "$objdir1" ]] # если переименовывание происходит в пределах одной директории then mv "$real_path" "$(dirname \"$real_path\")/$objname2" # перемещаем в пределах одной директории tree_path="$(dirname \"$tree_path\")/$objname2" # Обновляем tree_path else if [[ "$real_path" == "$torrent_path/$tree_path" ]] # если перемещение происходит в пределах пути сохранения торрента mv "$real_path "$torrent_path/$object2" # перемещаем else tree_path="$object2" # Обновляем tree_path fi }
То есть, если мы переименовываем/перемещаем в пределах пути сохранения торрента, то оперируем с
tree_path и real_path как обычно: real_path = torrent_path/tree_path.
Если же мы объект перепещаем за пределы пути сохранения торрента, то tree_path оставляем прежним и уже real_path != torrent_path/tree_path, и в дальнейшем, при переименовываниях, real_path уже меняем (фактически перемещаем файл/директори) при изменении только базового имени объекта.
Updated by Mellon about 10 years ago
Ну ок. на пальцах.
По второму способу.¶
Допустим есть торрент, который качается в /foo/bar (torrent_path).
он имеет структуру:
blabla/fap/1.avi
Cоответственно в дереве он так и будет отображаться (tree_path).
а real_path будет:
/foo/bar/blabla/fap/1.avi
1. Рассмотрим случай, когда мы ничего до этого не перемещали за пределы torrent_path.
Теперь двойным щелчком в дереве переименуем:
blabla/fap/1.avi → blabla/faped/cool.avi
И соответственно, переместим по факту:
/foo/bar/blabla/fap/1.avi → /foo/bar/blabla/faped/cool.avi
2. Теперь, рассмотрим случай, когда до переименовывания в дереве, мы переместили файл:
/foo/bar/blabla/fap/1.avi → /mnt/video/1.avi
При этом в дереве он должен будет отображаться по-прежнему (tree_path):
blabla/fap/1.avi
Но иметь real_path:
/mnt/video/1.avi
И так, мы переименовываем двойным щелком в дереве
blabla/fap/1.avi → blabla/faped/cool.avi
При этом фактического перемещения происходить не должно и real_path должен остаться прежним:
/mnt/video/1.avi
2.1. Теперь мы переименовываем двойным щелком в дереве
blabla/faped/cool.avi → blabla/faped/notcool.avi
Так как мы меняем только базовое имя, то можем его поменять и там куда перемещали объект до этого:
/mnt/video/1.avi → /mnt/video/notcool.avi
П. 2.1 несколько наркоманский, и спорный (возможны коллизии), поэтому, его вполне можно опустить.
По первому способу.¶
Допустим есть торрент, который качается в /foo/bar (torrent_path).
он имеет структуру:
blabla/fap/1.avi blabla/nofap/2.pdf
так и будет отображаться в дереве (tree_path).
Рассмотрим случай, когда перемещаем за пределы torrent_path:
/foo/bar/blabla/nofap/2.pdf → /home/user/ebooks/howtonofap.pdf
Тогда дерево будет отображено как:
blabla/fap/1.avi home/user/ebooks/howtonofap.pdf
В общем, это минорная херь, если ебко, то нафиг.
Updated by 0xd34df00d almost 10 years ago
- Target version changed from 0.6.75 to 0.6.80