readme.md

# playlist

> Parse playlist files

[![Build Status](https://travis-ci.org/sotojuan/playlist.svg?branch=master)](https://travis-ci.org/sotojuan/playlist)

## Install

In your `mix.exs`:

```elixir
defp deps do
  [
    {:playlist, "~> 1.0.0"}
  ]
end
```

Then run `mix deps.get`.

## Usage

This package can parse M3U and PLS files and exports two modules: `Playlist.M3U` and `Playlist.PLS`. Both of these export a `parse/1` function, which takes a string representing a playlist file and returns a list of maps, each
representing a track in the file.

## Example

Let's assume we have a M3U file that looks like this:

```
#EXTM3U
#EXTINF:822,A - Track 1
~/Music/1.mp3
#EXTINF:272,B - Track 2
mp3/b/2.ogg
#EXTINF:381,C - Track 3
http://coolmusic.com/12345.m4a
#EXTINF:249,D - Track 4
ws://nice.com/54321.aac
#EXTINF:249,E - Track 5
wss://192.168.1.1/llllllll.mp3
```

We can parse it like this:

```elixir
{:ok, file} = File.read("playlist.m3u")
{:ok, parsed} = Playlist.M3U.parse(file)
```

`parsed` will look like this:

```elixir
[
  %{artist: "A ", file: "~/Music/1.mp3", length: "822", title: "Track 1"},
  %{artist: "B ", file: "mp3/b/2.ogg", length: "272", title: "Track 2"},
  %{artist: "C ", file: "http://coolmusic.com/12345.m4a", length: "381", title: "Track 3"},
  %{artist: "D ", file: "ws://nice.com/54321.aac", length: "249", title: "Track 4"},
  %{artist: "E ", file: "wss://192.168.1.1/llllllll.mp3", length: "249", title: "Track 5"}
]
```

Any error during the parsing will result in a `{:error, reason}` tuple.

## License

MIT © [Juan Soto](https://juansoto.me)