Afinogen / get-mail

Get Mail from POP3 or files
BSD 3-Clause "New" or "Revised" License
12 stars 3 forks source link

Имя файла неправильно выводится. #9

Closed c7v closed 2 years ago

c7v commented 3 years ago

Если я не ошибаюсь смотря на afinogen89\getmail\message\Attachment, то данная идея в тему, если ошибаюсь, прошу указать на ошибку.

Суть:

При сохранении файлов:

foreach($msg->getAttachments() as $t) {
    $t->saveToFile('/tmp/' . $t->filename);
}

В $t->filename передаётся, в том числе формат файла Выставленный счёт №154.pdf считаю это не правильным по скольку в данном примере filename (имя файла) это Выставленный счёт №154, формат файла нужно передать extension.

Предлагаю:

Имя файла Выставленный счёт №154 предлагаю передавать в $t->baseName, а формат pdf в $t->extension.

c7v commented 3 years ago

Если автор одобрит идею сделаю коммит с правками.

Afinogen commented 3 years ago

Не совсем понял сути проблемы. В данном примере в filename содержит полное именование файла включая формат. Каких-то определенных стандартов, что именно должен содержать filename нет. Так же еще надо учитывать, что бывает названия файлов в письмах идут как зря и не всегда удается правильно определить extension. Поэтому думаю надо отдавать имя файла как есть, а уже программист использующий библиотеку сам определяет нужен ему extension или нет.

c7v commented 3 years ago

Да, определить extension может быть невозможно по причине отсутствия формата, по этому в моём запросе на слияние, вы можете увидеть что extension по умолчанию null и если filename не проходит через регулярное выражение, то считаем baseName таким же как и filename. Принимая во внимание статью на ru.bmstu.wiki я понял, что формат файла можно получить из полного наименования файла filename, взяв то что написано с конца строки до первой точки. Этот подход покрывает большинство форматов, если не все.

Поэтому думаю надо отдавать имя файла как есть, а уже программист использующий библиотеку сам определяет нужен ему extension или нет.

От части согласен с вами, да отдаём полное наименование файла и разработчик сам решает что с ним делать. Я предлагаю не заменить filename на baseName и extension, я предлагаю внести в библиотеку удобство работы с ней.

В случаях когда библиотека используется в единственном месте в проекте и в единственном месте нужно определить формат или название (без формата) из filename и произвести какие-то действия, разработчик может сам написать пару строк кода для этого. Но если мы работаем с этой библиотекой во множестве мест в коде, и каждый раз нам нужно получать формат файла или название (без формата), для этого каждый раз писать (копировать) код или выносить данный код для парсинга полного наименования файла в отдельную функцию, неудобно и зачем? Если мы можем в библиотеке сделать это.

В этом и заключается проблема (о которой я так плохо написал в начале), по этому предложил внести baseName и extension для удобства, надеюсь, вы оцените и внесёте моё предложение.

c7v commented 2 years ago

Можно закрыть эту задачу, реквест удалил.