mirror of
https://github.com/Sarsoo/IF.Lastfm.git
synced 2024-10-16 23:13:07 +01:00
Scrobbling documentation #61
This commit is contained in:
parent
8a04cde0f4
commit
82cfb8574f
22
README.md
22
README.md
@ -66,25 +66,11 @@ Some documentation is available on the [GitHub wiki](https://github.com/rikkit/l
|
|||||||
|
|
||||||
Any problems, just ask in [Gitter](https://gitter.im/inflatablefriends/lastfm).
|
Any problems, just ask in [Gitter](https://gitter.im/inflatablefriends/lastfm).
|
||||||
|
|
||||||
## Dependency Injection
|
## Documentation
|
||||||
|
|
||||||
The SDK is built to work with IoC libraries like MvvmLight and Ninject. To inject an API as a dependency to a viewmodel, you just need to register ```ILastAuth``` to an instance of ```LastAuth```:
|
- [Api method progress report](PROGRESS.md)
|
||||||
|
- [Scrobbling](doc/scrobbling.md)
|
||||||
```c#
|
- [Dependency Injection](doc/dependency-injection.md)
|
||||||
// mvvmlight
|
|
||||||
var auth = new LastAuth("apikey", "apisecret");
|
|
||||||
SimpleIoc.Default.Register<ILastAuth>(() => auth);
|
|
||||||
|
|
||||||
// ...
|
|
||||||
|
|
||||||
var artistApi = ServiceLocator.Current.GetInstance<ArtistApi>();
|
|
||||||
var response = await artistApi.GetArtistInfoAsync("The Knife");
|
|
||||||
var theKnife = artist.Content;
|
|
||||||
```
|
|
||||||
|
|
||||||
## Implemented Features
|
|
||||||
|
|
||||||
Check the [progress report](https://github.com/inflatablefriends/lastfm/blob/master/PROGRESS.md) for a list of implemented methods.
|
|
||||||
|
|
||||||
## Planned Features
|
## Planned Features
|
||||||
|
|
||||||
|
15
doc/dependency-injection.md
Normal file
15
doc/dependency-injection.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Dependency Injection
|
||||||
|
|
||||||
|
The SDK is built to work with IoC libraries like MvvmLight and Ninject. To inject an API as a dependency to a viewmodel, you just need to register ```ILastAuth``` to an instance of ```LastAuth```:
|
||||||
|
|
||||||
|
```c#
|
||||||
|
// mvvmlight
|
||||||
|
var auth = new LastAuth("apikey", "apisecret");
|
||||||
|
SimpleIoc.Default.Register<ILastAuth>(() => auth);
|
||||||
|
|
||||||
|
// ...
|
||||||
|
|
||||||
|
var artistApi = ServiceLocator.Current.GetInstance<ArtistApi>();
|
||||||
|
var response = await artistApi.GetArtistInfoAsync("The Knife");
|
||||||
|
var theKnife = artist.Content;
|
||||||
|
```
|
64
doc/scrobbling.md
Normal file
64
doc/scrobbling.md
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
# Scrobbling
|
||||||
|
|
||||||
|
## Quickstart
|
||||||
|
|
||||||
|
Create the scrobbler class:
|
||||||
|
```c#
|
||||||
|
var auth = new LastAuth(key, secret);
|
||||||
|
var scrobbler = new Scrobbler(auth);
|
||||||
|
```
|
||||||
|
|
||||||
|
Or if using a SQLite database:
|
||||||
|
```c#
|
||||||
|
var scrobbler = new SQLiteScrobbler(auth, databasePath);
|
||||||
|
```
|
||||||
|
|
||||||
|
then
|
||||||
|
|
||||||
|
```c#
|
||||||
|
var scrobble = new Scrobble("65daysofstatic", "The Fall of Math", "Hole", DateTimeOffset.UtcNow);
|
||||||
|
|
||||||
|
var response = await scrobbler.ScrobbleAsync();
|
||||||
|
|
||||||
|
if (response.Success)
|
||||||
|
{
|
||||||
|
// The scrobble was either successfully sent or has been cached to be sent later.
|
||||||
|
bool scrobbleCached = response.Status == LastResponseStatus.Cached;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (response.Status == LastResponseStatus.RequestFailed)
|
||||||
|
{
|
||||||
|
// response.Exception contains info on the http request failing
|
||||||
|
}
|
||||||
|
else if (response.Status == LastResponseStatus.CacheFailed)
|
||||||
|
{
|
||||||
|
// response.Exception contains info on the caching mechanism failing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Extensibility
|
||||||
|
|
||||||
|
```IF.Lastfm.Core.Scrobblers.Scrobbler```, the core implementation of IScrobbler doesn't cache failed requests.
|
||||||
|
|
||||||
|
The ```ScrobblerBase``` class provides the mechanism for caching scrobbles. Classes deriving it may implement scrobble caching using an external database - if the scrobble request fails, then it will be saved to a database to be sent later. Currently, any cached scrobbles can either be sent when ```ScrobbleAsync(Scrobble s)``` is next called, or independently by calling ```SendCachedScrobblesAsync()```.
|
||||||
|
|
||||||
|
### SQLite
|
||||||
|
|
||||||
|
The ```IF.Lastfm.SQLite.SQLiteScrobbler``` class enables scrobble caching using a SQLite database.
|
||||||
|
|
||||||
|
|
||||||
|
This is in the NuGet package:
|
||||||
|
|
||||||
|
```
|
||||||
|
Install-Package Inflatable.Lastfm.SQLite
|
||||||
|
```
|
||||||
|
|
||||||
|
Dependencies:
|
||||||
|
|
||||||
|
- Newtonsoft.JSON
|
||||||
|
- Inflatable.Lastfm
|
||||||
|
- sqlite-net-pcl
|
||||||
|
|
Loading…
Reference in New Issue
Block a user