diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java index 602604ad7..802ba4abc 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java @@ -19,6 +19,7 @@ package com.hippo.ehviewer.client.parser; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.hippo.ehviewer.EhDB; import com.hippo.ehviewer.client.EhUtils; import com.hippo.ehviewer.client.data.GalleryComment; import com.hippo.ehviewer.client.data.GalleryCommentList; @@ -67,6 +68,7 @@ public class GalleryDetailParser { private static final Pattern PATTERN_NORMAL_PREVIEW = Pattern.compile("
]*>]*width:(\\d+)[^<>]*height:(\\d+)[^<>]*\\((.+?)\\)[^<>]*-(\\d+)px[^<>]*>]*href=\"(.+?)\"[^<>]*>\"([\\d,]+)\"");\"([\\d,]+)\".+?src=\"(.+?)\"");"); + private static final Pattern PATTERN_FAVORITE_SLOT = Pattern.compile("/fav.png\\); background-position:0px -(\\d+)px"); private static final GalleryTagGroup[] EMPTY_GALLERY_TAG_GROUP_ARRAY = new GalleryTagGroup[0]; private static final GalleryCommentList EMPTY_GALLERY_COMMENT_ARRAY = new GalleryCommentList(new GalleryComment[0], false); @@ -251,15 +253,24 @@ public class GalleryDetailParser { // isFavorited Element gdf = gm.getElementById("gdf"); - gd.isFavorited = null != gdf && !StringUtils.trim(gdf.text()).equals("Add to Favorites"); + gd.isFavorited = false; if (gdf != null) { final String favoriteName = StringUtils.trim(gdf.text()); if (favoriteName.equals("Add to Favorites")) { gd.favoriteName = null; } else { + gd.isFavorited = true; gd.favoriteName = StringUtils.trim(gdf.text()); + + matcher = PATTERN_FAVORITE_SLOT.matcher(body); + if (matcher.find()) { + gd.favoriteSlot = (NumberUtils.parseIntSafely(matcher.group(1), 2) - 2) / 19; + } } } + if (gd.favoriteSlot == -2 && EhDB.containLocalFavorites(gd.gid)) { + gd.favoriteSlot = -1; + } } catch (Throwable e) { ExceptionUtils.throwIfFatal(e); throw new ParseException("Can't parse gallery detail", body); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.kt index bea59d6c4..745c385ff 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.kt @@ -371,6 +371,7 @@ class HistoryScene : ToolbarScene() { val simpleLanguage: TextView = itemView.findViewById(R.id.simple_language) val pages: TextView = itemView.findViewById(R.id.pages) val downloaded: ImageView = itemView.findViewById(R.id.downloaded) + val favourited: ImageView = itemView.findViewById(R.id.favourited) } private inner class MoveDialogHelper( @@ -433,6 +434,8 @@ class HistoryScene : ToolbarScene() { } holder.downloaded.visibility = if (mDownloadManager.containDownloadInfo(gi.gid)) View.VISIBLE else View.GONE + holder.favourited.visibility = + if (gi.favoriteSlot != -2) View.VISIBLE else View.GONE holder.card.setOnClickListener { onItemClick(gi) } holder.card.setOnLongClickListener { onItemLongClick(gi) } }