Тема: Восстановление записей из корзины
Нашел я все таки корзину. Ей оказалась отдельно расположенная одноименная папка. Однако мне не понятен алгоритм восстановления из нее записей. Не могли бы вы прояснить алгоритм по которому надо действовать?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форум сайта Webhamster.ru → MyTetra - менеджер накопления информации. Обсуждение, багрепорты, помощь. → Восстановление записей из корзины
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Нашел я все таки корзину. Ей оказалась отдельно расположенная одноименная папка. Однако мне не понятен алгоритм восстановления из нее записей. Не могли бы вы прояснить алгоритм по которому надо действовать?
Корзина в том виде, в котором она есть сейчас - это задел на будущее. Восстановить из нее запись можно вручную, при всяких форсмажорах. В корзину скидываются файлы базы MyTetra перед их перезаписью. То есть, когда файл должен измениться, вначале его копия помещается в корзину, а потом он меняется. И еще в корзину попадают файлы удаленных записей. И при изменении дерева в корзину попадает копия файла делева mytetra.xml. Можете поэкспериментировать: поудалять, поизменять записи, и вы увидите как появляются новые файлы в корзине и удаляются старые.
Имена файлов в корзине генерируются автоматически: "TempUID_имяфайла.расширение". TempUID - это уникальный идентификатор, содержащий в начале себя время UNIX timestamp и случайную строку для избегания коллизий с вероятностью 10^-15 в секунду появления файла. Например, при удалении записи с одной картинкой, в корзине появятся файлы:
14950891894te1zbcsth_mytetra.xml - файл дерева перед удалением записи
1495089189i5ua2dsfjh_text.html - файл текста записи
1495089189cfl7z52n7l_image5288.png - картинка, используемая в записи
Если удаляемые/изменяемые данные не были зашифрованы, то вручную восстановить запись просто. Во-первых, вы их можете посмотреть чтобы понять, та ли эта запись которая нужна. Во-вторых, вы можете создать пустую запись, найти каталог этой записи (сделать видимым столбец "Имя директории" или нажать в контекстном меню "Скопировать ссылку на запись", в ссылке увидеть идентификатор и по нему найти имя директории в файле mytetra.xml). И вот в этой директории нужно подменить файлы записи (html и png), предварительно переименовав их путем удаления префикса "TempUID_". Название и прочие атрибуты удаленной записи можно найти в файле 14950891894te1zbcsth_mytetra.xml, и потом прописать их в интерфейсе MyTetra или напрямую отредактировать файл mytetra.xml.
Внимание! В момент ручной работы с базой MyTetra должна быть выключена. Или, как минимум, в момент подмены файлов записи, курсор должен стоять на другой записи (если вы только подменяете запись) плюс должна быть включена настройка "Периодическая проверка дерева записей..." если вручную меняете mytetra.xml и у вас при этом MyTetra работает.
Если удалялась зашифрованная запись, то дайствия те же самые, только посмотреть содержание файлов вы не сможете пока не поместите их в MyTetra. Понять какие файлы относятся к удаленной зашифрованной записи можно коственным путем - по времени удаления записи (соответственно по времени создания файла в корзине), по размеру файла ..._text.html (размер зашифрованного файла отличается от нешифрованного только дополнительным размером заголовка в 32 байта плюс несколько байт в хвосте для выравнивания на размер блока). При засовывании зашифрованных файлов вручную обратно в базу надо учесть, что они нормально восстановятся только в случае, если пароль не менялся.
Возможно я когда-нибудь сделаю MyTetra Crypt Tool, чтобы можно было расшифровывать файлы, зная пароль.
Ну а вообще предполагается, что когда-нибудь появится интерфейс для восстановления записей из корзины. Но как-то он оказался особенно не нужен, потому что многие настраивают резервное копирование/синхронизацию данных через системы контроля версий, и в случае проблем могут откатиться с помощью них.
Я примерно так себе и представлял. У меня возникла идея, как просматривать записи из корзины с помощью несложного, как мне кажется "костыля". Его создание и алгоритм я опишу в следующем посте.
Все таки не все люди пользуются таким резервным копированием, которое выполняется настолько часто, что позволяет вытащить записи, которые были созданы и удалены совсем в короткий промежуток времени. Поэтому для меня приоритетней иметь возможность сиюминутно зайти в корзину и просмотреть что в в нее попало.
Мое решение, которое реализует функционал корзины.
1. Введем понятие "Режим корзины" - это такой режим работы приложения MyTetra, в котором работа происходит с удаленными записями. Вместо них при открытии приложения, в корневой папке находятся 2 ветки с названиями "корзина" и "восстановление".
В ветке "корзина" находятся все записи, которые были удалены. Ветка "Восстановление" изначально пуста. Пользователь должен самостоятельно найти среди удаленных записей те, которые следует восстановить и переместить их в ветку "восстановление". После перемещения этих записей следует произвести экспорт ветки "восстановление" в отдельную папку. Затем следует выйти из программы и сменить "Режим корзины" на "Нормальный". Загрузить программу в "Нормальном режиме" и произвести импорт отобранных для восстановления записей.
2. Для перевода программы в "Режим корзины" следует:
- Заранее создать папку к примеру "Архивные копии". Единоразово.
- В эту папку произвести архивирование следующих файлов:
mytetra.xml (файл основной базы данных)
conf.ini (из каталога программы)
Там будет склад файлов к примеру 18052017204023archive.zip
Перед каждым переводом программы в "Режим корзины" будет создаваться новый архив и добавляться в эту папку. Это действие будет производится автоматически, скриптом.
3. Перед переводом программы в "Режим корзины" рядом с папкой "trash" создается папка "trash_export" (в случае если папка уже существовала, она очищается). В этой папке создаются подпапки "data" "trash". В папке "data" создаются все нужные файлы для работы полноценной базы данных. Для каждой удаленной записи из корзины создаются соответствующие папки в подпапке "base". Данные берутся из файлов *_mytetra.xml и аккумулируются в одном новом файле mytetra.xml.
4. Файл "conf.ini" переименовывается в "conf.ini.tmp". Вместо него создается новый файл, в котором прописаны пути к базе данных "trash_export".
5. Запускается программа. В ней пользователь производит необходимые манипуляции и выгружает восстанавливаемые записи в отдельную папку.
6. После выхода из программы пользователь запускает скрипт перевода программы в "Основной режим". Производится переименование "conf.ini" в "conf.ini.exp.tmp" и файла "conf.ini.tmp" в "conf.ini".
7. Запускается программа и в ней пользователь производит импорт отобранных записей и распределяет их по своим местам.
Я мог бы попробовать реализовать эту идею. Однако сразу скажу что я не программист. У меня есть определенные знания в следующих сферах, в каждой понемногу:
- могу написать простой bat файл
- как ни странно я раньше неплохо разбирался в регулярных выражениях. И сейчас вспомнить их думаю не составит труда.
- есть кое какие навыки программирования на уровне написать несложный скетч для arduino.
- Когда учился разбирался в бейсике и паскале. Даже ходил на кружок ассемблера целый месяц. Почти все забыл сейчас.
Для меня в этой реализации будет по силам произвести операции по переименовыванию файлов, созданию архивов и другие похожие операции путем создания bat файла. Но будет довольно сложно работать с xml файлом, производить запись в него новых строк и т.д. Я даже не представляю в какой среде это легче всего сделать и с чего начать. Если бы кто помог, или хотя бы направил в нужную сторону я бы попытался это сделать. Чисто из спортивного интереса. Проветрить свои нейронные сети так сказать.
Я мог бы попробовать реализовать эту идею.
Это будет сложно даже для меня как для автора программы. Работа большая. Лучше придумайте какие-нибудь консольные программы-помогаторы на PHP, с помощью которых можно выполнять действия с базой MyTetra. Попробуйте все что вы написали реализовать в виде PHP-скрипта: запускаете, он лезет в корзину, находит файлы, составляет список, показывает его пользователю, спрашивает что восстановить, и восстанавливает, создавая через DOM в mytetra.xml нужные ветки, создавая каталоги восстанавливаемых записей, помещая туда файлы восстанавливаетмых записей, правильно их переименовывая.
Вот это будет действительно нужная вещь, и вам будет более реалистично ее сделать.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум сайта Webhamster.ru → MyTetra - менеджер накопления информации. Обсуждение, багрепорты, помощь. → Восстановление записей из корзины
Форум работает на PunBB, при поддержке Informer Technologies, Inc
Currently installed 2 official extensions. Copyright © 2003–2009 PunBB.
Сгенерировано за 0.018 секунды (74% PHP — 26% БД) 9 запросов к базе данных