Комп’ютерні нотатки на полях Kodi - зміна шляхів до файлів у БД MySQL
Цей блог про те, якими я користуюся гаджетами, якими хотів би користуватися, які і як я долаю труднощі, щоб змусити все це працювати. Програми, пристрої, операційні системи - все, що потрапляє до моїх рук, все знаходить тут відображення.
Kodi - зміна шляхів до файлів у БД MySQL
| Типи можливих сховищ |
І ще трохи про джерела. Під одним джерелом може ховатися не одне, а кілька місць зберігання інформації. Тобто можна логічно об'єднати в одному джерелі кілька мережевих каталогів, наприклад.
| Дані з двох пристроїв представлені в одному джерелі |
Як би там не було, незабаром було придбано старшого брата мого домашнього NAS-а - WD MyBook Live Duo. Мій екземпляр - це дводисковий пристрій, кожен диск по два терабайти. Використовую я його в режимі RAID 0 (хоча є твердження, що це не RAID 0, а так звана spanning конфігурація дисків - виробник не вважав себе зобов'язаним точно вказати технологію, що використовується), тобто, він видно моїм пристроям, як один диск розміром чотири терабайта .
Природно, щойно пристроїв стало два, постало питання правильної організації бібліотеки. І, якщо чесно, я полегшено зітхнув, коли зрозумів, що до вже існуючого джерела можна просто додати нове сховище. Таким чином, логічний джерело для, наприклад, серіалів, один, а фізично файли розміщені на різних NAS-ах.
Але розробники Kodi (XBMC) пішли ще далі - вони навчили свою програму логічно об'єднувати та відображати дані як єдине ціле, якщо структури зберігання (частина шляху до файлів) збігаються. Ну наприклад. Маю серіал. Перші кілька сезонів зберігаються у мене на WD MyBook Live.Нехай шлях буде таким: /TVSeries/VeryGoodFictionShow (назва вигадана), а там підкаталоги Season-1, Season-2 і Season-3. Нові серії я розміщую на WD MyBook Live Duo. Якщо я назву підкаталоги, в яких зберігаються епізоди цього серіалу, однаково, то Kodi, при відображенні, покаже їх разом. Тобто, на іншому пристрої відтворюю структуру каталогів: /TVSeries/VeryGoodFictionShow і створюю там підкаталог Season-4. Kodi відобразить їх, так, як ніби всі сезони лежать разом, в одному батьківському каталозі. Більше того, якщо на старому пристрої не вмостилося закінчення третього сезону, то на новому створюємо підкаталог Season-3 і нові серії поміщаємо туди. Kodi покаже усі серії третього сезону єдиним списком. Але якщо помилитеся хоч в одній літері у файловому шляху - не чекайте чудес, медіакомбайн не зможе логічно поєднати вашу інформацію.
Налаштування джерел зберігається у XML файлі sources.xml. Модифікація джерел, додавання їх чи видалення - все знаходить свій відбиток у цьому файлі. Так як у мене використовується кілька екземплярів Kodi, то щоразу при змінах джерел доводилося перекручуватися, щоб зміни були враховані скрізь. Я спробував багато методів, поки не зупинився на використанні спільного для всіх установок єдиного файлу sources.xml . Я розмістив його на мережному диску і змінив налаштування всіх Kodi (файл advancedsettings.xml) так, щоб вони дивилися на цей спільний файл. Власне, я все це вже описував. Але, як кажуть, повторення – мати вчення.
Отже, мені потрібно було замінити три імені на відповідні IP. Чи багато це чи мало? По-перше, хотілося б позначити, які саме імена я збирався замінити на IP. Це, як я вже казав, ім'я хоста, на якому було запущено MySQL. Крім того, для повноти картини, ямав намір замінити імена MyBook Live та MyBook Live Duo у всіх джерелах. Здавалося б, що тут такого, виправляєш файли advancedsettings.xml (там вказано комп'ютер з MySQL) та sources.xml (там описані джерела) – ось і всі справи. Але все не так просто.
Тут треба згадати, що я маю централізовану базу даних, в якій зберігається інформація про мою бібліотеку, включаючи інформацію про шляхи до моїх медіафайлів. Більше того, шлях до файлу - це унікальний ключ, на якому зав'язано дуже багато. І, якщо я поміняю шляхи до сховищ у налаштуванні джерел, можуть виникнути неприємні ефекти.
І це не просто теорія. Після зміни налаштувань джерел, я з необережності запустив Kodi. Функція оновлення бібліотеки у мене налаштована на автоматичне виконання під час запуску медіакомбайна. Коли я побачив назви файлів, що замиготіли (у мене включений прапор відображення процесу оновлення), я вимкнув Kodi, але кілька десятків файлів встигло задублюватися (ну так, гальмував я).
| Парочка налаштувань з автоматичного оновлення бібліотеки |
Після описаних подій стало ясно, що доведеться або створювати бібліотеку наново, або правити інформацію безпосередньо в БД.
Перестворити бібліотеку дуже нескладно. Потрібно джерело змінити тип вмісту на "None", після чого Kodi запросить попередження на видалення з бібліотеки всіх даних, асоційованих з файлами з цього джерела. Після завершення процесу видалення треба повернути тип вмісту джерела у старе значення - тоді Kodi заново відсканує вміст джерела.
| У цьому елементі вибирається тип вмісту джерела, включаючи і "ніякий" |
Отже, почнемо. Насамперед нам знадобиться інструмент для роботи з БД MySQL. Япорився в інтернеті, почитав відгуки та вибрав - HeidiSQL. Встановлення цієї програми нічим не примітне, так що не буду на ній докладно зупинятись. Коли установка завершена, запускаємо програму та підключаємося до потрібної БД – тут треба згадати пароль користувача БД. Але якщо не пам'ятаєте – не біда, він записаний у файлі advancrdsettings.xml, втім, як і ім'я користувача. Найцікавіше починається саме зараз, після підключення до БД.
HeidiSQL має дуже цікаву функцію, яка, зрештою, сильно мені допомогла. Це пошук тексту по всій базі даних. Для доступу до цієї функції необхідно вибрати відповідний пункт меню.
Після вибору на екрані з'явиться вікно, в якому ви вказуєте, яку базу даних хочете прошерстити, і що, власне, збираєтеся шукати.
Після цього програма починає пробігати об'єкти БД у спробі виконати ваше завдання, і, по завершенні цього процесу, видає на екран список об'єктів із зазначенням того, скільки рядків цього об'єкта містять підстроку.
Один сум, у цьому списку "змішалися в купу коні, люди". Тобто у списку присутні таблиці, уявлення (view), навіть тригери. Я вирішив, що мене цікавлять лише таблиці. Чому? Так, я знаю, що в MySQL деякі уявлення є редагованими, тобто, зміна значення в поданні призводить до зміни цього значення і в таблиці, на підставі якої побудовано уявлення. Але є обмеження на те, які view можна змінювати, а які - ні. Я не хотів розбиратися в тому, як побудовані уявлення в БД Kodi і чи не порушують вони цих правил, тому і вибрав таблиці.
Після виведення на екран списку об'єктів можна натиснути кнопку "Показати результати" і на екрані будуть виведені об'єкти зі своїм вмістом.один объект - одна закладка.
оновити арт-набір url = replace(url,'//MYBOOKLIVE/','//XXX.XXX.XXX.XXX/'); оновити арт-набір url = replace(url,'//MYBOOKLIVEDUO/','//YYY.YYY.YYY.YYY/'); оновити набір епізодів c18 = replace(c18,'//MYBOOKLIVE/','//XXX.XXX.XXX.XXX/'); оновити набір епізодів c18 = replace(c18,'//MYBOOKLIVEDUO/','//YYY.YYY.YYY.YYY/'); набір файлів оновлення strFilename = replace(strFilename,'//MYBOOKLIVE/','//XXX.XXX.XXX.XXX/'); оновити набір фільмів c22 = replace(c22,'//MYBOOKLIVE/','//XXX.XXX.XXX.XXX/'); оновити набір фільмів c22 = replace(c22,'//MYBOOKLIVEDUO/','//YYY.YYY.YYY.YYY/'); набір шляху оновлення strPath = replace(strPath,'//MYBOOKLIVE/','//XXX.XXX.XXX.XXX/'); набір шляху оновлення strPath = replace(strPath,'//MYBOOKLIVEDUO/','//YYY.YYY.YYY.YYY/'); оновити набір зображень url = replace(url,'%2f%2fMYBOOKLIVE%2f','%2f%2fXXX.XXX.XXX.XXX%2f'); update art set url = replace(url,'%2f%2fMYBOOKLIVEDUO%2f','%2f%2fYYY.YYY.YYY.YYY%2f'); здійснити роботу;
Перед тим, як запустити скрипт в HeidiSQL, я зробив бэкап поточного стану БД. Опять же, використовуючи HeidiSQL.
У відповідь на вибір пункту меню «Експорт баз даних у SQL» програма виведе вікно, яке дозволяє виконати деякі параметри експорту. Я приведу свій варіант заповнення цього окошка.
Немного пояснений. Во-перше, відзначаємо базу даних, яку хочуть експортувати. Во-вторых, вказуємо, які команди потрібно включити в генерований скрипт для самого БД і таблиці. Я вибрав і для БД і для таблиці галки "Уничтожить" і "Создать". Основание самое что ни на есть простое - если что пойдет не так - забудем все, как страшный сон (импорт пересоздаст базу с нуля). На самому місці, наверное, можна було поставити виключеними обе галки для БД, але мені показалось, що так буде надійніше. В-третіх, вибираємо, якимТаким чином, дані повинні потрапити в таблиці. Так як я вибрав по суті перестворення і БД і таблиць, то логічно вибрати вставку даних (insert). Ну і наостанок, по-четверте, я вказав ім'я файлу, використовуючи шаблони, які розуміє HeidiSQL. Розшифрую мій вибір ( %host_%db_%y%m%d ): ім'я файлу буде зібрано наступним чином - ім'яхоста_ім'яБД_РікМісяцьДень.sql
Отримавши резервну копію БД, я запустив наведений вище скрипт і отримав, що хотів. Запущений після Kodi правильно відобразив інформацію про вміст джерела та правильно програвав запитані файли.
Так, на завершення, хочу навести посилання на документацію самого Kodi щодо проведення щойно описаної мною процедури. Є збіги, є відмінності. Треба сказати, що це посилання я знайшов вже після того, як зробив усі описані маніпуляції самостійно. Ось такі справи.