В диалоге копирования пишет сразу полный путь, куда копировать.
Ну какой, конкретно? Ты со стандартной панелью не путаешь, случайно?
Активная панель - стандартная, пассивная - Network. Нажимаем F5, открывается диалог копирования, в нем сразу введен полный путь назначения: \\MAKC-PC\Users\ например.
MaximKat wrote:Активная панель - стандартная, пассивная - Network. Нажимаем F5, открывается диалог копирования, в нем сразу введен полный путь назначения: \\MAKC-PC\Users\ например.
это уже не панель нетворк плагина, а стандартная файловая.
zg
Вот и я подозревал. Почему-то это многих сбивает с толку, типа начали с Network и ходим же по сетке, а деле-то Network панель только вначале работала.
MaximKat
Но в любом случае посмотрю еще раз на предмет чего я там мог недоделать.
По поводу цифирок вместо имен при копировании. Доработаю. Давно напрашивалось, но как бы никому не надо было. Вот теперь надо - сделаю, но может не так, как предлагается.
Почему так было? В общем случае операция копирования с плаг-панели на файловую - некорректная, так как:
1) имена файлов плагина могут совпадать (редко, но не настолько, чтобы забить на это)
2) могут содержать символы, непригодные для имен файлов файловой системы
Потому и не было внятного решения. А какое может быть внятное вообще, в принципе? Думаю реализовать так - если имена нормальные, то копируем, как есть. Если имена ненормальные, то для дубликатов генерим суффиксы(префиксы?), а для плохих имен заменяем плохие символы на коды типа {0x1234} (то есть коверкаем так, что все-таки можно расковеркать при желании и в большинстве случаев).
Но это пока план. Если есть другие идеи по проблеме, велкам. (Проблема и нативных плагинов касается, в принципе).
NightRoman wrote:
Потому и не было внятного решения. А какое может быть внятное вообще, в принципе? Думаю реализовать так - если имена нормальные, то копируем, как есть. Если имена ненормальные, то для дубликатов генерим суффиксы(префиксы?), а для плохих имен заменяем плохие символы на коды типа {0x1234} (то есть коверкаем так, что все-таки можно расковеркать при желании и в большинстве случаев).
Для моих целей, в принципе, так подойдет. Но теоретически, мне больше нравятся идеи из комментария в AsGetFiles: либо спрашивать модуль о "красивых" именах всегда, либо ввести флаг "эти имена подходят для файловой системы", а если окажется что это неправда, то это уже проблема модуля. Переименовывать файлы без спросу, причем по каким-то своим внутренним правилам - не очень хорошая идея, мне кажется.
Но в любом случае посмотрю еще раз на предмет чего я там мог недоделать.
Я вчера потратил час на изучение исходников Фара, похоже тебе делать ничего не надо. Плагины могут только до двоеточия менять текст, для этого есть у панели (кажется) свойство Format. У тебя оно уже реализовано, как оказалось.
MaximKat wrote:Я вчера потратил час на изучение исходников Фара, похоже тебе делать ничего не надо. Плагины могут только до двоеточия менять текст, для этого есть у панели (кажется) свойство Format. У тебя оно уже реализовано, как оказалось.
lol, а я-то все думал - зачем это свойство Format нужно?
Про имена, наверное, ты прав. Чем больше думаю, тем AI по переименованию меньше нравится. Наверное, стоит начать с флага. А метод добавим, когда этого будет недостаточно.
По большому счету и спец. метод не нужен будет. Точнее, нужен, но он уже суть реализован, раз имена плохие, то тогда и надо имплементировать ExportFiles на свой лад.
А с флагом (SystemNames, такое имя флага внятное?) и F5 можно не перехватывать. Если есть GetContent и стоит SystemNames, то этого достаточно для копирования обычным способом даже если нет ExportFiles. (Кроме того, у флага есть и другие плюсы для внутренней кухни). В общем, вроде вырисовывается. Скоро сделаю, но вряд ли "прям завтра".
NightRoman wrote:А с флагом (SystemNames, такое имя флага внятное?) и F5 можно не перехватывать. Если есть GetContent и стоит SystemNames, то этого достаточно для копирования обычным способом даже если нет ExportFiles.
Ну да. Я потому и поднял эту тему. Подозреваю что и ImportFiles через CreateFile/SetText/SetContent можно сделать.
Можешь немного уточнить насчет "не завтра"? Чтоб я знал, мне пока пользоваться тем что есть или проще подождать новой версии. Неделя, месяц, год?
Мне и решение с SystemNames не вполне нравится после дополнительного обдумывания. Плохих имен больше, чем кажется тому, кто будет этот SystemNames ставить у себя:
- IO.Path.GetInvalidFileNameChars() (это понятно, но не все о всех 41 символах помнят)
- Точки и пробелы в конце (Фар, может, справится, но это засада все равно: .NET, наверное, нет)
- CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 (про эти подлянки вообще вряд ли кто помнит)
В итоге склоняюсь к такому решению. Флага не надо. Если проводник панели не имеет ExportFiles, но имеет GetContent, и при этом противоположная панель - не панель FarNet (а иначе именно она отвечает за прием файлов, а не исходная за отправку), то F5 и F6 не перехватываются, а отдаются в обработку по умолчанию (AsGetFiles). В AsGetFiles хорошие имена пропускаются, как есть. Плохие имена предлагается заменить *интерактивно* в строке ввода, если интеракция разрешена, иначе просто игнорируются (жаль, но а что еще иначе делать?). Проблему повторяющихся имен вообще игнорируем, это на пользователе.
А внутреннюю генерацию алиасов (тех цифр, с которых началась тема) оставлю, хотя бы чтобы CtrlQ работал всегда (сначала думалось, что SystemNames может избавить от этого). Более того, я не генерил алиасы в случае ExploreLocation (проводник работает только с путями), а теперь решил генерить и в этом случае, чтобы CtrlQ работал при любых именах, даже по ошибке допущенных проблемных.
Про move (F6) возник такой вопрос. Все под контролем, если таргет - файловая система, если что-то не сработало (и это спрограммировано правильно), то оно и не будет удалено. А вот что если это плагиновая панель нативного плагина? (типа arclite, но это просто пример, далее не зацикливаемся на нем) Делаем перенос, а таргет плагин не может обработать некоторые из переносимых файлов. Фарнет об этом узнать, кажется, ничего не может (или я не знаю, как это сделать), поэтому он послушно удаляет все, что *с его точки зрения* было успешно обработано. Получается, что пользователь потерял некоторые свои данные (удалены в исходной панели, но не получены в таргет).
Как быть?
1. Не позволять делать перенос на нативную плагиновую панель (вообще запретить Ф6 или пусть работает как Ф5?). Пользователь может Ф5, а потом уже удалить ручками, если видит, что все ОК.
2. Забить на этот нюанс и работать наудачу. Считаем, что пользователь жмет Ф6 если доверяет принимающему плагину, делает бекапы и т.п.
3. Что-то продвинутое. Но как узнать что такие-то и такие-то файлы не были приняты таргет панелью, чтобы их не удалять?
Раз соображений нет, иду по пути 2, наименьшего ограничения свободы. Будут проблемы (они возможны и описаны), будем смотреть дальше. Вообще, это все экзотика - *перенос* данных из Фарнет панели в панель нативного плагина. Возможно, никто и не будет никогда этим пользоваться. Копирование/перенос на диск - это да, надо, но с этим все должно быть ОК (или если баги, то будет ОК после исправлений).
MaximKat wrote:А с чего вообще началось разделение на GetContent и ExportFiles?
GetContent слишком примитивный подход, по-одиночный (и рекурсивно тоже ничего не будет работать, для папок не предназначен). ExportFiles задуман как пакетный, ориентированный на сложные операции с учетом специфики модуля (модуль и учитывает).