Skip to content

Commit 1eccb41

Browse files
authored
Merge pull request #169 from tobexyz/fix/issue67
issue #67 some fixes in content browser
2 parents 4abc349 + cc9d1d8 commit 1eccb41

17 files changed

Lines changed: 152 additions & 76 deletions

yaacc/src/main/java/de/yaacc/upnp/server/YaaccUpnpServerServiceHttpHandler.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import android.content.SharedPreferences;
2525
import android.database.Cursor;
2626
import android.graphics.Bitmap;
27+
import android.graphics.BitmapFactory;
2728
import android.graphics.drawable.BitmapDrawable;
2829
import android.graphics.drawable.Drawable;
2930
import android.net.Uri;
@@ -307,6 +308,21 @@ private ContentHolder lookupAlbumArt(String albumId, List<HttpRange> ranges) {
307308
Log.d(getClass().getName(), "Content found: " + mimeType
308309
+ " Uri: " + dataUri);
309310
result = new ContentHolder(mimeType, dataUri, ranges);
311+
} else {
312+
Log.d(getClass().getName(), "Album art not found in media store. Fallback to default");
313+
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.yaacc192_32);
314+
315+
try {
316+
File art = new File(context.getCacheDir(), "albumart" + albumId + ".jpg");
317+
art.createNewFile();
318+
FileOutputStream fos = new FileOutputStream(art);
319+
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos);
320+
fos.flush();
321+
fos.close();
322+
result = new ContentHolder(mimeType, art.getAbsolutePath(), ranges);
323+
} catch (IOException e) {
324+
Log.e(getClass().getName(), "Error loading album art from file", e);
325+
}
310326
}
311327
cursor.moveToNext();
312328
}
@@ -319,9 +335,14 @@ private ContentHolder lookupAlbumArt(String albumId, List<HttpRange> ranges) {
319335
MimeType mimeType = MimeType.valueOf("image/jpeg");
320336
Log.d(getClass().getName(), "Content found: " + mimeType
321337
+ " Uri: " + albumArtUri);
338+
Bitmap bitmap;
339+
try {
340+
bitmap = context.getContentResolver().loadThumbnail(albumArtUri, new Size(1024, 1024), null);
341+
} catch (IOException io) {
342+
Log.d(getClass().getName(), "Album art not found in media store. Fallback to default");
343+
bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.yaacc192_32);
344+
}
322345
try {
323-
Bitmap bitmap = context.getContentResolver().loadThumbnail(albumArtUri, new Size(1024, 1024), null);
324-
325346
File art = new File(context.getCacheDir(), "albumart" + albumId + ".jpg");
326347
art.createNewFile();
327348
FileOutputStream fos = new FileOutputStream(art);
@@ -330,7 +351,7 @@ private ContentHolder lookupAlbumArt(String albumId, List<HttpRange> ranges) {
330351
fos.close();
331352
result = new ContentHolder(mimeType, art.getAbsolutePath(), ranges);
332353
} catch (IOException e) {
333-
Log.e(getClass().getName(), "Error loading album art", e);
354+
Log.e(getClass().getName(), "Error loading album art from file", e);
334355
}
335356

336357
}

yaacc/src/main/java/de/yaacc/upnp/server/contentdirectory/ImagesAllFolderBrowser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ public List<Item> browseItem(YaaccContentDirectory contentDirectory, String myId
128128
Log.d(getClass().getName(), "System media store is empty.");
129129
}
130130
}
131+
131132
return result;
132133

133134
}

yaacc/src/main/java/de/yaacc/upnp/server/contentdirectory/ImagesByBucketNameFolderBrowser.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,10 @@ public List<Item> browseItem(YaaccContentDirectory contentDirectory, String myId
147147
Log.d(getClass().getName(), "System media store is empty.");
148148
}
149149
}
150+
150151
return result;
151152

153+
152154
}
153155

154156
}

yaacc/src/main/java/de/yaacc/upnp/server/contentdirectory/ImagesByBucketNamesFolderBrowser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ public List<Container> browseContainer(YaaccContentDirectory contentDirectory, S
125125
Log.d(getClass().getName(), "System media store is empty.");
126126
}
127127
}
128+
128129
return result;
129130
}
130131

yaacc/src/main/java/de/yaacc/upnp/server/contentdirectory/ImagesFolderBrowser.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,15 @@ public List<Container> browseContainer(YaaccContentDirectory contentDirectory, S
6060
List<Container> result = new ArrayList<>();
6161
result.add((Container) new ImagesAllFolderBrowser(getContext()).browseMeta(contentDirectory, ContentDirectoryIDs.IMAGES_ALL_FOLDER.getId(), firstResult, maxResults, orderby));
6262
result.add((Container) new ImagesByBucketNamesFolderBrowser(getContext()).browseMeta(contentDirectory, ContentDirectoryIDs.IMAGES_BY_BUCKET_NAMES_FOLDER.getId(), firstResult, maxResults, orderby));
63-
return result;
63+
int start = firstResult > 0 ? (int) firstResult : 0;
64+
if (firstResult >= (result.size() - 1)) {
65+
start = result.size() - 1;
66+
}
67+
int end = start + (int) maxResults;
68+
if (maxResults > result.size() - 1) {
69+
end = result.size();
70+
}
71+
return result.subList(start, end);
6472
}
6573

6674
@Override

yaacc/src/main/java/de/yaacc/upnp/server/contentdirectory/MusicAlbumFolderBrowser.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import org.fourthline.cling.support.model.Res;
3333
import org.fourthline.cling.support.model.SortCriterion;
3434
import org.fourthline.cling.support.model.container.Container;
35-
import org.fourthline.cling.support.model.container.StorageFolder;
35+
import org.fourthline.cling.support.model.container.MusicAlbum;
3636
import org.fourthline.cling.support.model.item.MusicTrack;
3737
import org.seamless.util.MimeType;
3838

@@ -56,11 +56,12 @@ public MusicAlbumFolderBrowser(Context context) {
5656
@Override
5757
public DIDLObject browseMeta(YaaccContentDirectory contentDirectory,
5858
String myId, long firstResult, long maxResults, SortCriterion[] orderby) {
59-
return new StorageFolder(myId,
59+
return new MusicAlbum(myId,
6060
ContentDirectoryIDs.MUSIC_ALBUMS_FOLDER.getId(), getName(
6161
contentDirectory, myId), "yaacc", getSize(
6262
contentDirectory, myId),
63-
null);
63+
browseItem(contentDirectory, myId, firstResult, maxResults, orderby));
64+
6465
}
6566

6667
private String getName(YaaccContentDirectory contentDirectory, String myId) {
@@ -229,6 +230,7 @@ public List<MusicTrack> browseItem(YaaccContentDirectory contentDirectory,
229230
Log.d(getClass().getName(), "System media store is empty.");
230231
}
231232
}
233+
232234
return result;
233235

234236
}

yaacc/src/main/java/de/yaacc/upnp/server/contentdirectory/MusicAlbumsFolderBrowser.java

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,14 @@
3131
import org.fourthline.cling.support.model.container.StorageFolder;
3232
import org.fourthline.cling.support.model.item.Item;
3333

34+
import java.net.URI;
3435
import java.util.ArrayList;
3536
import java.util.HashMap;
3637
import java.util.List;
3738
import java.util.Map;
3839

3940
import de.yaacc.R;
41+
import de.yaacc.upnp.server.YaaccUpnpServerService;
4042

4143
/**
4244
* Browser for the music albums folder.
@@ -53,7 +55,6 @@ public DIDLObject browseMeta(YaaccContentDirectory contentDirectory, String myId
5355

5456
return new StorageFolder(ContentDirectoryIDs.MUSIC_ALBUMS_FOLDER.getId(), ContentDirectoryIDs.MUSIC_FOLDER.getId(), getContext().getString(R.string.albums), "yaacc", getSize(contentDirectory, myId),
5557
null);
56-
5758
}
5859

5960
@SuppressLint("Range")
@@ -106,33 +107,41 @@ public List<Container> browseContainer(YaaccContentDirectory contentDirectory, S
106107

107108
if (mediaCursor != null && mediaCursor.getCount() > 0) {
108109
mediaCursor.moveToFirst();
109-
int currentIndex = 0;
110-
int currentCount = 0;
111-
while (!mediaCursor.isAfterLast() && currentCount < maxResults) {
112-
if (firstResult <= currentIndex) {
113-
@SuppressLint("Range") String id = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Audio.Albums._ID));
114-
@SuppressLint("Range") String name = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM));
115-
MusicAlbum musicAlbum = new MusicAlbum(ContentDirectoryIDs.MUSIC_ALBUM_PREFIX.getId() + id, ContentDirectoryIDs.MUSIC_ALBUMS_FOLDER.getId(), name, "", 0);
116-
folderMap.put(id, musicAlbum);
117-
Log.d(getClass().getName(), "Album Folder: " + id + " Name: " + name);
118-
currentCount++;
119-
}
120-
currentIndex++;
110+
while (!mediaCursor.isAfterLast()) {
111+
112+
@SuppressLint("Range") String id = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Audio.Albums._ID));
113+
@SuppressLint("Range") String name = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM));
114+
MusicAlbum musicAlbum = new MusicAlbum(ContentDirectoryIDs.MUSIC_ALBUM_PREFIX.getId() + id, ContentDirectoryIDs.MUSIC_ALBUMS_FOLDER.getId(), name, "", 0);
115+
URI albumArtUri = URI.create("http://"
116+
+ contentDirectory.getIpAddress() + ":"
117+
+ YaaccUpnpServerService.PORT + "/album/" + id);
118+
musicAlbum.setAlbumArtURIs(new URI[]{albumArtUri});
119+
folderMap.put(id, musicAlbum);
121120
mediaCursor.moveToNext();
122121
}
123122

124123
for (Map.Entry<String, MusicAlbum> entry : folderMap.entrySet()) {
125124
int tracks = getMusicTrackSize(contentDirectory, entry.getKey());
126125
entry.getValue().setChildCount(tracks);
127126
if (tracks > 0) {
127+
Log.d(getClass().getName(), "Album Folder: " + entry.getValue().getId() + " Name: " + entry.getValue().getTitle());
128128
result.add(entry.getValue());
129129
}
130130
}
131131
} else {
132132
Log.d(getClass().getName(), "System media store is empty.");
133133
}
134134
}
135-
return result;
135+
int start = firstResult > 0 ? (int) firstResult : 0;
136+
if (firstResult >= (result.size() - 1)) {
137+
start = result.size() - 1;
138+
}
139+
int end = start + (int) maxResults;
140+
if (maxResults > result.size() - 1) {
141+
end = result.size();
142+
}
143+
return result.subList(start, end);
144+
136145
}
137146

138147
@Override

yaacc/src/main/java/de/yaacc/upnp/server/contentdirectory/MusicAllTitleItemBrowser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public DIDLObject browseMeta(YaaccContentDirectory contentDirectory,
8181
MediaStore.Audio.Media.ARTIST,
8282
MediaStore.Audio.Media.DURATION};
8383
}
84-
String selection = MediaStore.Audio.Media._ID + "=? " + "and (" + makeLikeClause(MediaStore.Audio.Media.DATA, getMediaPathes().size()) + ")";
84+
String selection = "(" + makeLikeClause(MediaStore.Audio.Media.DATA, getMediaPathes().size()) + ") and " + MediaStore.Audio.Media._ID + "=? ";
8585
List<String> selectionArgsList = getMediaPathesForLikeClause();
8686
selectionArgsList.add(myId.substring(ContentDirectoryIDs.MUSIC_ALL_TITLES_ITEM_PREFIX.getId()
8787
.length()));

yaacc/src/main/java/de/yaacc/upnp/server/contentdirectory/MusicAllTitlesFolderBrowser.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import org.fourthline.cling.support.model.Res;
3333
import org.fourthline.cling.support.model.SortCriterion;
3434
import org.fourthline.cling.support.model.container.Container;
35-
import org.fourthline.cling.support.model.container.StorageFolder;
35+
import org.fourthline.cling.support.model.container.MusicAlbum;
3636
import org.fourthline.cling.support.model.item.MusicTrack;
3737
import org.seamless.util.MimeType;
3838

@@ -56,9 +56,9 @@ public MusicAllTitlesFolderBrowser(Context context) {
5656
@Override
5757
public DIDLObject browseMeta(YaaccContentDirectory contentDirectory,
5858
String myId, long firstResult, long maxResults, SortCriterion[] orderby) {
59-
return new StorageFolder(myId, ContentDirectoryIDs.MUSIC_FOLDER.getId(), getContext().getString(R.string.all), "yaacc", getSize(
60-
contentDirectory, myId), null);
61-
59+
MusicAlbum result = new MusicAlbum(myId, ContentDirectoryIDs.MUSIC_FOLDER.getId(), getContext().getString(R.string.all), "yaacc", getSize(
60+
contentDirectory, myId), browseItem(contentDirectory, myId, firstResult, maxResults, orderby));
61+
return result;
6262
}
6363

6464
@Override
@@ -74,6 +74,7 @@ public Integer getSize(YaaccContentDirectory contentDirectory, String myId) {
7474
.getContentResolver()
7575
.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection,
7676
selection, selectionArgs, null)) {
77+
Log.d(getClass().getName(), "browseFlag Folder size: " + cursor.getCount());
7778
return cursor.getCount();
7879
}
7980
}
@@ -195,6 +196,7 @@ public List<MusicTrack> browseItem(YaaccContentDirectory contentDirectory,
195196
Log.d(getClass().getName(), "System media store is empty.");
196197
}
197198
}
199+
Log.d(getClass().getName(), "browseFlag result size: " + result.size());
198200
return result;
199201

200202
}

yaacc/src/main/java/de/yaacc/upnp/server/contentdirectory/MusicArtistFolderBrowser.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import org.fourthline.cling.support.model.Res;
3333
import org.fourthline.cling.support.model.SortCriterion;
3434
import org.fourthline.cling.support.model.container.Container;
35-
import org.fourthline.cling.support.model.container.StorageFolder;
35+
import org.fourthline.cling.support.model.container.MusicAlbum;
3636
import org.fourthline.cling.support.model.item.MusicTrack;
3737
import org.seamless.util.MimeType;
3838

@@ -56,9 +56,10 @@ public MusicArtistFolderBrowser(Context context) {
5656
public DIDLObject browseMeta(YaaccContentDirectory contentDirectory,
5757
String myId, long firstResult, long maxResults, SortCriterion[] orderby) {
5858

59-
return new StorageFolder(myId, ContentDirectoryIDs.MUSIC_ARTISTS_FOLDER.getId(), getName(
59+
return new MusicAlbum(myId, ContentDirectoryIDs.MUSIC_ARTISTS_FOLDER.getId(), getName(
6060
contentDirectory, myId), "yaacc", getSize(
61-
contentDirectory, myId), null);
61+
contentDirectory, myId), browseItem(contentDirectory,
62+
myId, firstResult, maxResults, orderby));
6263

6364
}
6465

0 commit comments

Comments
 (0)