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

Generate name for StorageFile based on its mime type (#726) #756

Merged
merged 54 commits into from Dec 29, 2023

Conversation

Alienjob
Copy link
Contributor

@Alienjob Alienjob commented Dec 19, 2023

Resolves #726

Synopsis

Когда в профиле загружена аватарка, при её скачивании из галереи скачивается файл без расширения. При проверке обнаружилось, что при скачивании в name передаётся checksum, и файл имеет имя checksum без расширения.

Solution

Добавить метод generateFileName(url, checksum) в PlatformUtilsImpl
При сохранении в галерею когда расширение файла не задано - генерировать новое имя
Явно генерировать имя файла при сохранении аватара
При генерации для имени файла использовать его контрольную сумму или, если она не задана, текущее время
Для определения расширения файла проверить задано ли оно в url, если не задано - определить mime тип файла и назначить верное расширение

Checklist

  • Created PR:
    • In draft mode
    • Name contains issue reference
    • Has type and k:: labels applied
  • Before review:
    • Documentation is updated (if required)
    • Tests are updated (if required)
    • Changes conform code style
    • CHANGELOG entry is added (if required)
    • FCM (final commit message) is posted or updated
    • Draft mode is removed
  • Review is completed and changes are approved
    • FCM (final commit message) is approved
  • Before merge:
    • Milestone is set
    • PR's name and description are correct and up-to-date
    • All temporary labels are removed

@Alienjob Alienjob added bug Bugs and incorrectness problems k::UI/UX UI (user interface) and UX (user experience) changes labels Dec 19, 2023
@Alienjob Alienjob added this to the 0.1.0-alpha.12 milestone Dec 19, 2023
@Alienjob Alienjob self-assigned this Dec 19, 2023
@Alienjob Alienjob added enhancement Improvement of existing features or bugfix and removed bug Bugs and incorrectness problems labels Dec 19, 2023
@Alienjob
Copy link
Contributor Author

Alienjob commented Dec 20, 2023

FCM

Implement `StorageFile.name` getter to use in `BigAvatarWidget` (#756, #726)

Additionally:
- add `prefer_relative_imports` linter rule

@Alienjob Alienjob marked this pull request as ready for review December 20, 2023 09:28
@Alienjob
Copy link
Contributor Author

@SleepySquash Мы обсуждали что метод генерации имени можно расположить внутри класса StorageFile. Мне все еще кажется что это перегрузит модель лишними зависимостями от MimeResolver и CacheWorker. Как думаете, стоит его перенести внутрь класса или оставить в отдельном файле?

@SleepySquash
Copy link
Contributor

@Alienjob, не вижу проблем с импортом дополнительных классов в модель. Модели бизнес-логики вполне себе могут быть большим, чем просто DTO (примеры: Attachmentы, OngoingCall). Кроме того, если имя спрятать в отдельный класс, то будет больше зависимостей у классов, которые это имя захотят получать, тоже неприятно.

@SleepySquash
Copy link
Contributor

@Alienjob, имя и эмейл Вашего аккаунта в Git'е не совпадает с именем и эмейлом Вашего аккаунта на GitHub'е - посмотрите коммиты. Получается так, словно два разных человека ведут работу над PRом - GitHub будет считать Вас двумя людьми. Исправьте это, пожалуйста.

lib/ui/page/home/widget/big_avatar.dart Outdated Show resolved Hide resolved
lib/util/mime.dart Outdated Show resolved Hide resolved
lib/util/storage_file_extension.dart Outdated Show resolved Hide resolved
lib/util/storage_file_extension.dart Outdated Show resolved Hide resolved
lib/util/storage_file_extension.dart Outdated Show resolved Hide resolved
lib/util/storage_file_extension.dart Outdated Show resolved Hide resolved
lib/util/storage_file_extension.dart Outdated Show resolved Hide resolved
lib/util/storage_file_extension.dart Outdated Show resolved Hide resolved
lib/ui/page/home/widget/big_avatar.dart Outdated Show resolved Hide resolved
@Alienjob
Copy link
Contributor Author

@Alienjob, имя и эмейл Вашего аккаунта в Git'е не совпадает с именем и эмейлом Вашего аккаунта на GitHub'е - посмотрите коммиты. Получается так, словно два разных человека ведут работу над PRом - GitHub будет считать Вас двумя людьми. Исправьте это, пожалуйста.

@SleepySquash Исправил настройки. В новых коммитах будет идентично гитхабу. Если я правильно понимаю, при слиянии пул реквеста ветка будет удалена вместе с некоректными автором/почтой, поэтому старые коммиты не исправляю

lib/util/mime.dart Outdated Show resolved Hide resolved
lib/ui/worker/cache.dart Outdated Show resolved Hide resolved
lib/ui/page/home/widget/big_avatar.dart Show resolved Hide resolved
@Alienjob
Copy link
Contributor Author

Alienjob commented Dec 28, 2023

@SleepySquash Для веб:
Браузер берет имя из url, который оканчивается "/.jpg" и добавляет расширение ".jpeg" Получается jpg (4).jpeg.
Я не нашел способа изменить такое поведение.
whatwg/html#2722 - обсуждение проблемы без решения
https://html.spec.whatwg.org/#as-a-download - описание стандарта, который запрещает использовать чтот-то кроме ссылки

Есть тег "download" но он работает для ссылки .
Наверное нужна кнопка, или переопределить контекстное меню. Не уверен в необходимости - скайп веб просто блокирует контекстное меню на экране аватара и не дает сохранить картинку.

@SleepySquash
Copy link
Contributor

@Alienjob, т.е. в вебе вообще никаким образом невозможно указать имя сохраняемого файла? А есть источники какие-нибудь, которые это подтверждают?

@SleepySquash
Copy link
Contributor

@Alienjob, добавление basenameа тоже не работает?

<img src="" basename="dog" />

@Alienjob
Copy link
Contributor Author

@SleepySquash
Пробовал basename, download, filename

@SleepySquash
Copy link
Contributor

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

// TODO: Wait for HTML to support specifying download name:
//       https://github.com/whatwg/html/issues/2722

@Alienjob Alienjob force-pushed the 726-fix-extension-on-saved-avatar-image-file branch from c72a4c0 to cf4f9cf Compare December 28, 2023 10:01
lib/ui/page/home/widget/gallery_popup.dart Outdated Show resolved Hide resolved
lib/domain/model/file.dart Outdated Show resolved Hide resolved
lib/domain/model/file.dart Outdated Show resolved Hide resolved
@SleepySquash SleepySquash enabled auto-merge (squash) December 29, 2023 09:26
@SleepySquash SleepySquash enabled auto-merge (squash) December 29, 2023 09:32
@SleepySquash SleepySquash merged commit 04f0e34 into main Dec 29, 2023
22 checks passed
@SleepySquash SleepySquash deleted the 726-fix-extension-on-saved-avatar-image-file branch December 29, 2023 09:36
github-actions bot added a commit that referenced this pull request Dec 29, 2023
…#726)

Additionally:
- add `prefer_relative_imports` linter rule 04f0e34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Improvement of existing features or bugfix k::UI/UX UI (user interface) and UX (user experience) changes
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Avatar from MyProfile is being downloaded without an extension (.jpg, etc)
2 participants