mirror of
https://github.com/fankes/termux-app.git
synced 2025-09-05 10:15:34 +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