Comments (5)
Ранее не было необходимости заморачиваться с относительными путями. Как вы себе представляете выбор типа пути в интерфейсе (разрешается фантазировать).
from mytetra_dev.
Если Вы имеете ввиду то, как я вижу выбор относительных путей в интерфейсе - то в этом нет необходимости - путь из абсолютного конвертируется в относительный и пользователю абсолютно не важно что храниться в базе, ведь он в итоге работает в интерфейсе с абсолютными путями.
Если же вопрос про выбор именно типа путей для ссылок, то в интерфейсе это может быть чекбокс "Использовать относительные пути для линков", если данная функция все-таки будет уверенно реализована и протестирована. Первично наверное стоит сделать такой переключатель в виде строки в конфиге (что я и сделал у себя, успешно собрал и протестировал вручную в работе для варианта с преобразованием и хранением относительных путей, которые берутся от директории приложения). Однако такой вариант (с путями, которые относительны от директории приложения) не решает проблемы совместного использования, если само приложение не лежит на разделяемом ресурсе и не запускается всеми пользователями с разделяемого ресурса.
from mytetra_dev.
Тогда как вам другие варианты:
-
Добавить в настройки "Префикс для относительных путей". Чтобы была возможность задавать относительные пути не относительно базы, а вообще относительно чего угодно.
-
Или сделать интеллектуальное преобразование пути "на лету", например через задаваемое регулярное выражение.
-
Не заморачиваться с путями, а решить проблему на уровне файловой системы и линков на нужные директории.
from mytetra_dev.
Я пока не очень хорошо понимаю архитектуру MyTetra, поэтому мои рассуждения могут быть слегка неверными. Однако вот что я думаю:
- Префикс для относительных путей для моего случая (>1 пользователя на ОС Linux) должен полностью решить проблему. В базе таким образом будет храниться путь от какой-либо директории и линки на файлы по этому пути будут работать у всех пользователей. Но для этого необходимо, чтобы пользователь выбрал не сам префикс, а именно "базовую" директорию и директорию, в которой хранятся файлы. Пример:
разделяемый ресурс - директория с содержимым
./share
./share/docs
./share/mytetra
./share/mytetra/data
./share/mytetra/trash
Далее - пользователи user1, user2 и user3. Соответственно для каждого из них пути хранения файлов будут выглядеть например так: /home/user1/share, /home/user2/Documents/share и /usr/share.
Соответственно где-то в настройках каждый из пользователей задает разделяемую директорию с файлами, на которые в базе есть линки и базовую директорию (предположим это директория data).
Для пользователя user1 - /home/user1/share/docs для файлов и /home/user1/share/mytetra/data в качестве базовой;
Для пользователя user2 - /home/user2/Documents/docs для файлов и /home/user2/Documents/mytetra/data в качестве базовой
Для пользователя user3 - /usr/share/docs для файлов и /usr/share/mytetra/data в качестве базовой. Таким образом для того, чтобы все три пользователя получали доступ к ссылкам на файлы в базе необходимо будет хранить ссылки такого вида: ../docs/file1, ../docs/file2 и т.п. А уже каждый экземпляр программы пользователей будет вычислять для работы полный путь, зная относительный и базовый (в некотором роде префикс).
Одним словом ключевая мысль - для совместной работы с линками в базе необходимо высчитывать относительный путь между самими файлами и какой-то общей точкой в файловой системе у всех пользователей. Можно конечно дать пользователю возможность выбирать эту общую точку, но вообще-то на роль такой общей точки идеально подходит именно директория data, потому как именно она точно будет присутствовать у всех пользователей, которые работают в базе. Минусы такого подхода - вряд ли получится сделать такое решение кросплатформенным (на мой взгляд, возможно я не прав). - Вариант с регулярным выражением не очень понял. Это относится к технической реализации расчета полного пути из относительного и обратно?
- Я попробую этот вариант в своем окружении и напишу позже.
from mytetra_dev.
Я проверил вариант с решением проблемы на уровне файловой системы и созданием симлинков. Действительно, этот вариант работает как надо, если у всех машин, которые разделяют ресурс, имеется симлинк на разделяемый ресурс (или его часть), который хранит те файлы, на которые надо ссылаться в базе. Лично я для такого симлинка выбрал путь в директории /home. Таким образом у пользователей базы, являющейся разделяемым ресурсом, осталось два ограничения:
- Указывать путь до файла необходимо через симлинк;
- Работает такой способ только для *nix.
Лично для меня проблема полностью решена (если не всплывет каких-то других обстоятельств в процессе использования). Если вы считаете, что более нативная реализация в MyTetra не требуется, то issue наверное можно закрывать. Спасибо за идею, не понимаю как я сам не догадался %)
from mytetra_dev.
Related Issues (20)
- Ошибка сборки ветки experimental в MacOS HOT 6
- Приложение не выходит по Quit, остается в правом нижнем углу HOT 5
- Ошибочный статус синхронизации HOT 3
- Не как не могу собрать mytetra HOT 4
- mytetra 1.44.136 - вылет при удалении строк таблицы HOT 1
- Большой размер табуляции в 10 символов. HOT 1
- Где находится последняя версия программы для Windows? HOT 8
- Проблемы с UTF-8? HOT 5
- Где смотреть список изменений? HOT 3
- В зашифрованных нодах не шифруются изображения HOT 3
- Tools->Preferences-> любая опция - окно на весь экран. Cancel/Ok не доступны HOT 2
- Тёмная тема и формулы HOT 1
- Не отображается иконка в System Tray, если не использовать sudo HOT 5
- 1_44_160_win32: Windows 10: Невозможно изменить шрифт текста при редактировании записи
- 1_44_160_win32: Windows 10: Как расшарить записи с коллегами?
- Не работают HTML спойлеры - которых очень сильно не хватает в mytetra HOT 1
- 1_44_1xx - Проблема при вставке HOT 4
- How strikethrough text? HOT 4
- Compile error on glibc-2.38-23
- При запуске синхронизации из приложения - крашится (MacOS) HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mytetra_dev.