bdd39f5d21
Signed-off-by: Vartan Benohanian <vartanbeno@gmail.com>
173 lines
6.8 KiB
Go
173 lines
6.8 KiB
Go
package geddit
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
// AccountService handles communication with the account
|
|
// related methods of the Reddit API.
|
|
type AccountService interface {
|
|
Karma(ctx context.Context) ([]SubredditKarma, *Response, error)
|
|
}
|
|
|
|
// AccountServiceOp implements the AccountService interface.
|
|
type AccountServiceOp struct {
|
|
client *Client
|
|
}
|
|
|
|
var _ AccountService = &AccountServiceOp{}
|
|
|
|
type rootSubredditKarma struct {
|
|
Kind string `json:"kind,omitempty"`
|
|
Data []SubredditKarma `json:"data,omitempty"`
|
|
}
|
|
|
|
// SubredditKarma holds user karma data for the subreddit.
|
|
type SubredditKarma struct {
|
|
Subreddit string `json:"sr"`
|
|
PostKarma int `json:"link_karma"`
|
|
CommentKarma int `json:"comment_karma"`
|
|
}
|
|
|
|
// Settings are the user's account settings.
|
|
// Some of the fields' descriptions are taken from:
|
|
// https://praw.readthedocs.io/en/latest/code_overview/other/preferences.html#praw.models.Preferences.update
|
|
// todo: these should probably be pointers with omitempty
|
|
type Settings struct {
|
|
AcceptPrivateMessages bool `json:"accept_pms"`
|
|
// Allow Reddit to use your activity on Reddit to show you more relevant advertisements.
|
|
ActivityRelevantAds bool `json:"activity_relevant_ads"`
|
|
// Allow reddit to log my outbound clicks for personalization.
|
|
AllowClickTracking bool `json:"allow_clicktracking"`
|
|
|
|
// I would like to beta test features for reddit. By enabling, you will join r/beta immediately.
|
|
Beta bool `json:"beta"`
|
|
ClickGadget bool `json:"clickgadget"`
|
|
CollapseReadMessages bool `json:"collapse_read_messages"`
|
|
Compress bool `json:"compress"`
|
|
CredditAutorenew bool `json:"creddit_autorenew"`
|
|
DefaultCommentSort string `json:"default_comment_sort"`
|
|
ShowDomainDetails bool `json:"domain_details"`
|
|
SendEmailDigests bool `json:"email_digests"`
|
|
SendMessagesAsEmails bool `json:"email_messages"`
|
|
UnsubscribeFromAllEmails bool `json:"email_unsubscribe_all"`
|
|
DisableCustomThemes bool `json:"enable_default_themes"`
|
|
Location string `json:"g"`
|
|
HideAds bool `json:"hide_ads"`
|
|
|
|
// Don't allow search engines to index my user profile.
|
|
HideFromSearchEngines bool `json:"hide_from_robots"`
|
|
|
|
HideUpvotedPosts bool `json:"hide_ups"`
|
|
HideDownvotedPosts bool `json:"hide_downs"`
|
|
|
|
HighlightControversialComments bool `json:"highlight_controversial"`
|
|
HighlightNewComments bool `json:"highlight_new_comments"`
|
|
IgnoreSuggestedSorts bool `json:"ignore_suggested_sort"`
|
|
// Use new Reddit as my default experience.
|
|
UseNewReddit bool `json:"in_redesign_beta"`
|
|
LabelNSFW bool `json:"label_nsfw"`
|
|
Language string `json:"lang"`
|
|
ShowOldSearchPage bool `json:"legacy_search"`
|
|
EnableNotifications bool `json:"live_orangereds"`
|
|
MarkMessagesAsRead bool `json:"mark_messages_read"`
|
|
|
|
// Determine whether to show thumbnails next to posts in subreddits.
|
|
// - "on": show thumbnails next to posts
|
|
// - "off": do not show thumbnails next to posts
|
|
// - "subreddit": show thumbnails next to posts based on the subreddit's preferences
|
|
ShowThumbnails string `json:"media"`
|
|
|
|
// Determine whether to auto-expand media in subreddits.
|
|
// - "on": auto-expand media previews
|
|
// - "off": do not auto-expand media previews
|
|
// - "subreddit": auto-expand media previews based on the subreddit's preferences
|
|
AutoExpandMedia string `json:"media_preview"`
|
|
MinimumCommentScore *int `json:"min_comment_score"`
|
|
MinimumPostScore *int `json:"min_link_score"`
|
|
EnableMentionNotifications bool `json:"monitor_mentions"`
|
|
OpenLinksInNewWindow bool `json:"newwindow"`
|
|
// todo: test this
|
|
DarkMode bool `json:"nightmode"`
|
|
DisableProfanity bool `json:"no_profanity"`
|
|
NumComments int `json:"num_comments,omitempty"`
|
|
NumPosts int `json:"numsites,omitempty"`
|
|
ShowSpotlightBox bool `json:"organic"`
|
|
// todo: test this
|
|
SubredditTheme string `json:"other_theme"`
|
|
ShowNSFW bool `json:"over_18"`
|
|
EnablePrivateRSSFeeds bool `json:"private_feeds"`
|
|
ProfileOptOut bool `json:"profile_opt_out"`
|
|
// Make my upvotes and downvotes public.
|
|
PublicizeVotes bool `json:"public_votes"`
|
|
|
|
// Allow my data to be used for research purposes.
|
|
AllowResearch bool `json:"research"`
|
|
IncludeNSFWSearchResults bool `json:"search_include_over_18"`
|
|
ReceiveCrosspostMessages bool `json:"send_crosspost_messages"`
|
|
ReceiveWelcomeMessages bool `json:"send_welcome_messages"`
|
|
|
|
// Show a user's flair (next to their name on a post or comment).
|
|
ShowUserFlair bool `json:"show_flair"`
|
|
// Show a post's flair.
|
|
ShowPostFlair bool `json:"show_link_flair"`
|
|
|
|
ShowGoldExpiration bool `json:"show_gold_expiration"`
|
|
ShowLocationBasedRecommendations bool `json:"show_location_based_recommendations"`
|
|
ShowPromote bool `json:"show_promote"`
|
|
ShowCustomSubredditThemes bool `json:"show_stylesheets"`
|
|
ShowTrendingSubreddits bool `json:"show_trending"`
|
|
ShowTwitter bool `json:"show_twitter"`
|
|
StoreVisits bool `json:"store_visits"`
|
|
ThemeSelector string `json:"theme_selector"`
|
|
|
|
// Allow Reddit to use data provided by third-parties to show you more relevant advertisements on Reddit.i
|
|
AllowThirdPartyDataAdPersonalization bool `json:"third_party_data_personalized_ads"`
|
|
// Allow personalization of advertisements using data from third-party websites.
|
|
AllowThirdPartySiteDataAdPersonalization bool `json:"third_party_site_data_personalized_ads"`
|
|
// Allow personalization of content using data from third-party websites.
|
|
AllowThirdPartySiteDataContentPersonalization bool `json:"third_party_site_data_personalized_content"`
|
|
|
|
EnableThreadedMessages bool `json:"threaded_messages"`
|
|
EnableThreadedModmail bool `json:"threaded_modmail"`
|
|
TopKarmaSubreddits bool `json:"top_karma_subreddits"`
|
|
UseGlobalDefaults bool `json:"use_global_defaults"`
|
|
// todo: test this, no_video_autoplay
|
|
EnableVideoAutoplay bool `json:"video_autoplay"`
|
|
}
|
|
|
|
// Karma returns a breakdown of your karma per subreddit.
|
|
func (s *AccountServiceOp) Karma(ctx context.Context) ([]SubredditKarma, *Response, error) {
|
|
path := "api/v1/me/karma"
|
|
|
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(rootSubredditKarma)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return root.Data, resp, nil
|
|
}
|
|
|
|
// Settings returns your account settings.
|
|
func (s *AccountServiceOp) Settings(ctx context.Context) {
|
|
path := "api/v1/me/prefs"
|
|
|
|
req, err := s.client.NewRequest(http.MethodGet, path, nil)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
fmt.Println(req)
|
|
|
|
root := new(Settings)
|
|
fmt.Println(root.ShowThumbnails)
|
|
}
|