package com.dozuki.ifixit.util.api; import com.dozuki.ifixit.model.Image; import com.dozuki.ifixit.model.Video; import com.dozuki.ifixit.model.guide.Guide; import com.dozuki.ifixit.model.guide.GuideInfo; import com.dozuki.ifixit.model.guide.GuideStep; import com.dozuki.ifixit.util.ImageSizes; import java.io.File; import java.util.HashSet; import java.util.Set; /** * Stores progress information about syncing guide media. */ public class GuideMediaProgress { public ApiEvent.ViewGuide mGuideEvent; public Guide mGuide; public GuideInfo mGuideInfo; public Set<String> mMissingMedia; public int mTotalMedia; public int mMediaProgress; public GuideMediaProgress(ApiEvent.ViewGuide guideEvent) { this(guideEvent.getResult()); mGuideEvent = guideEvent; } public GuideMediaProgress(Guide guide) { mGuide = guide; mMissingMedia = new HashSet<String>(); mTotalMedia = 0; Image introImage = mGuide.getIntroImage(); if (introImage.isValid()) { addMediaIfMissing(introImage.getPath(ImageSizes.guideList)); } for (GuideStep step : mGuide.getSteps()) { for (Image image : step.getImages()) { addMediaIfMissing(image.getPath(ImageSizes.stepThumb)); addMediaIfMissing(image.getPath(ImageSizes.stepMain)); addMediaIfMissing(image.getPath(ImageSizes.stepFull)); } if (step.hasVideo()) { Video video = step.getVideo(); addMediaIfMissing(video.getThumbnail().getPath(ImageSizes.stepMain)); addMediaIfMissing(video.getVideoUrl()); } } mMediaProgress = mTotalMedia - mMissingMedia.size(); } public GuideMediaProgress(GuideInfo guideInfo, int totalMedia, int mediaProgress) { mGuideInfo = guideInfo; mTotalMedia = totalMedia; mMediaProgress = mediaProgress; } private void addMediaIfMissing(String imageUrl) { if (mMissingMedia.contains(imageUrl)) { // Don't acknowledge duplicates in the total. return; } mTotalMedia++; File file = new File(ApiSyncAdapter.getOfflineMediaPath(imageUrl)); if (!file.exists()) { mMissingMedia.add(imageUrl); } } public boolean isComplete() { return mTotalMedia == mMediaProgress; } }