3 февр. 2009 г.

readTag :: FilePath -> IO ID3Tag

доделал сегодня в более или менее приемлемой форме часть id3project отвечающую за чтение тегов.
то есть группу модулей с парсерами и модуль-обёртку с функцией, которая просто берёт файл и выдаёт весь тег в виде структуры данных.
тип этой структуры объявлен членом класса Show - так что можно просто применить функцию print к тегу и он будет выведен на экран в аккуратном, читабельном виде. и вообще можно таким образом преобразовывать структуру в текст, если нас не интересуют внутренние нюансы структуры тега.
сделал-то в общем я вчера. но сейчас подправил обработку кодировки - вроде всё правильно работает.

на настоящий момент 100%-ного соответствия стандарту нету (кстати речь пока только о id3v2). поскольку там много тонкостей с флагами - во-первых я не очень понимаю назначение некоторых из них,, а во-вторых некоторые из них требуют использования дополнительных библиотек, как то компрессия или перекодирование фреймов и тому подобные хитрости.

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

100% поддержка стандарта пока не предполагается,, поскольку это не очень-то нужно. я полагаю что в тегах редко используется компрессия и тому подобные заморочки - никто не заморачивается. да и из фреймов используется небольшой набор. другое дело что попадаются те, которые используются в реальности, но не описаны в стандарте - например я встретил фрейм TYER который содержит год выпуска альбома, но в стандарте для этого используется TDRC. поэтому важно добавить поддержку "неофициальных", но реально используемых фреймов.

а так в общем-то всё здорово. следующий шаг - обратное преобразование: корректная запись абстрактной структуры тега в файл. дальше замена, добавление, удаление, редактирование тега - это всё просто. ну и разумеется надо сделать для этого какой-то интерфейс..
сложно придумать "интуитивно-понятный" интерфейс - это идеал. надо будет почитать ещё Джефа Раскина на тему интерфейсов - у него есть интересные идеи. хотя для меня Vim уже опроверг одну из его заповедей - он категорически против модальности (то есть интерфейса с режимами),, а у Vim'а на этом построена вся идеология - "в одном режиме он всё портит, а в другом бибикает" (:

Комментариев нет:

Отправить комментарий