package com.fastaccess.provider.scheme; import android.net.Uri; import android.support.annotation.NonNull; import com.annimon.stream.Collectors; import com.annimon.stream.Optional; import com.annimon.stream.Stream; import com.fastaccess.helper.ObjectsCompat; import java.util.ArrayList; import java.util.List; /** * Created by Kosh on 11 Apr 2017, 10:02 PM */ class LinkParserHelper { static final String HOST_DEFAULT = "github.com"; static final String HOST_GISTS = "gist.github.com"; static final String HOST_GISTS_RAW = "gist.githubusercontent.com"; static final String RAW_AUTHORITY = "raw.githubusercontent.com"; static final String API_AUTHORITY = "api.github.com"; static final String PROTOCOL_HTTPS = "https"; static final ArrayList<String> IGNORED_LIST = Stream.of("notifications", "settings", "blog", "explore", "dashboard", "repositories", "logout", "sessions", "site", "security", "contact", "about", "logos", "login", "") .collect(Collectors.toCollection(ArrayList::new)); @SafeVarargs static <T> Optional<T> returnNonNull(@NonNull T... t) { return Stream.of(t).filter(ObjectsCompat::nonNull).findFirst(); } @NonNull static Uri getBlobBuilder(@NonNull Uri uri) { List<String> segments = uri.getPathSegments(); Uri.Builder urlBuilder = null; if (uri.getAuthority().equalsIgnoreCase(HOST_DEFAULT)) { String owner = segments.get(0); String repo = segments.get(1); String branch = segments.get(3); urlBuilder = new Uri.Builder(); urlBuilder.scheme("https") .authority(API_AUTHORITY) .appendPath("repos") .appendPath(owner) .appendPath(repo) .appendPath("contents"); for (int i = 4; i < segments.size(); i++) { urlBuilder.appendPath(segments.get(i)); } if (uri.getQueryParameterNames() != null) { for (String query : uri.getQueryParameterNames()) { urlBuilder.appendQueryParameter(query, uri.getQueryParameter(query)); } } if (uri.getEncodedFragment() != null) { urlBuilder.encodedFragment(uri.getEncodedFragment()); } urlBuilder.appendQueryParameter("ref", branch); } return urlBuilder != null ? urlBuilder.build() : uri; } }