Skip to content

Commit 82f5c94

Browse files
committed
refactor: remove OfflineItem and move sync code to CompactdTrack
1 parent f13b6de commit 82f5c94

File tree

5 files changed

+182
-116
lines changed

5 files changed

+182
-116
lines changed

app/src/main/java/io/compactd/client/models/CompactdTrack.java

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,20 @@
1515
import com.couchbase.lite.QueryEnumerator;
1616
import com.couchbase.lite.QueryRow;
1717

18+
import java.io.File;
19+
import java.io.IOException;
20+
import java.net.URL;
1821
import java.util.ArrayList;
1922
import java.util.HashMap;
2023
import java.util.List;
24+
import java.util.Locale;
2125
import java.util.Map;
2226

2327
import javax.annotation.Nullable;
2428

2529
import io.compactd.client.CompactdClient;
30+
import io.compactd.client.CompactdPreset;
31+
import io.compactd.client.CompactdRequest;
2632

2733
/**
2834
* Created by Vincent on 30/10/2017.
@@ -37,8 +43,10 @@ public class CompactdTrack extends CompactdModel {
3743
private CompactdAlbum mAlbum;
3844
private double mDuration;
3945
private int mNumber;
46+
private String mStorageLocation;
4047

4148
private static SparseArray<CompactdTrack> cache = new SparseArray<>();
49+
private CompactdPreset mStoragePreset;
4250

4351
public CompactdTrack(Manager manager, String id) {
4452
super(manager, id);
@@ -52,11 +60,31 @@ public CompactdTrack(CompactdTrack other) {
5260
mAlbum = new CompactdAlbum(other.getAlbum());
5361
mDuration = other.getDuration();
5462
mNumber = other.getNumber();
63+
mStorageLocation = other.getStorageLocation();
64+
mStoragePreset = other.getStoragePreset();
5565
}
5666

67+
public Map<String, Object> toMap() {
68+
Map<String, Object> map = new HashMap<>();
69+
70+
map.put("name", getName());
71+
map.put("hidden", isHidden());
72+
map.put("artist", getArtist().getId());
73+
map.put("album", getAlbum().getId());
74+
map.put("duration", getDuration());
75+
map.put("number", getNumber());
76+
77+
if (getStorageLocation() != null && !getStorageLocation().isEmpty()) {
78+
map.put("storage_loc", getStorageLocation());
79+
map.put("storage_preset", getStoragePreset());
80+
}
81+
82+
return map;
83+
}
5784
@Override
5885
public void fromMap(Map<String, Object> map) {
5986
super.fromMap(map);
87+
6088
mName = (String) map.get("name");
6189
mHidden = map.containsKey("hidden") && (boolean) map.get("hidden");
6290

@@ -78,6 +106,14 @@ public void fromMap(Map<String, Object> map) {
78106

79107
mDuration = getMillisDurationFromSeconds(map.get("duration"));
80108
mNumber = (Integer) map.get("number");
109+
110+
if (map.containsKey("storage_preset")) {
111+
mStoragePreset = CompactdPreset.from(map.get("storage_preset").toString());
112+
}
113+
114+
if (map.containsKey("storage_loc")) {
115+
mStorageLocation = (String) map.get("storage_loc");
116+
}
81117
}
82118

83119
private int getMillisDurationFromSeconds (Object ms) {
@@ -314,4 +350,94 @@ public static String databaseName() {
314350
return CompactdClient.getInstance().getPrefix() + DATABASE_NAME;
315351
}
316352

353+
public String getStorageLocation() {
354+
return mStorageLocation;
355+
}
356+
357+
private void setStorageLocation(String mStorageLocation) {
358+
this.mStorageLocation = mStorageLocation;
359+
}
360+
361+
public void update () throws CouchbaseLiteException {
362+
Database database = mManager.getDatabase(databaseName());
363+
Document doc = database.getDocument(getId());
364+
Map<String, Object> properties = new HashMap<>();
365+
properties.putAll(doc.getProperties());
366+
properties.putAll(toMap());
367+
368+
try {
369+
doc.putProperties(properties);
370+
} catch (CouchbaseLiteException e) {
371+
e.printStackTrace();
372+
}
373+
}
374+
375+
public CompactdPreset getStoragePreset() {
376+
return mStoragePreset;
377+
}
378+
379+
private void setStoragePreset(CompactdPreset preset) {
380+
mStoragePreset = preset;
381+
}
382+
383+
public void setStorageOptions (SyncOptions opts) {
384+
String dir = opts.getDestination();
385+
try {
386+
fetch();
387+
} catch (CouchbaseLiteException e) {
388+
e.printStackTrace();
389+
return;
390+
}
391+
String artist = getArtist().getName();
392+
String album = getAlbum().getName();
393+
String track = getName();
394+
String number = String.format(Locale.getDefault(),"%02d", getNumber());
395+
String base = dir + (dir.endsWith("/") ? "" : "/");
396+
397+
String dest = base + artist + " - " + album + "/" + number + " - " + track + ".mp3";
398+
399+
setStorageLocation(dest);
400+
setStoragePreset(opts.getPreset());
401+
}
402+
403+
public boolean isAvailableOffline () {
404+
return getStorageLocation() != null && new File(getStorageLocation()).exists();
405+
}
406+
407+
public void sync () {
408+
Log.d(TAG, "sync: '" + getId() + "' to '" + getStorageLocation() + "'");
409+
if (isAvailableOffline()) {
410+
return;
411+
}
412+
413+
String uri = getId().replaceAll("^library\\/", "");
414+
415+
CompactdClient client = CompactdClient.getInstance();
416+
417+
URL baseURL = client.getUrl();
418+
String endpoint = "/api/boombox/" + uri + "/" + getStoragePreset().getPreset();
419+
420+
String token = client.getToken();
421+
422+
CompactdRequest req = new CompactdRequest(baseURL, endpoint, token);
423+
424+
String dest = getStorageLocation();
425+
426+
try {
427+
req.saveToDisk(dest + ".tmp");
428+
} catch (IOException e) {
429+
e.printStackTrace();
430+
return;
431+
}
432+
433+
File temp = new File(dest + ".tmp");
434+
435+
if (temp.renameTo(new File(dest))) {
436+
try {
437+
update();
438+
} catch (CouchbaseLiteException e) {
439+
e.printStackTrace();
440+
}
441+
}
442+
}
317443
}

app/src/main/java/io/compactd/player/helpers/SyncOptions.java renamed to app/src/main/java/io/compactd/client/models/SyncOptions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.compactd.player.helpers;
1+
package io.compactd.client.models;
22

33
import io.compactd.client.CompactdPreset;
44

app/src/main/java/io/compactd/player/helpers/MusicPlayerRemote.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.content.Intent;
66
import android.content.ServiceConnection;
77
import android.os.IBinder;
8+
import android.util.Log;
89

910
import java.util.ArrayList;
1011
import java.util.List;
@@ -74,6 +75,7 @@ private void bindService(Context context) {
7475

7576
@Override
7677
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
78+
Log.d(TAG, "onServiceConnected: " + componentName + "; " + iBinder);
7779
MediaPlayerService.LocalBinder binder = (MediaPlayerService.LocalBinder) iBinder;
7880
mediaPlayer = binder.getService();
7981
serviceBound = true;
@@ -91,6 +93,7 @@ public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
9193

9294
@Override
9395
public void onServiceDisconnected(ComponentName componentName) {
96+
Log.d(TAG, "onServiceDisconnected: " + componentName);
9497
mediaPlayer = null;
9598
serviceBound = false;
9699
}

app/src/main/java/io/compactd/player/helpers/OfflineItem.java

Lines changed: 0 additions & 92 deletions
This file was deleted.

0 commit comments

Comments
 (0)