Project

General

Profile

Feature #1734

Функция перемещения отдельных файлов и директорий торрента

Added by Mellon over 5 years ago. Updated about 5 years ago.

Status:
Assigned
Priority:
Low
Assignee:
Category:
Plugins: BitTorrent
Target version:
Start date:
09/20/2014
Due date:
% Done:

0%

Estimated time:
5.00 h

Description

Эта штука успешно обходится симлинками или сабстами, но зачем костыли, когда можно перенести часть файлов на другой диск непосредственно из клиента?
Впилить в контекстное меню.


Related issues

Blocked by Bug #1736: Некорректное поведение при переименовывании директорий в qtreeview вкладки файлов.Closed09/20/2014

Actions

History

#1

Updated by 0xd34df00d over 5 years ago

  • Target version set to 0.6.75
  • Status changed from New to Assigned
#2

Updated by 0xd34df00d over 5 years ago

  • Blocked by Bug #1736: Некорректное поведение при переименовывании директорий в qtreeview вкладки файлов. added
#3

Updated by 0xd34df00d over 5 years ago

Так, хорошо, пусть у тебя торрент качается в /home/Mellon/$ROOTPATH, а ты переносишь часть файлов торрента в /var/lib/mpd/$Mitolcore. И как их отображать в дереве файлов тогда?

#4

Updated by 0xd34df00d over 5 years ago

  • Estimated time set to 5.00 h
#5

Updated by Mellon over 5 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 уже меняем (фактически перемещаем файл/директори) при изменении только базового имени объекта.

#6

Updated by Mellon over 5 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

В общем, это минорная херь, если ебко, то нафиг.

#7

Updated by 0xd34df00d about 5 years ago

  • Target version changed from 0.6.75 to 0.6.80

Also available in: Atom PDF