Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Идеи по улучшению FWX API для сообщения Гислеру. #62

Open
pozitronik opened this issue Nov 8, 2016 · 24 comments
Assignees
Labels

Comments

@pozitronik
Copy link
Owner

В продолжение обсуждения #56, насчёт запроса Гислеру о возможности различать объект операции удаления (каталог или файл), для того, чтобы не удалять содержимое каталога рекурсивно тогда, когда это не требуется.

Подумалось:

  1. Такой же функционал пригодился бы и для операций копирования/перемещения. Облако умеет копировать/переносить всю файловую структуру сразу (в т.ч. между аккаунтами), но TC будет делать это пофайлово.
  2. Кроме письма Гислеру стоит поднять эту тему на оффоруме. Возможно, позже - сейчас просто нет времени этим заниматься, да и Кристиан занят выпуском релиза.
  3. У меня точно были какие-то идеи по улучшению WFX API, по мере озарения буду дописывать сюда.
@pozitronik
Copy link
Owner Author

Возможность выводить метку и объемы удалённой файловой системы аналогично тому, как это делается для локальных дисков.

@Corak667
Copy link

Насчет возможности выводить метку и объем, похоже не скоро:
http://picsee.net/upload/2016-11-15/3ab578d5269b.png
"Hi!

You wrote:

Thanks! I will re-send this to plugin developer.
Also he asks about another feature for WFX interface:
"Possiblity to show disk LABEL and Free/Full Disk Size as it done for local
disks.".
He currently can show free/full drive size only in ftp log for plugin.

Sorry, there are currently no functions for that, and Total Commander 9
is almost released (already at RC5)...

Best regards"

@pozitronik
Copy link
Owner Author

Ок, спасибо за информацию. Но как я и писал - Кристиану сейчас не до этого =)

@pozitronik
Copy link
Owner Author

pozitronik commented Nov 18, 2016

Не получилось реализовать быстрое копирование между аккаунтами подобно тому, как это сделано для быстрого удаления. Грубо говоря, различие в том, что в API есть FsDeleteFile и FsRemoveDir, а FsRenMovDir нет, только FsRenMovFile. Таким образом, TC всегда переносит данные пофайлово, по мере необходимости создавая нужную файловую структуру. Для изменения этого поведения нужны фиксы API - ну или вопрос КГ, может у него есть решение.

@Corak667
Copy link

напейсал об этом Гислеру:
http://picsee.net/upload/2016-11-18/dd3a30664ec8.png

@pozitronik
Copy link
Owner Author

Ок, спасибо

@Corak667
Copy link

Как и ожидалось, ответ неутешителен:
http://i.imgur.com/sJvlXor.png

"Hi!

You wrote:

Hi. Plugin author made quick folder deletion as you described, but had
troubles with quick copying/moving folders between "accounts", because API
have FsDeleteFile and FsRemoveDir, but not FsRenMovDir, only FsRenMovFile.
So TC always moving data file by file, at least for creating nessary file
structure. To change this behavor there is aneeded some API fixes. And so
he asks - could you provide any solutions for this or make future fixes for
TC.

(For moving between accounts he made temporary shared link creation and
cloning file by file, but there is possibility to clone by whole folders,
because it's one whole cloud system)

Currently this isn't possible because Total Commander does not actually
copy folders - it just creates the same named folder and then copies the
files. Adding this now would break a lot of older plugins...

Best regards"

@pozitronik
Copy link
Owner Author

Гислер прав, добавление такой функции очень много бы чего поломало. Я попробую покумекать, как это обойти, но без гарантий.

@pozitronik
Copy link
Owner Author

Я придумал способ копирования каталогов без рекурсивного обхода. В начале операции в FsStatusInfoW FS_STATUS_OP_RENMOV_MULTI устанавливаем флаг RenMovFlag.
Когда TC пытается получить листинг копируемого каталога в FsFindFirstW, проверяем наличие этого флага, запоминаем имя каталога, сбрасываем флаг (TC следующий запрос FsFindFirstW будет для каталога-приёмника) и возвращаем TC фейковые данные, будто копируемый каталог пуст.
Когда TC попытается создать копию каталога в облаке назначения в FsMkDirW, нужно проверить запомненное имя каталога-приёмника, и выполнить его клонирование.
Это работает, но есть засада: работает только для первого выделенного каталога, т.е. копировать сразу несколько не получится. Учитывая это, общее усложнение логики, а также наличие команды clone, быстрого копирования не будет.

@Corak667
Copy link

Corak667 commented Nov 20, 2016

Неплохая идея, а как насчет копирования-клонирования или переноса папок внутри одного аккаунта? Пока это только пофайлово? Реализовать по идее клонирование-перенос в пределах одного акка нереально - только между несколькими. Там в api вроде есть более просто решение по переносу папок целиком? Просто сейчас как раз занят проблемой массового резервирования содержимого одного сайта (а там где-то 3-4 тб надо забекапить) и там такой возник вопрос. По сути чтобы моментально перенести внутри одного акка придется жонглировать между двумя аккаунтами - перебросить во временную папку другого акка (clone), удалить в первом и перенести из временного в новую папку старого...

@Corak667
Copy link

Corak667 commented Nov 20, 2016

Кстати еще немаловажный момент по перебросу-клонированию файлов между акками. Если список файлов внутри клонируемой папки очень большой - то процесс займет около минуты, где-то в пределах 5 минут для очень крупных. А поскольку все данные сканируются антивирусом Касперского - то можно недосчитаться некоторых файлов, которые он посчитал инфицированными (и архивы и совместимые образы дисков тоже, если там что-то найдено подозрительное из его базы) и непригодным для публичного копирования (только владелец акка может такие файлы скачивать) - это можно легко определить по разнице размеров папок. Потом приходится рыскать по всем каталогам и сравнивать размеры, чтобы выявить - что именно он не скопировал, поскольку синхронизация директорий между двумя ветками внутри WFS не работает, только сравнение с локальным диском и WFS.

@pozitronik
Copy link
Owner Author

Неплохая идея, а как насчет копирования-клонирования или переноса папок внутри одного аккаунта?

Если дочитать предыдущий ответ до конца, то становится понятно - идея не сработает.
Что касается быстрого переноса каталогов в пределах одного аккаунта - там свои грабли. Я покопаюсь на этот счёт, но, возможно, получится как с перемещением в разных каталогах, т.е. никак.

Просто сейчас как раз занят проблемой массового резервирования содержимого одного сайта

Я бы в любом случае не рассчитывал на быстрое решение проблемы. Сейчас начинается предновогодний аврал, я не смогу выделить много времени на этот проект.

А поскольку все данные сканируются антивирусом Касперского - то можно недосчитаться некоторых файлов

Интересно. А какие-нибудь ошибки на клонировании таких файлов в лог сыплются? Если да - то я смогу добавить обработку ошибки, с уведомлением пользователя.

@Corak667
Copy link

Да, ошибка при копировании вирусованного файла наличествует, но только при попытке копирования такого файла отдельно между акками. При получении общей ссылки на папку и клонировании ошибок не отобразит, но вирусованый файл пропустит, так что бесполезно:
Пример ошибки по одному файлу:

EIdHTTPProtocolException ошибка с сообщением: HTTP/1.1 404 Not Found при отправке данных на адрес https://cloud.mail.ru/api/v2/file/publish, ответ сервера: {"email":"ruwimlvovich@mail.ru","body":{"home":{"value":"/pub/Games/0Korean_Games_Gamerun_201602/Tonko_4_[TWIM][07.1999][15.06.1999][Rip].rar","error":"virus_scan_fail"}},"time":1479410869615,"status":404}
Can't get temporary public link on /pub/Games/0Korean_Games_Gamerun_201602/Tonko_4_[TWIM][07.1999][15.06.1999][Rip].rar

EIdHTTPProtocolException ошибка с сообщением: HTTP/1.1 404 Not Found при отправке данных на адрес https://cloud.mail.ru/api/v2/file/publish, ответ сервера: {"email":"ruwimlvovich@mail.ru","body":{"home":{"value":"/pub/Games/0Ready/0RPG/Redshift_Legacy_2_The_Quest/TheQuest/cr-keymaker.ExE","error":"virus_scan_fail"}},"time":1479411096780,"status":404}
Can't get temporary public link on /pub/Games/0Ready/0RPG/Redshift_Legacy_2_The_Quest/TheQuest/cr-keymaker.ExE


@pozitronik
Copy link
Owner Author

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

@pozitronik
Copy link
Owner Author

TProgressProcW не учитывает то, из какого потока вызывается -> при копировании разных файлов в разных потоках имена файлов везде будут одинаковы (вызов TProgressProcW в одном потоке поменяет надписи везде).

@pozitronik
Copy link
Owner Author

Безумно хочу поддержку Ctrl+Z (комментариев) в FS-плагинах. От TC тут требуется что-то вроде такого:

  1. В текущем каталоге ищется descript.ion (или files.bbs). Если он есть - в фоне копируется в %tempdir%.
  2. В скопированном локальном descript.ion ищется описание файла; это всё делает TC.
  3. Отображается диалог с найденным описанием, если есть.
  4. При сохранении описание вносится в descript.ion, файл копируется на место старого.

Собственно, нет особенного труда в том, чтобы сделать это собственными силами (за исключением нативного диалога), но будут явные проблемы с поддержкой всех возможностей TC при работе с файлами описаний.

@Corak667
Copy link

Corak667 commented May 9, 2017

Написал Гислеру:
http://picsee.net/upload/2017-05-09/9c0c9fcc8453.png
9c0c9fcc8453 1

@pozitronik
Copy link
Owner Author

Хех, я обычно на форум кидаю =)

@Corak667
Copy link

Corak667 commented May 9, 2017

(Ну я предпочитаю сразу в личку срать, чтобы пришло бескопромиссно и наверняка)

Кстати таким же макаром (description) можно было бы реализовать то же сохранение оригинальных дат)

@pozitronik
Copy link
Owner Author

Писать даты в описания? Нет, описания не для того предназначены.

@Corak667
Copy link

Corak667 commented May 9, 2017

Ну а куда тогда, если в js-api не завезли?

@pozitronik
Copy link
Owner Author

Давай подождём, что Гислер про описания ответит, есть у меня задумки и по этому поводу

@pozitronik
Copy link
Owner Author

#241 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants