Skip to content

Instantly share code, notes, and snippets.

@phhusson
Created November 22, 2019 13:39
Show Gist options
  • Save phhusson/c8769d8262d490052a1c7e3a74bb0245 to your computer and use it in GitHub Desktop.
Save phhusson/c8769d8262d490052a1c7e3a74bb0245 to your computer and use it in GitHub Desktop.
project MediaLib/
diff --git a/MediaLib/src/com/archos/mediascraper/ScraperImage.java b/MediaLib/src/com/archos/mediascraper/ScraperImage.java
index 1d21ed6..bd17c2e 100644
--- a/MediaLib/src/com/archos/mediascraper/ScraperImage.java
+++ b/MediaLib/src/com/archos/mediascraper/ScraperImage.java
@@ -396,7 +397,12 @@ public class ScraperImage {
private static final MultiLock<String> sLock = new MultiLock<String>();
public final boolean download(Context context) {
- return download(context, false, 0, 0, false);
+ if(!download(context, false, 0, 0, false, false)) {
+ Log.d(TAG, "Failed downloading large image " + mLargeUrl + ", downloading thumb instead " + mThumbUrl);
+ Log.d(TAG, "\t" + mLargeFile + "/" + mThumbFile);
+ return download(context, true, 0, 0, false, true);
+ }
+ return true;
}
/**
@@ -404,14 +410,14 @@ public class ScraperImage {
* Don't use in regular code.
*/
public final void downloadFake(Context context) {
- download(context, false, 0, 0, true);
+ download(context, false, 0, 0, true, false);
}
public final void downloadThumb(Context context, int maxWidth, int maxHeight) {
- download(context, true /* thumb */, maxWidth, maxHeight, false /* fake */);
+ download(context, true /* thumb */, maxWidth, maxHeight, false /* fake */, false);
}
- private boolean download(Context context, boolean thumb, int maxWidth, int maxHeight, boolean fake) {
+ private boolean download(Context context, boolean thumb, int maxWidth, int maxHeight, boolean fake, boolean thumbAsMain) {
String file = mLargeFile;
String url = mLargeUrl;
boolean success = false ;
@@ -419,6 +425,10 @@ public class ScraperImage {
file = mThumbFile;
url = mThumbUrl == null ? mLargeUrl : mThumbUrl;
}
+ if(thumb && thumbAsMain) {
+ Log.d(TAG, "Downloading thumb as main");
+ file = mLargeFile;
+ }
String lockString = file == null ? "null" : file;
sLock.lock(lockString);
diff --git a/Video/src/main/java/com/archos/mediacenter/video/leanback/presenter/ScraperBaseTagsPresenter.java b/Video/src/main/java/com/archos/mediacenter/video/leanback/presenter/ScraperBaseTagsPresenter.java
index 4f57547..5168697 100644
--- a/Video/src/main/java/com/archos/mediacenter/video/leanback/presenter/ScraperBaseTagsPresenter.java
+++ b/Video/src/main/java/com/archos/mediacenter/video/leanback/presenter/ScraperBaseTagsPresenter.java
@@ -29,6 +29,7 @@ import android.widget.ImageView;
import com.archos.mediacenter.video.R;
import com.archos.mediascraper.EpisodeTags;
import com.archos.mediascraper.MovieTags;
+import com.archos.mediascraper.ScraperImage;
import com.archos.mediascraper.ShowTags;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;
@@ -44,6 +45,7 @@ public class ScraperBaseTagsPresenter extends Presenter {
public class ViewHolder extends Presenter.ViewHolder {
private ImageCardView mCardView;
private PicassoImageCardViewTarget mImageCardViewTarget;
+ private String mFallbackUrl;
public ViewHolder(Context context) {
super(new ImageCardView(context));
@@ -53,7 +55,7 @@ public class ScraperBaseTagsPresenter extends Presenter {
mCardView.setFocusable(true);
mCardView.setFocusableInTouchMode(true);
- mImageCardViewTarget = new PicassoImageCardViewTarget(mCardView);
+ mImageCardViewTarget = new PicassoImageCardViewTarget(mCardView, this);
}
public int getWidth(Context context) {
@@ -79,6 +81,10 @@ public class ScraperBaseTagsPresenter extends Presenter {
.error(R.drawable.filetype_new_video)
.into(mImageCardViewTarget);
}
+
+ public void setFallbackUrl(String url) {
+ mFallbackUrl = url;
+ }
}
@Override
@@ -92,6 +98,7 @@ public class ScraperBaseTagsPresenter extends Presenter {
public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
ViewHolder vh = (ViewHolder)viewHolder;
+ boolean foundImage = false;
if (item instanceof MovieTags) {
MovieTags tags = (MovieTags)item;
vh.getImageCardView().setTitleText(tags.getTitle());
@@ -103,26 +110,42 @@ public class ScraperBaseTagsPresenter extends Presenter {
vh.getImageCardView().setContentText(content);
if (tags.getDefaultPoster()!=null) {
+ vh.setFallbackUrl(tags.getDefaultPoster().getThumbUrl());
vh.updateCardViewPoster(tags.getDefaultPoster().getLargeUrl());
+ foundImage = true;
}
}
else if (item instanceof EpisodeTags) {
EpisodeTags tags = (EpisodeTags)item;
vh.getImageCardView().setTitleText(tags.getShowTitle());
- if (tags.getDefaultPoster()!=null) {
- vh.updateCardViewPoster(tags.getDefaultPoster().getLargeUrl());
+
+ ScraperImage episodePoster = tags.getDefaultPoster();
+ if(episodePoster == null && tags.getShowTags() != null) {
+ episodePoster = tags.getShowTags().getDefaultPoster();
+ }
+ if (episodePoster != null) {
+ vh.setFallbackUrl(episodePoster.getThumbUrl());
+ vh.updateCardViewPoster(episodePoster.getLargeUrl());
+ foundImage = true;
+
}
}
else if (item instanceof ShowTags) {
ShowTags tags = (ShowTags)item;
vh.getImageCardView().setTitleText(tags.getTitle());
if (tags.getDefaultPoster()!=null) {
+ vh.setFallbackUrl(tags.getDefaultPoster().getThumbUrl());
vh.updateCardViewPoster(tags.getDefaultPoster().getLargeUrl());
+ foundImage = true;
}
}
else {
throw new IllegalArgumentException("invalid object! "+item.getClass().getCanonicalName());
}
+ if(!foundImage) {
+ vh.getImageCardView().setMainImageScaleType(ImageView.ScaleType.CENTER);
+ vh.getImageCardView().setMainImage(mContext.getResources().getDrawable(R.drawable.filetype_new_video), true);
+ }
}
@Override
@@ -132,6 +155,7 @@ public class ScraperBaseTagsPresenter extends Presenter {
public class PicassoImageCardViewTarget implements Target {
private ImageCardView mImageCardView;
+ private ViewHolder mViewHolder;
// Picasso documentation: Objects implementing this class must have a working implementation of Object.equals(Object) and Object.hashCode() for proper storage internally.
@Override
@@ -143,8 +167,9 @@ public class ScraperBaseTagsPresenter extends Presenter {
return mImageCardView.equals( ((PicassoImageCardViewTarget)other).mImageCardView );
}
- public PicassoImageCardViewTarget(ImageCardView imageCardView) {
+ public PicassoImageCardViewTarget(ImageCardView imageCardView, ViewHolder viewHolder) {
mImageCardView = imageCardView;
+ mViewHolder = viewHolder;
}
@Override
@@ -159,6 +184,12 @@ public class ScraperBaseTagsPresenter extends Presenter {
@Override
public void onBitmapFailed(Exception e, Drawable drawable){
+ String fallback = mViewHolder.mFallbackUrl;
+ if(fallback != null) {
+ mViewHolder.setFallbackUrl(null);
+ mViewHolder.updateCardViewPoster(fallback);
+ return;
+ }
mImageCardView.setMainImageScaleType(ImageView.ScaleType.CENTER);
mImageCardView.setMainImage(drawable, true);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment