diff --git a/app/src/main/java/com/hippo/ehviewer/client/data/FavListUrlBuilder.kt b/app/src/main/java/com/hippo/ehviewer/client/data/FavListUrlBuilder.kt index b23ebcb93..8e1058916 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/data/FavListUrlBuilder.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/data/FavListUrlBuilder.kt @@ -13,134 +13,46 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +package com.hippo.ehviewer.client.data -package com.hippo.ehviewer.client.data; +import android.os.Parcelable +import com.hippo.ehviewer.client.EhUrl +import com.hippo.network.UrlBuilder +import com.hippo.util.encodeUTF8 +import kotlinx.parcelize.Parcelize -import android.os.Build; -import android.os.Parcel; -import android.os.Parcelable; -import android.text.TextUtils; +@Parcelize +class FavListUrlBuilder( + private var mPrev: String? = null, + private var mNext: String? = null, + var jumpTo: String? = null, + var keyword: String? = null, + var favCat: Int = FAV_CAT_ALL, +) : Parcelable { + fun setIndex(index: String?, isNext: Boolean) { + mNext = index.takeIf { isNext } + mPrev = index.takeUnless { isNext } + } -import com.hippo.ehviewer.client.EhUrl; -import com.hippo.network.UrlBuilder; - -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; - -public class FavListUrlBuilder implements Parcelable { - - public static final int FAV_CAT_ALL = -1; - public static final int FAV_CAT_LOCAL = -2; - public static final Parcelable.Creator CREATOR = new Parcelable.Creator<>() { - - @Override - public FavListUrlBuilder createFromParcel(Parcel source) { - return new FavListUrlBuilder(source); + fun build(): String { + val ub = UrlBuilder(EhUrl.getFavoritesUrl()) + if (isValidFavCat(favCat)) { + ub.addQuery("favcat", favCat.toString()) + } else if (favCat == FAV_CAT_ALL) { + ub.addQuery("favcat", "all") } - - @Override - public FavListUrlBuilder[] newArray(int size) { - return new FavListUrlBuilder[size]; - } - }; - private static final String TAG = FavListUrlBuilder.class.getSimpleName(); - private String mPrev; - private String mNext; - private String mJumpTo; - private String mKeyword; - private int mFavCat = FAV_CAT_ALL; - - public FavListUrlBuilder() { + keyword?.takeIf { it.isNotBlank() }?.let { ub.addQuery("f_search", encodeUTF8(it)) } + mPrev?.takeIf { it.isNotEmpty() }?.let { ub.addQuery("prev", it) } + mNext?.takeIf { it.isNotEmpty() }?.let { ub.addQuery("next", it) } + jumpTo?.takeIf { it.isNotEmpty() }?.let { ub.addQuery("seek", it) } + return ub.build() } - protected FavListUrlBuilder(Parcel in) { - this.mPrev = in.readString(); - this.mNext = in.readString(); - this.mJumpTo = in.readString(); - this.mKeyword = in.readString(); - this.mFavCat = in.readInt(); - } - - public static boolean isValidFavCat(int favCat) { - return favCat >= 0 && favCat <= 9; - } - - public void setIndex(String index, boolean isNext) { - if (isNext) { - mNext = index; - mPrev = null; - } else { - mPrev = index; - mNext = null; + companion object { + const val FAV_CAT_ALL = -1 + const val FAV_CAT_LOCAL = -2 + fun isValidFavCat(favCat: Int): Boolean { + return favCat in 0..9 } } - - public void setJumpTo(String jumpTo) { - mJumpTo = jumpTo; - } - - public String getKeyword() { - return mKeyword; - } - - public void setKeyword(String keyword) { - mKeyword = keyword; - } - - public int getFavCat() { - return mFavCat; - } - - public void setFavCat(int favCat) { - mFavCat = favCat; - } - - public boolean isLocalFavCat() { - return mFavCat == FAV_CAT_LOCAL; - } - - public String build() { - UrlBuilder ub = new UrlBuilder(EhUrl.getFavoritesUrl()); - if (isValidFavCat(mFavCat)) { - ub.addQuery("favcat", Integer.toString(mFavCat)); - } else if (mFavCat == FAV_CAT_ALL) { - ub.addQuery("favcat", "all"); - } - if (!TextUtils.isEmpty(mKeyword)) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - ub.addQuery("f_search", URLEncoder.encode(mKeyword, StandardCharsets.UTF_8)); - } else { - try { - ub.addQuery("f_search", URLEncoder.encode(mKeyword, StandardCharsets.UTF_8.displayName())); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - } - } - if (mPrev != null && !mPrev.isEmpty()) { - ub.addQuery("prev", mPrev); - } - if (mNext != null && !mNext.isEmpty()) { - ub.addQuery("next", mNext); - } - if (mJumpTo != null && !mJumpTo.isEmpty()) { - ub.addQuery("seek", mJumpTo); - } - return ub.build(); - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(this.mPrev); - dest.writeString(this.mNext); - dest.writeString(this.mJumpTo); - dest.writeString(this.mKeyword); - dest.writeInt(this.mFavCat); - } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/hippo/ehviewer/client/data/ListUrlBuilder.kt b/app/src/main/java/com/hippo/ehviewer/client/data/ListUrlBuilder.kt index 01573b22b..83561597a 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/data/ListUrlBuilder.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/data/ListUrlBuilder.kt @@ -24,12 +24,12 @@ import com.hippo.ehviewer.client.EhUtils import com.hippo.ehviewer.dao.QuickSearch import com.hippo.ehviewer.widget.AdvanceSearchTable import com.hippo.network.UrlBuilder +import com.hippo.util.encodeUTF8 import com.hippo.yorozuya.NumberUtils import com.hippo.yorozuya.StringUtils import kotlinx.parcelize.Parcelize import java.io.UnsupportedEncodingException import java.net.URLDecoder -import java.net.URLEncoder @Parcelize open class ListUrlBuilder( @@ -312,14 +312,10 @@ open class ListUrlBuilder( ub.addQuery("f_cats", category.inv() and EhConfig.ALL_CATEGORY) } // Search key - if (mKeyword != null) { - val keyword = mKeyword!!.trim { it <= ' ' } + mKeyword?.run { + val keyword = trim { it <= ' ' } if (keyword.isNotEmpty()) { - try { - ub.addQuery("f_search", URLEncoder.encode(mKeyword, "UTF-8")) - } catch (e: UnsupportedEncodingException) { - // Empty - } + ub.addQuery("f_search", encodeUTF8(this)) } } mSHash?.let { @@ -359,11 +355,9 @@ open class ListUrlBuilder( MODE_UPLOADER -> { val sb = StringBuilder(EhUrl.getHost()) - sb.append("uploader/") - try { - sb.append(URLEncoder.encode(mKeyword, "UTF-8")) - } catch (e: UnsupportedEncodingException) { - // Empty + mKeyword?.let { + sb.append("uploader/") + sb.append(encodeUTF8(it)) } mPrev?.let { sb.append("?prev=").append(it) @@ -379,11 +373,9 @@ open class ListUrlBuilder( MODE_TAG -> { val sb = StringBuilder(EhUrl.getHost()) - sb.append("tag/") - try { - sb.append(URLEncoder.encode(mKeyword, "UTF-8")) - } catch (e: UnsupportedEncodingException) { - // Empty + mKeyword?.let { + sb.append("tag/") + sb.append(encodeUTF8(it)) } mPrev?.let { sb.append("?prev=").append(it) @@ -402,10 +394,8 @@ open class ListUrlBuilder( MODE_TOPLIST -> { val sb = StringBuilder(EhUrl.HOST_E) sb.append("toplist.php?tl=") - try { - sb.append(URLEncoder.encode(mKeyword, "UTF-8")) - } catch (e: UnsupportedEncodingException) { - e.printStackTrace() + mKeyword.orEmpty().let { + sb.append(encodeUTF8(it)) } mJumpTo?.let { sb.append("&p=").append(it) @@ -417,10 +407,6 @@ open class ListUrlBuilder( } } - override fun describeContents(): Int { - return 0 - } - @IntDef( MODE_NORMAL, MODE_UPLOADER, diff --git a/app/src/main/java/com/hippo/util/URLEncoderCompat.kt b/app/src/main/java/com/hippo/util/URLEncoderCompat.kt new file mode 100644 index 000000000..5640af8bd --- /dev/null +++ b/app/src/main/java/com/hippo/util/URLEncoderCompat.kt @@ -0,0 +1,18 @@ +package com.hippo.util + +import android.os.Build +import java.net.URLEncoder +import java.nio.charset.Charset +import java.nio.charset.StandardCharsets + +fun encode(s: String, charset: Charset): String { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + URLEncoder.encode(s, charset) + } else { + URLEncoder.encode(s, charset.name()) + } +} + +fun encodeUTF8(s: String): String { + return encode(s, StandardCharsets.UTF_8) +} \ No newline at end of file