package org.quantumbadger.redreader.reddit; import org.quantumbadger.redreader.account.RedditAccount; import org.quantumbadger.redreader.common.Constants; import org.quantumbadger.redreader.common.General; import org.quantumbadger.redreader.reddit.things.RedditSubreddit; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; // Keeps an in-memory list of all known subreddits per account public class RedditSubredditHistory { private static final HashMap<RedditAccount, HashSet<String>> SUBREDDITS = new HashMap<>(); public static synchronized void addSubreddit(final RedditAccount account, final String name) throws RedditSubreddit.InvalidSubredditNameException { putDefaultSubreddits(account); SUBREDDITS.get(account).add(General.asciiLowercase(RedditSubreddit.stripRPrefix(name))); } public static synchronized ArrayList<String> getSubredditsSorted(final RedditAccount account) { putDefaultSubreddits(account); final ArrayList<String> result = new ArrayList<>(SUBREDDITS.get(account)); Collections.sort(result); return result; } private static void putDefaultSubreddits(final RedditAccount account){ if (!SUBREDDITS.containsKey(account) || SUBREDDITS.get(account) == null) { SUBREDDITS.put(account, new HashSet<String>()); } HashSet<String> personalizedSubreddits = SUBREDDITS.get(account); if (personalizedSubreddits.isEmpty()) { for (final String subreddit : Constants.Reddit.DEFAULT_SUBREDDITS) { try { personalizedSubreddits.add(General.asciiLowercase(RedditSubreddit.stripRPrefix(subreddit))); } catch (final RedditSubreddit.InvalidSubredditNameException e) { throw new RuntimeException(e); } } } } }