Add option to mask nsfw attachments
authorr <r@freesoftwareextremist.com>
Tue, 31 Dec 2019 11:00:21 +0000 (11:00 +0000)
committerr <r@freesoftwareextremist.com>
Tue, 31 Dec 2019 11:24:39 +0000 (11:24 +0000)
mastodon/status.go
model/settings.go
service/service.go
service/transport.go
templates/settings.tmpl
templates/status.tmpl

index 298c6663b3171908b778ef000f4ca1f232015600..6646c601f6a528793e83ffb6708b237941bcc4d7 100644 (file)
@@ -55,6 +55,7 @@ type Status struct {
        ReplyMap        map[string][]ReplyInfo `json:"reply_map"`
        ReplyNumber     int                    `json:"reply_number"`
        ThreadInNewTab  bool                   `json:"thread_in_new_tab"`
+       MaskNSFW        bool                   `json:"mask_nsfw"`
 }
 
 // Context hold information for mastodon context.
index 55db08af6bacac99187f7de818d04566d4a52670..02bebcb46806ff7ea8ccc98cab1f4f191c103416 100644 (file)
@@ -4,6 +4,7 @@ type Settings struct {
        DefaultVisibility string `json:"default_visibility"`
        CopyScope         bool   `json:"copy_scope"`
        ThreadInNewTab    bool   `json:"thread_in_new_tab"`
+       MaskNSFW          bool   `json:"mask_nfsw"`
 }
 
 func NewSettings() *Settings {
@@ -11,5 +12,6 @@ func NewSettings() *Settings {
                DefaultVisibility: "public",
                CopyScope:         true,
                ThreadInNewTab:    false,
+               MaskNSFW:          true,
        }
 }
index c9c48ebd60d22b667737a4a00a558d58f412edad..27e0d4a6fe5690d3feba9345e96b77b72d6c0d79 100644 (file)
@@ -280,6 +280,11 @@ func (svc *service) ServeTimelinePage(ctx context.Context, client io.Writer,
 
        for i := range statuses {
                statuses[i].ThreadInNewTab = c.Session.Settings.ThreadInNewTab
+               statuses[i].MaskNSFW = c.Session.Settings.MaskNSFW
+               if statuses[i].Reblog != nil {
+                       statuses[i].Reblog.ThreadInNewTab = c.Session.Settings.ThreadInNewTab
+                       statuses[i].Reblog.MaskNSFW = c.Session.Settings.MaskNSFW
+               }
        }
 
        if len(maxID) > 0 && len(statuses) > 0 {
@@ -394,6 +399,7 @@ func (svc *service) ServeThreadPage(ctx context.Context, client io.Writer, c *mo
        for i := range statuses {
                statuses[i].ShowReplies = true
                statuses[i].ReplyMap = replyMap
+               statuses[i].MaskNSFW = c.Session.Settings.MaskNSFW
                addToReplyMap(replyMap, statuses[i].InReplyToID, statuses[i].ID, i+1)
        }
 
@@ -434,9 +440,10 @@ func (svc *service) ServeNotificationPage(ctx context.Context, client io.Writer,
 
        var unreadCount int
        for i := range notifications {
-               switch notifications[i].Type {
-               case "reblog", "favourite":
-                       if notifications[i].Status != nil {
+               if notifications[i].Status != nil {
+                       notifications[i].Status.MaskNSFW = c.Session.Settings.MaskNSFW
+                       switch notifications[i].Type {
+                       case "reblog", "favourite":
                                notifications[i].Status.HideAccountInfo = true
                        }
                }
@@ -496,6 +503,13 @@ func (svc *service) ServeUserPage(ctx context.Context, client io.Writer, c *mode
                return
        }
 
+       for i := range statuses {
+               statuses[i].MaskNSFW = c.Session.Settings.MaskNSFW
+               if statuses[i].Reblog != nil {
+                       statuses[i].Reblog.MaskNSFW = c.Session.Settings.MaskNSFW
+               }
+       }
+
        if len(pg.MaxID) > 0 {
                hasNext = true
                nextLink = "/user/" + id + "?max_id=" + pg.MaxID
@@ -666,7 +680,6 @@ func (svc *service) ServeFollowersPage(ctx context.Context, client io.Writer, c
                return
        }
 
-       fmt.Println(len(followers), pg.MaxID)
        if len(followers) == 20 && len(pg.MaxID) > 0 {
                hasNext = true
                nextLink = "/followers/" + id + "?max_id=" + pg.MaxID
@@ -706,6 +719,10 @@ func (svc *service) ServeSearchPage(ctx context.Context, client io.Writer, c *mo
                hasNext = len(results.Accounts) == 20
        case "statuses":
                hasNext = len(results.Statuses) == 20
+               for i := range results.Statuses {
+                       results.Statuses[i].MaskNSFW = c.Session.Settings.MaskNSFW
+               }
+
        }
 
        if hasNext {
index 83eeedfab3ef6c6510d86e40e0968a9c92ad1776..80753776fe164250a93cee88f3ba868f13d4308a 100644 (file)
@@ -355,10 +355,12 @@ func NewHandler(s Service, staticDir string) http.Handler {
                visibility := req.FormValue("visibility")
                copyScope := req.FormValue("copy_scope") == "true"
                threadInNewTab := req.FormValue("thread_in_new_tab") == "true"
+               maskNSFW := req.FormValue("mask_nsfw") == "true"
                settings := &model.Settings{
                        DefaultVisibility: visibility,
                        CopyScope:         copyScope,
                        ThreadInNewTab:    threadInNewTab,
+                       MaskNSFW:          maskNSFW,
                }
 
                err := s.SaveSettings(ctx, w, nil, settings)
index df04cb1e23bc0d455093b2d2bb7b35f6a17e49b9..c4a1012bdfd4a3445b3e885379a4d720e4afe1e8 100644 (file)
                <input id="thread-tab" name="thread_in_new_tab" type="checkbox" value="true" {{if .Settings.ThreadInNewTab}}checked{{end}}>
                <label for="thread-tab"> Open threads in new tab from timeline </label>
        </div>
+       <div class="settings-form-field">
+               <input id="mask-nsfw" name="mask_nsfw" type="checkbox" value="true" {{if .Settings.MaskNSFW}}checked{{end}}>
+               <label for="mask-nsfw"> Mask NSFW Attachments </label>
+       </div>
        <button type="submit"> Save </button>
 </form>
 
index 4c9406207caa4825378574f36dd4cdfbe4b9d7fa..2013f47aebbff2dd59a5db03d3a007258c1d84aa 100644 (file)
@@ -61,7 +61,7 @@
                        {{if eq .Type "image"}}
                        <a class="img-link" href="{{.URL}}" target="_blank">
                                <img class="status-image" src="{{.URL}}" alt="status-image" />
-                               {{if $.Sensitive}}
+                               {{if (and $.MaskNSFW $.Sensitive)}}
                                <div class="status-nsfw-overlay"></div>
                                {{end}}
                        </a>
@@ -76,7 +76,7 @@
                                        <source src="{{.URL}}">
                                        <p> Your browser doesn't support HTML5 video </p>
                                </video>
-                               {{if $.Sensitive}}
+                               {{if (and $.MaskNSFW $.Sensitive)}}
                                <div class="status-nsfw-overlay"></div>
                                {{end}}
                        </div>