крутой проводник
суть в сокрытии каких-то данных за иерархией как в файловой системе.
логика записана в классе, который наследует класс section. у него есть функции перехода по пути, создания или удаления папки, поиска и т.д.
например filesection в функции перехода по пути принимает путь к папке и возвращает её содержимое
но возвращает в сереализуемом формате, в pydantic-модели.
если передан пустой путь, то в случае винды возвращается список подключённых дисков, которые тоже папки по сути.
директории возвращаются в том же формате, что и файлы, но с флагом
но для обёртки section используются profile, который должен содержать путь к классу секции, настройки и название, и между этими профилями идёт переключение
хочу ещё ftpsection, mediasection, shortcutssection
но зачем если проблемы решаются по мере их наступления?
ftpsection предполагает, что в профиле к нему нужно передать пароль имя и ссылку, что предполагает открытие окна с вводом этих полей. в ftp клиентах, у которых фтп основная функция, это окно само подразумевается, но в какой сущности оно будет существовать в этой концепции?..
тут сталкиваемся с проблемой, что фронтенд часто повторяет повадки бекенда и во многом на него опирается, ну и организации файлов. бля это так бесить наверное будет всё сводить под функцию или какой-то класс вызываемый
ShortcutsSection это что-то типо пуска, но ярлыки хранятся в sqlite
Вот такой дизайн нарисовал в 2024. (ярлыки вокруг солнца а вращать с помощью стрелочек)
где там будет иерархия если в бд такого типа всё в одной таблице? тогда для таблицы ярлыков нужна колонка типа is_dir и таблица связей и колонка order ещё
но так же нужна и корневая директория потому что иначе будут отображаться все вещи в бд
но это к самим шорткатам не относится и это такой миксин
ну а в таблице хранится ссылка на кешированный значок, название и путь к файлу для которого ярлык сделан
и всё по виртуальным директориям разбито вот
ну и какую-нибудь папку для прикреплённых значков сделать.
а что делать если уже есть папка с ярлыками в папке юзера? можно какой-то импорт сделать но он всегда неактуален будет
нууу можно какое-то замыкание сделать чтобы типо была папка в бд которая выводит содержимое реальной папки нооо это уже будет не в формате sql
система файлов тем и пиздата что существует сама по себе
ещё MediaSection
вообще в вк прикольно с сохранёнками было, типо одним кликом можно сохранить себе мем
но там не было поиска а ещё фото копировалось с авторством от самого себя и непонятно потом будет откуда она взялась
ну вот, а MediaSection у этого будет создавать сущность media с той же системой иерархии, что и в shortcutssection
но колонок больше, добавляется описание и источник
источник с типом и ссылкой, если url то картинка берётся со ссылки
и превью какое-нибудь
и помимо картинок аудио и видео
но всё для этого окошка, типо win+v но он открывает хранилище гифов, картинок и прочего которое ты насобирал внутри профиля с MediaSection, при нажатии они вставляются и ещё по ним можно искать
но зачем если подходящий гиф проще найти вручную, и синхронизации нет ещё
что-то похожее на krunner
проблемы тут такие:
а если у чела уже есть коллекция картинок то как он перенесёт в такую бд, если директория с этими картинками часто обновляется?
но вообще проблем мало просто это слишком заёбисто
редактор html
PoC: https://crythoughts.github.io/html-editor/
главная сущность это проект, он имеет название и массив со страницами, страница содержит в себе объекты нод
и это буквально dom дерево но в формате json, и у каждой ноды есть id чтобы к ней перейти
у проекта есть компоненты, компонент включает в себя ноды и переменные, атрибуты нод в компоненте могут быть этими самыми переменными
ещё чтобы зафиксировать цвета есть палитры и цвета можно из неё использовать типо
ну и нода страницы которая вставляет компонент имеет особый тип и в ней можно вводить переменные
в самом редакторе есть пресеты которые можно поместить на страницу, заголовок допустим, при помещении открывается окно где вводится этот самый заголовок.
ну и кастомные пресеты но там окно уже не получится сделать
чем-то напоминает редактор в геометри деш но без игрока
ещё особый тип страниц это страницы с макетом, как в шаблонизаторах, остальные страницы могут наследовать один из таких макетов
в юи слева редактор, справа превью, сверху кнопки ctrl+z и ctrl+y и сохранить, снизу выбор инструмента
инструменты из разряда - дефолтный курсор, выделение элементов, скейл, поворот, перемещение, цвет заливки обводки и текста, перо, вёрстка и тд.
но проблемы такие, а как изобразить вёрстку? то есть может быть сделать инструмент вставки flex/grid container, при нажатии на элемент он вставляется внутрь него, потом там сверху меню с выбором gap, align items и justify content.
но это неудобно... вот в фигме там нарисовал квадрат и он не имеет ответственности быть правильно размещённым в dom. но в html надо думать
и я так думаю что вёрстка и дизайн это далёкие вещи, поэтому визуальный редактор html будет сделать птздец как сложно, к тому же его невозможно встроить в уже существующую систему
можно лишь принять неидеальности и работать с ними ^_^
ещё один редактор
тут с html редактором схоже. есть сущности проектов, есть список проектов. проект содержит название автор описание даты и массив с canvas
canvas это класс в котором что-то рисуется, он имеет ширину высоту
в общем то он тоже содержит в себе ноды, и нода которая выше всех это камера
в AE камера привязана к холсту, но тут наоборот, мейби будет легче делать вот эти видео где справа налево и там топ городов по населению в саратовской области
у canvas есть камера и остальное. директории это слои, слой включает в себя объекты
объект это экземпляр класса который наследует там абстрактный класс Object. объект должен что-то отрисовать, например текст с определённым размером или цветом.
объекты могут быть там это бинарные данные, текст, геометрия, подключение к камере, типо виджеты в обс
и он отрисовывается на всю площадь которая ему доступна, а слой выполняет трансформацию, располагает в композиции, поворачивает и меняет размер. слой по сути отвечает за один объект, и при выделении слоя выделяется именно то, что уже им трансформировалось
ну и есть слои для слоёв типо директории -_-
для слоёв есть модификаторы, эффекты. то бишь при рендере одного слоя после этого к нему применяются эффекты, которые выполняют свою функцию рендера, но уже с этим слоем
потом при превью все слои которые не скрыты соединяются и отображаются
у самого редактора есть инструменты, например кисточка и заливка
но блин а если всё хранится в json то как сохранить бинарные данные?? хз
у слоя так же должны быть anchor point вокруг которой крутиться
а фильтры это то, что применяется единожды и не отключается, в отличии от эффектов
каждое действие нужно сохранять для возможности отката, но хз как это обычно делают
эффекты могут применяться как к слою так и к объекту в слое, а в слое мб может быть больше двух объектов
но будет прикольно если эти слои будут изменяться со временем. тоди у канваса будут поля начала и конца, а слои.. ну по сути монтажная программа включает в себя вырезку, поэтому тут у канваса появляется таймлайн, в котором?? по времени расставлено появление слоёв. да и ещё нужны переходы которые берут два слоя в качестве аргументов и делают своё дело.
а ещё нужны кейфреймы, они идут от точки а к точке b, поэтому это может быть и массив из кейфреймов. но в AE они применяются к конкретному свойству, которое хотят анимировать, и там ещё интерполяция есть. мейби просто задавать значение в начале и значение в конце
потом при рендере оно соединит все дорожки и эффекты, применит кейфреймы и изменения камеры
абстрактный класс import и export будут задавать логику как экспортировать, рендерить не знаю как
а так же у проекта должен быть список файлов и директорий внутри себя, потому что чел может захотеть вставить файл с компьютера.
ну проблемы очевидны это оч долго делать