termux-app

Форк
0
113 строк · 3.4 Кб
1
package com.termux.shared.net.url;
2

3
import androidx.annotation.Nullable;
4

5
import com.termux.shared.data.DataUtils;
6
import com.termux.shared.logger.Logger;
7

8
import java.net.MalformedURLException;
9
import java.net.URL;
10

11
public class UrlUtils {
12

13
    /** The parts of a {@link URL}. */
14
    public enum UrlPart {
15
        AUTHORITY,
16
        FILE,
17
        HOST,
18
        REF,
19
        FRAGMENT,
20
        PATH,
21
        PORT,
22
        PROTOCOL,
23
        QUERY,
24
        USER_INFO
25
    }
26

27
    private static final String LOG_TAG = "UrlUtils";
28

29
    /**
30
     * Join a url base and destination.
31
     *
32
     * @param base The base url to open.
33
     * @param destination The destination url to open.
34
     * @param logError If an error message should be logged.
35
     * @return Returns the joined {@link String} Url, otherwise {@code null}.
36
     */
37
    @Nullable
38
    public static String joinUrl(final String base, String destination, boolean logError) {
39
        if (DataUtils.isNullOrEmpty(base)) return null;
40
        try {
41
            return new URL(new URL(base), destination).toString();
42
        } catch (MalformedURLException e) {
43
            if (logError)
44
                Logger.logError(LOG_TAG, "Failed to join url base \"" + base + "\" and destination \"" + destination + "\": " + e.getMessage());
45
            return null;
46
        }
47
    }
48

49
    /**
50
     * Get {@link URL} from url string.
51
     *
52
     * @param urlString The urlString string.
53
     * @return Returns the {@link URL} if a valid urlString, otherwise {@code null}.
54
     */
55
    @Nullable
56
    public static URL getUrl(String urlString) {
57
        if (DataUtils.isNullOrEmpty(urlString)) return null;
58
        try {
59
            return new URL(urlString);
60
        } catch (MalformedURLException e) {
61
            return null;
62
        }
63
    }
64

65
    /**
66
     * Get a {@link URL} part from url string.
67
     *
68
     * @param urlString The urlString string.
69
     * @param urlPart The part to get.
70
     * @return Returns the {@link URL} part if a valid urlString and part, otherwise {@code null}.
71
     */
72
    @Nullable
73
    public static String getUrlPart(String urlString, UrlPart urlPart) {
74
        URL url = getUrl(urlString);
75
        if (url == null) return null;
76
        switch (urlPart) {
77
            case AUTHORITY:
78
                return url.getAuthority();
79
            case FILE:
80
                return url.getFile();
81
            case HOST:
82
                return url.getHost();
83
            case REF:
84
            case FRAGMENT:
85
                return url.getRef();
86
            case PATH:
87
                return url.getPath();
88
            case PORT:
89
                return String.valueOf(url.getPort());
90
            case PROTOCOL:
91
                return url.getProtocol();
92
            case QUERY:
93
                return url.getQuery();
94
            case USER_INFO:
95
                return url.getUserInfo();
96
            default:
97
                return null;
98
        }
99
    }
100

101
    /** Remove "https://www.", "https://", "www.", etc */
102
    public static String removeProtocol(String urlString) {
103
        if (urlString == null) return null;
104
        return urlString.replaceFirst("^(http[s]?://www\\.|http[s]?://|www\\.)","");
105
    }
106

107
    public static boolean areUrlsEqual(String url1, String url2) {
108
        if (url1 == null && url2 == null) return true;
109
        if (url1 == null || url2 == null) return false;
110
        return UrlUtils.removeProtocol(url1).replaceAll("/+$", "").equals(UrlUtils.removeProtocol(url2).replaceAll("/+$", ""));
111
    }
112

113
}
114

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.