Skip to content

Commit

Permalink
Fix for when user pages appear in subscription list
Browse files Browse the repository at this point in the history
  • Loading branch information
QuantumBadger committed Jun 25, 2017
1 parent 707fdd1 commit 1c22a66
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@
import org.quantumbadger.redreader.account.RedditAccount;
import org.quantumbadger.redreader.account.RedditAccountManager;
import org.quantumbadger.redreader.common.AndroidCommon;
import org.quantumbadger.redreader.common.Constants;
import org.quantumbadger.redreader.common.General;
import org.quantumbadger.redreader.common.LinkHandler;
import org.quantumbadger.redreader.common.PrefsUtility;
import org.quantumbadger.redreader.fragments.MainMenuFragment;
import org.quantumbadger.redreader.reddit.api.RedditSubredditSubscriptionManager;
Expand Down Expand Up @@ -403,7 +405,9 @@ public void run() {
GroupedRecyclerViewItemListItemView item;

try {
item = makeSubredditItem(RedditSubreddit.stripRPrefix(subreddit), isFirst);
item = makeSubredditItem(
RedditSubreddit.getDisplayNameFromCanonicalName(RedditSubreddit.getCanonicalName(subreddit)),
isFirst);

} catch(RedditSubreddit.InvalidSubredditNameException e) {
item = makeSubredditItem("Invalid: " + subreddit, isFirst);
Expand Down Expand Up @@ -490,8 +494,16 @@ private GroupedRecyclerViewItemListItemView makeSubredditItem(
@Override
public void onClick(final View view) {
try {
mListener.onSelected(
(PostListingURL) SubredditPostListURL.getSubreddit(RedditSubreddit.getCanonicalName(name)));
final String canonicalName = RedditSubreddit.getCanonicalName(name);

if(canonicalName.startsWith("/r/")) {
mListener.onSelected((PostListingURL) SubredditPostListURL.getSubreddit(canonicalName));

} else {
LinkHandler.onLinkClicked(mActivity, canonicalName);
}


} catch(RedditSubreddit.InvalidSubredditNameException e) {
throw new RuntimeException(e);
}
Expand Down Expand Up @@ -587,7 +599,8 @@ public void onClick(DialogInterface dialog, int which) {

private void onSubredditActionMenuItemSelected(String subredditCanonicalName, AppCompatActivity activity, SubredditAction action) {
try {
final String url = "https://" + SubredditPostListURL.getSubreddit(subredditCanonicalName).humanReadableUrl();
final String url = Constants.Reddit.getNonAPIUri(subredditCanonicalName).toString();

RedditSubredditSubscriptionManager subMan = RedditSubredditSubscriptionManager
.getSingleton(activity, RedditAccountManager.getInstance(activity).getDefaultAccount());
List<String> pinnedSubreddits = PrefsUtility.pref_pinned_subreddits(mActivity, PreferenceManager.getDefaultSharedPreferences(mActivity));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -848,8 +848,10 @@ private boolean getIsPostBlocked(
@NonNull final List<String> blockedSubreddits,
@NonNull final RedditPost post) throws RedditSubreddit.InvalidSubredditNameException {

final String canonicalName = RedditSubreddit.getCanonicalName(post.subreddit);

for (String blockedSubredditName : blockedSubreddits) {
if (blockedSubredditName.equalsIgnoreCase(RedditSubreddit.getCanonicalName(post.subreddit))) {
if (blockedSubredditName.equalsIgnoreCase(canonicalName)) {
return true;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,10 +200,16 @@ public void onJsonParseStarted(JsonValue result, long timestamp, UUID session, b
for(final JsonValue v : subreddits) {
final RedditThing thing = v.asObject(RedditThing.class);
final RedditSubreddit subreddit = thing.asSubreddit();

subreddit.downloadTime = timestamp;

toWrite.add(subreddit);
output.add(subreddit.getCanonicalName());
try {
output.add(subreddit.getCanonicalName());
toWrite.add(subreddit);
} catch(final RedditSubreddit.InvalidSubredditNameException e) {
Log.e("SubredditListRequester", "Ignoring invalid subreddit", e);
}

}

RedditSubredditManager.getInstance(context, user).offerRawSubredditData(toWrite, timestamp);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public InvalidSubredditNameException(String subredditName) {
@WritableObjectTimestamp public long downloadTime;

private static final Pattern NAME_PATTERN = Pattern.compile("(/)?(r/)?([\\w\\+\\-\\.:]+)/?");
private static final Pattern USER_PATTERN = Pattern.compile("(/)?(u/|user/)([\\w\\+\\-\\.:]+)/?");

public RedditSubreddit(CreationData creationData) {
this();
Expand All @@ -75,12 +76,28 @@ public static String stripRPrefix(String name) throws InvalidSubredditNameExcept
}
}

public static String stripUserPrefix(String name) {
final Matcher matcher = USER_PATTERN.matcher(name);
if(matcher.matches()) {
return matcher.group(3);
} else {
return null;
}
}

/**
* @param name a subreddit name in the form "subreddit", "r/subreddit" or "/r/subreddit" (case-insensitive)
* @return a subreddit name in the form "/r/subreddit" (lower-cased)
* @throws InvalidSubredditNameException if {@code name} is null or not in the expected format
*/
public static String getCanonicalName(String name) throws InvalidSubredditNameException {

final String userSr = stripUserPrefix(name);

if(userSr != null) {
return "/user/" + General.asciiLowercase(userSr);
}

return "/r/" + General.asciiLowercase(stripRPrefix(name));
}

Expand All @@ -89,6 +106,11 @@ public String getCanonicalName() throws InvalidSubredditNameException {
}

public static String getDisplayNameFromCanonicalName(String canonicalName) {

if(canonicalName.startsWith("/user/")) {
return canonicalName;
}

return canonicalName.substring(3);
}

Expand Down

0 comments on commit 1c22a66

Please sign in to comment.