mirror of
https://github.com/fankes/termux-app.git
synced 2025-09-08 03:24:04 +08:00
Added: Add UrlUtils
This commit is contained in:
113
termux-shared/src/main/java/com/termux/shared/net/UrlUtils.java
Normal file
113
termux-shared/src/main/java/com/termux/shared/net/UrlUtils.java
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
package com.termux.shared.net;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.termux.shared.data.DataUtils;
|
||||||
|
import com.termux.shared.logger.Logger;
|
||||||
|
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
public class UrlUtils {
|
||||||
|
|
||||||
|
/** The parts of a {@link URL}. */
|
||||||
|
public enum UrlPart {
|
||||||
|
AUTHORITY,
|
||||||
|
FILE,
|
||||||
|
HOST,
|
||||||
|
REF,
|
||||||
|
FRAGMENT,
|
||||||
|
PATH,
|
||||||
|
PORT,
|
||||||
|
PROTOCOL,
|
||||||
|
QUERY,
|
||||||
|
USER_INFO
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final String LOG_TAG = "UrlUtils";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Join a url base and destination.
|
||||||
|
*
|
||||||
|
* @param base The base url to open.
|
||||||
|
* @param destination The destination url to open.
|
||||||
|
* @param logError If an error message should be logged.
|
||||||
|
* @return Returns the joined {@link String} Url, otherwise {@code null}.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public static String joinUrl(final String base, String destination, boolean logError) {
|
||||||
|
if (DataUtils.isNullOrEmpty(base)) return null;
|
||||||
|
try {
|
||||||
|
return new URL(new URL(base), destination).toString();
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
if (logError)
|
||||||
|
Logger.logError(LOG_TAG, "Failed to join url base \"" + base + "\" and destination \"" + destination + "\": " + e.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get {@link URL} from url string.
|
||||||
|
*
|
||||||
|
* @param urlString The urlString string.
|
||||||
|
* @return Returns the {@link URL} if a valid urlString, otherwise {@code null}.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public static URL getUrl(String urlString) {
|
||||||
|
if (DataUtils.isNullOrEmpty(urlString)) return null;
|
||||||
|
try {
|
||||||
|
return new URL(urlString);
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a {@link URL} part from url string.
|
||||||
|
*
|
||||||
|
* @param urlString The urlString string.
|
||||||
|
* @param urlPart The part to get.
|
||||||
|
* @return Returns the {@link URL} part if a valid urlString and part, otherwise {@code null}.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public static String getUrlPart(String urlString, UrlPart urlPart) {
|
||||||
|
URL url = getUrl(urlString);
|
||||||
|
if (url == null) return null;
|
||||||
|
switch (urlPart) {
|
||||||
|
case AUTHORITY:
|
||||||
|
return url.getAuthority();
|
||||||
|
case FILE:
|
||||||
|
return url.getFile();
|
||||||
|
case HOST:
|
||||||
|
return url.getHost();
|
||||||
|
case REF:
|
||||||
|
case FRAGMENT:
|
||||||
|
return url.getRef();
|
||||||
|
case PATH:
|
||||||
|
return url.getPath();
|
||||||
|
case PORT:
|
||||||
|
return String.valueOf(url.getPort());
|
||||||
|
case PROTOCOL:
|
||||||
|
return url.getProtocol();
|
||||||
|
case QUERY:
|
||||||
|
return url.getQuery();
|
||||||
|
case USER_INFO:
|
||||||
|
return url.getUserInfo();
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Remove "https://www.", "https://", "www.", etc */
|
||||||
|
public static String removeProtocol(String urlString) {
|
||||||
|
if (urlString == null) return null;
|
||||||
|
return urlString.replaceFirst("^(http[s]?://www\\.|http[s]?://|www\\.)","");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean areUrlsEqual(String url1, String url2) {
|
||||||
|
if (url1 == null && url2 == null) return true;
|
||||||
|
if (url1 == null || url2 == null) return false;
|
||||||
|
return UrlUtils.removeProtocol(url1).replaceAll("/+$", "").equals(UrlUtils.removeProtocol(url2).replaceAll("/+$", ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user