Android last.fm скробблер WAIL Beta теперь Open Source

в 8:43, , рубрики: android, last.fm, open source, scrobbler, wail, wail beta, Разработка под android, скробблер

Привет. Примерно полгода назад я запилил Android приложение для скробблинга проигрываемой в разных плеерах музыки в last.fm.

Уже несколько месяцев у меня нет времени развивать этот проект, поэтому я решил открыть его исходники (репозиторий на гитхабе).

Я пишу этот пост на Хабр с небольшой надеждой на то, что здесь есть люди, которым было бы интересно развивать WAIL дальше, добавлять новые фичи, фиксить баги и просто участвовать в оупен-сорс проекте Android приложения :)

Кратко о last.fm: это сервис для любителей послушать музыку, главная фича которого заключается в том, что вы можете передавать инфомацию о треках, которые вы слушаете, а last.fm на основе этого будет предлагать вам других исполнителей, друзей, концерты исполнителей, которых вы слушаете (кстати офигенно, первый раз сходил на концерт именно по рекомендации last.fm).

Скриншоты для поддержания интереса
Android last.fm скробблер WAIL Beta теперь Open Source Android last.fm скробблер WAIL Beta теперь Open Source

Кратко о возможностях WAIL:

  • Перехват событий (броадкаст интентов) о проигрывании музыки из различных плееров и скробблинг этой информации в last.fm
  • Обновление #nowplaying на last.fm
  • Оффлайн работа (когда появится доступ к сети — WAIL отправит информацию в last.fm)
  • Минималистичный UI в Holo стиле (хотя на Android L тоже неплохо смотрится)
  • Возможность звуковых уведомлений о скробблинге трека или о пропуске трека (если по различным условиям трек игнорируется приложением)
  • Список обработанных треков
  • И еще по мелочи :)

Еще немного скриншотов:

Android last.fm скробблер WAIL Beta теперь Open Source Android last.fm скробблер WAIL Beta теперь Open Source

Теперь про архитектуру приложения для тех, кому интересно будет покопаться внутри

  • WAIL — What am I listening
  • 1) Главная часть WAIL — BroadCastRecevierы, которые ловят интенты от музыкальных приложений
  • 2) Вторая главная часть WAIL — WAILService, которому передают информацию о треках, он уже решает что с ними делать — скробблить, обновить #nowplaying и прочее
  • 3) Внутренняя SQLite база данных, в частности TracksDBHelper, сюда WAIL записывает обработанные треки, соответственно, эта БД позволяет работать оффлайн. WAILService периодически проходится по этой информации и отправляет её в last.fm
  • 4) Ну и собственно UI: Все построено на фрагментах, есть поддержка верстки для планшетов

Что в приоритете по фичам

  • Поддержка RemoteControllerClient — это API для медиаплееров, гораздо лучше, чем обработка интентов т.к. на него есть хоть какой-то стандарт. Кстати, ваш экран блокировки использует именно этот API для отображения и управления проигрываемой музыкой. У меня есть кое-какие наработки по этому направлению, но все осложняется практически полным отсутствием документации от гугла по этой теме. Суть поддержки RemoteControllerClient в том, что WAIL автоматически сможет обрабатывать ВСЕ музыкальные плееры, которые используют этот API
  • Вывод текущего обрабатываемого трека на главном экране — многие пользователи не понимают, обрабатывает ли сейчас WAIL какой-то трек или нет… В общем, фича нужная и полезная
  • Вывод уведомлений о скробблинге, обновлении #nowplaying в статус бар
  • Настройки для отключения скробблинга в зависимости от типа подключения к сети (мобильные сети/wifi)
  • Можете свободно предлагать свои пожелания в issues на гитхабе

Кому может быть интересно покопаться в WAIL

  • Опытным Android разработчикам, которые хотят показать свое мастерство в Open Source проекте :)
  • Начинающим Android разработчикам, которым я предлагаю делать небольшие фиксы/фичи и потихонько осваивать Android development на реальной практике с выходом в Google Play к реальным пользователям
  • Тем пользователям WAIL, которые по совместительству являются Android или Java разработчиками и хотят что-то изменить в приложении :)

Если вы решили помочь WAIL

1) Во-первых — большое спасибо, как от меня, так и от пользователей :)

2) Во-вторых, я написал небольшое wiki на тему стайлгайдов по коммитам, по git flow и стайлгайдам по исходникам и ресурсам проекта, пожалуйста, прочитайте его, оно коротенькое.

3) В-третьих — да, успешно смерженные пулл-реквесты от вас попадут в Google Play!

4) Я буду мейтенером проекта, периодически проверяя пулл-реквесты, буду помогать проекту как разработчик, когда будет время. Релизы в Google Play будут делаться по мере развития проекта, я бы хотел делать частые релизы, чтобы быстро получать фидбек от пользователей и выстраивать планы на следующие релизы

5) Если хотите начать с легкого — придумайте небольшое issue, например фикс иконки или перевод на понятный вам язык, заведите issue на гитхабе, потом сделайте пулл-реквест с фиксом/фичей и всё :)

Всем спасибо за внимание, надеюсь, WAIL будет развиваться и жить дальше :)

Ссылка на гитхаб WAIL Beta — Android last.fm scrobbler

P.S.
Если вы посмотрите гитхаб, вы увидите, что там очень мало коммитов. Это связанно с тем, что в приватном репозитории лежали ключи с паролями, которыми я подписываю приложения (фейл, согласен), я решил не доверять git filter-branch и bfg и просто создал новый репозиторий перенеся исходники и убрав приватные данные, около ~250 коммитов потеряно.
Кроме того, в приложении опубликованы ключи к last.fm api, да на гитхабе. Но блин, декомпилировать Android приложение и достать все эти данные совсем не сложно, да и усложнять разработку другим людям тем, что им придется регистрироваться на last.fm в разделе разработчиков, получать ключи я бы не хотел, пожалуйста, не используйте их для плохих намерений :)

Пост не в «Я пиарюсь» по причине того что: 1) Проект оупен-сорсный 2) Он абсолютно не коммерческий, сделан с душой для тех, кому приложение полезно 3) Если модераторы Хабра посчитают, что пост надо перенести в «Я пиарюсь» — ок

P.P.S
Естественно, код не идеальный… Сейчас я бы переписал половину, но в целом, архитектура гибкая и расширяемая :)

Готов ответить на вопросы в комментариях к статье.

Автор: Artem_zin

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js