Постановка задачи
В настоящее время существуют большие библиотеки видеофильмов и сериалов (художественные, мультипликационные и т.д.). Однако, пользователям, кроме названия, отзыва и других характеристик фильма, хочется узнать его аннотацию, это представляет наибольший интерес как при выборе фильма для просмотра, так и после просмотра.
В сети Интернет существуют множество аннотированных библиотек фильмов. Для их использования необходимо постоянное подключение к сети Интернет, однако у пользователя нет возможности редактировать информацию о фильмах, добавлять свои комментарии и метки, что является существенным недостатком.
Анализируя сказанное, сформулируем задачу: разработать приложение, управляющее объектами базы данных не зависящее от системного программного обеспечения на примере базы данных фильмов и сериалов.
В ходе работы были использованы следующие программные средства: язык программирования C++ (стандарт 98/03), библиотеки Qt версии 4.8.1, Jvascript, HTML и CSS.
Архитектура приложения
Основные требования, которые предъявлялись к «My Movies Collection»:
- Кроссплатформенность;
- Возможность запуска без установки на компьютер;
- Пользовательские шаблоны;
- Система плагинов.
Ниже представлен список модулей Qt, которые использует «My Movies Collection». Все они располагаются рядом с исполняемым файлом приложения.
- Модуль QtCore (базовые функции Qt);
- Модуль QtGui (графический интерфейс пользователя);
- Модуль QtNetwork (функции для работы с сетью);
- Модуль QtSql (функции для работы с базами данных);
- Модуль QtWebKit (функции для работы с браузерным движком WebKit).
Первым этапом разработки приложения был этап проектирования и реализации графического интерфейса главного окна (рис. 1).

На данном этапе было реализовано меню с поддержкой клавиатурных сокращений, панели инструментов, которые можно перемещать и закреплять как угодно.
Были реализованы следующие виджеты:
- виджет списка с названиями фильмов, а также контекстное меню к нему, в котором содержатся основные действия, выполняемые над фильмом;
- виджет дерева, который группирует названия фильмов по выбранному параметру. Этот виджет также имеет контекстное меню, как и виджет списка фильмов;
- виджет области информации о фильме. Он представляет собой браузер, основанный на движке WebKit. Имеет свое контекстное меню для доступа к часто используемым функциям. Он позволяет отображать произвольный html-код, так что пользователь может писать свои шаблоны для отображения.
Также была реализована статусная строка, которая отображает информацию о типе сортировки, об общем количестве фильмов в базе и о количестве отображаемых в списке на текущий момент фильмов.
База данных
Следующим этапом является создание базы данных. База данных состоит из шести таблиц: movies, genres, images, filters, labels и seasons.
Главной таблицей базы данных является таблица movies. В ней содержится вся основная информация о фильме или сериале. В базе не может содержаться два фильма с одинаковым названием, это проверяется на этапе ввода информации пользователем через графический интерфейс и на этапе выполнения SQL-запроса на добавление информации в базу.
Таблица genres хранит информацию о жанрах для каждого фильма из таблицы movies. Она связана с таблицей movies внешним ключом movie_id. В базу нельзя добавлять свои жанры, она работает с 22 жанрами. Если поле жанра, например comedy, хранит значение true, то название этого жанра отобразится в области информации о фильме.
Таблица images хранит скриншоты для каждого фильма из таблицы movies. Она связана с таблицей movies внешним ключом movie_id. Данные в images хранятся в бинарном виде. Конкретнее, это изображения в формате PNG, представленные в виде массива байт.
Таблица filters хранит пользовательские фильтры (поисковые запросы). Она не связана с другими таблицами. Ее задача заключается только в сборе и хранении поисковых запросов. Поле filter_name хранит название фильтра, чтобы пользователь мог его использовать в приложении. Поле filter_string хранит сам поисковой запрос.
Таблица labels хранит все метки, добавленные пользователем. Она не связана с другими таблицами. Ее задача совпадает с задачей таблицы filters, только контентом являются пользовательские метки.
Таблица seasons хранит информацию о сезонах и сериях для всех сериалов из таблицы movies. Она связана с таблицей movies внешним ключом movie_id. Хранит номер сезона первым полем и информацию о сериях вторым.
Карта фильма и интернет-поиск
На данном этапе сначала реализовывалось окно «Карта фильма» (рис. 2). В дополнение к нему было реализовано окно выбора жанров (рис. 3) и окна выбора (рис. 4) и управления метками (рис. 5).

В окне выбора жанров пользователь проставляет галочки на нужных ему жанрах и нажимает «Применить». После этого в окно «Карта фильма» передается список с выбранными жанрами. Из него формируется строка жанров.

В окне выбора меток пользователь выбирает нужные ему метки и нажимает «Применить». После этого в окно «Карта фильма» передается список с выбранными метками.

Кроме выбора, есть возможность и управления метками. После открытия окна управления метками, создается список с уже существующими метками. При добавлении или удалении метки удаляется элемент из этого списка, а не метка из базы. После нажатия на кнопку «Применить», к базе данных делается запрос на удаление всех меток, и последующее добавление содержимого этого списка.

Интернет-поиск является самой интересной функцией, так как дает возможность максимально быстро получать информацию из сети Интернет.
Окно интернет поиска изначально проектировалось как многостраничное с использованием менеджера компоновки QStackLayout, т.е. в пределах одного окна существует несколько представлений (view).
Наибольший интерес с точки зрения разработки вызывает написание собственных плагинов для поиска информации в сети интернет.
Возможности приложения
Разработанное приложение «My Movies Collection» позволяет:
- Создавать, открывать, сжимать базу;
- Добавлять, редактировать и удалять фильмы;
- Экспортировать информацию о фильмах и сериалах в файл;
- Импортировать информацию о фильмах и сериалах из файла;
- Управлять собственными метками и искать фильмы по ним.
- Осуществлять быстрый поиск по названию, либо расширенный поиск с возможностью учета до 15 параметров;
- Показывать случайный фильм;
- Осуществлять поиск в поисковой системе Google и на wikipedia.org;
- Сортировать фильмы по названию, оригинальному названию, рейтингу, дате добавления и в порядке добавления (без сортировки);
- Группировать фильмы по первой букве названия, году, жанру, стране, режиссеру, актеру и метке.
- Осуществлять быстрый показ новых фильмов (за сегодня, за последние 7, 15, 30 дней);
- Осуществлять быстрый показ фильмов по поисковому запросу (персональному фильтру), который был сохранен ранее.
- Получать информацию о фильме из сети Интернет с помощью плагинов;
- Подключать собственные плагины для поиска информации.
- Производить смену языка (английский и русский);
- Запускать приложение на операционных системах Windows, Linux и MacOS.
- Просматривать постеры и скриншоты по клику на изображение;
- Быстро менять и сбрасывать рейтинг по клику;
- Открывать веб-страницу фильма в браузере;
- Быстро изменять состояние просмотра серии или всего сезона сразу;
- Быстро добавлять, удалять, сохранять на диске постеры и скриншоты;
- Подключать собственные шаблоны для отображения данных.
Сравнительный анализ
На сегодняшний день в сети Интернет существуют день два самых популярных каталогизатора «AllMyMovies» и «ArchiVid». Однако и эти приложения не лишены недостатков. Одним из главных недостатков является то, что для использования таких библиотек необходимо постоянное подключение к сети Интернет, так как большинство из них представлено в виде веб-сайтов. Следовательно, пользователь изначально лишен возможности автономной работы с этими библиотеками фильмов. К другим недостаткам таких библиотек можно отнести то, что у пользователя нет возможности редактировать информацию о фильмах, управлять своими комментариями, метками, сохранять для последующего использования поисковые запросы и многое другое.
Базовый функционал всех каталогизаторов совпадает (добавление, удаление, редактирование, поиск, сортировка, группировка и др.), поэтому далее будут рассмотрены три веские причины, почему «My Movies Collection» лучше уже существующих.
Во-первых, «My Movies Collection» — кроссплатформенное приложение (Windows, Linux, MacOS), в то время как «AllMyMovies» и «ArchiVid» существуют только для Windows. В настоящее время для Linux нет каталогизаторов, сравнимых по возможностям с рассматриваемыми.
Во-вторых, «My Movies Collection» использует стандартное оформление операционной системы в отличие от «AllMyMovies». Причем, даже если таковое потребуется, в «My Movies Collection» легко добавить поддержку этой возможности. При этом пользователь будет волен сам его создавать. «My Movies Collection» имеет легкий и интуитивный интерфейс в отличие от «ArchiVid». Дополнительные возможности настройки добавлены в те части приложения, в которых на самом деле требуется гибкость и масштабируемость в процессе работы с приложением.
В-третьих, процесс получения информации и изображений для фильма можно полностью контролировать в отличии от «AllMyMovies». Он состоит из трех этапов получения описания, постера и скриншотов. Любой из этапов можно пропустить, либо вернуться на предыдущий этап. Также имеется возможность загрузки отдельно выбранных полей информации о фильме, например, только рейтинга и оригинального названия.
Подводя итог, можно сказать, что каталогизатор «My Movies Collection» собрал все лучшие решения и исключил худшие.
На основе «My Movies Collection» можно реализовать каталогизатор для других типов данных, например для музыки, книг, журналов или программного обеспечения.