Пример #1
0
  public MDLink parseRewrittenUrl(String url) {
    Timber.d("Parsing rewritten topic URL : %s", url);

    // Split url and anchor
    String[] urlParts = url.split("#");
    url = urlParts[0];
    String anchor = urlParts.length >= 2 ? urlParts[1] : null;

    Matcher rewrittenTopicMatcher = rewrittenTopicPattern.matcher(url);

    if (rewrittenTopicMatcher.matches()) {
      boolean hasSubCat = rewrittenTopicMatcher.groupCount() == 4;
      int subcatOffset = hasSubCat ? 1 : 0;

      String categorySlug = rewrittenTopicMatcher.group(1);
      String subcategorySlug = hasSubCat ? rewrittenTopicMatcher.group(2) : null;
      int topicId = Integer.parseInt(rewrittenTopicMatcher.group(subcatOffset + 2));
      int pageNumber = Integer.parseInt(rewrittenTopicMatcher.group(subcatOffset + 3));

      Timber.d(
          "Rewritten topic URL : %s, category : %s, subcategory : %s, topicId : %d, pageNumber : %d",
          url, categorySlug, subcategorySlug, topicId, pageNumber);

      Category topicCategory = categoriesStore.getCategoryBySlug(categorySlug);

      if (topicCategory == null) {
        Timber.e("Category '%s' is unknown", categorySlug);
        return MDLink.invalid();
      } else {
        Timber.d("Link is for category '%s'", topicCategory.name());
        return MDLink.forTopic(topicCategory, topicId)
            .atPage(pageNumber)
            .atPost(parseAnchor(anchor))
            .build();
      }
    } else {
      return MDLink.invalid();
    }
  }