chiark / gitweb /
Show visibility of posts with an extra header.
authorSimon Tatham <anakin@pobox.com>
Thu, 4 Jan 2024 20:41:12 +0000 (20:41 +0000)
committerSimon Tatham <anakin@pobox.com>
Thu, 4 Jan 2024 20:41:12 +0000 (20:41 +0000)
Also, changed my mind: 'unlisted' doesn't deserve to be alarming red.
Boring grey is enough.

src/posting.rs
src/text.rs

index ca98ac11083b0e31310e99676d653d92d221d960..b872b50a9e44f36f4af0f93fd929146654ceed7f 100644 (file)
@@ -183,7 +183,7 @@ impl PostMenu {
                 "            ffffff"),
             Visibility::Unlisted => ColouredString::general(
                 "Visibility: unlisted (anyone can see it, but feeds omit it)",
-                "            rrrrrrrr                                       "),
+                "                                                           "),
             Visibility::Private => ColouredString::general(
                 "Visibility: private (followees and @mentioned users can see it)",
                 "            rrrrrrr                                            "),
index cbcfa10302f40390ea541c400d8459a3dcad600d..0c3976b95861e1e3294ef07b5a3e31a4599f7dfc 100644 (file)
@@ -970,6 +970,35 @@ fn test_in_reply_to() {
             });
 }
 
+pub struct VisibilityLine {
+    vis: Visibility,
+}
+
+impl VisibilityLine {
+    pub fn new(vis: Visibility) -> Self { VisibilityLine { vis } }
+}
+
+impl TextFragment for VisibilityLine {
+    fn render_highlighted(&self, width: usize, _highlight: Option<Highlight>)
+                          -> Vec<ColouredString>
+    {
+        let line = match self.vis {
+            Visibility::Public => ColouredString::general(
+                "Visibility: public",
+                "            ffffff"),
+            Visibility::Unlisted => ColouredString::plain(
+                "Visibility: unlisted"),
+            Visibility::Private => ColouredString::general(
+                "Visibility: private",
+                "            rrrrrrr"),
+            Visibility::Direct => ColouredString::general(
+                "Visibility: direct",
+                "            rrrrrr"),
+        };
+        vec! { line.truncate(width).to_owned() }
+    }
+}
+
 pub struct NotificationLog {
     timestamp: DateTime<Utc>,
     account_desc: String,
@@ -1670,6 +1699,7 @@ pub struct StatusDisplay {
     from: UsernameHeader,
     via: Option<UsernameHeader>,
     irt: Option<InReplyToLine>,
+    vis: Option<VisibilityLine>,
     content: Html,
     media: Vec<Media>,
     blank: BlankLine,
@@ -1704,6 +1734,11 @@ impl StatusDisplay {
             Some(id) => Some(InReplyToLine::from_id(id, client)),
         };
 
+        let vis = match st.visibility {
+            Visibility::Public => None,
+            vis => Some(VisibilityLine::new(vis)),
+        };
+
         let content = Html::new(&st.content);
 
         let media = st.media_attachments.iter().map(|m| {
@@ -1719,6 +1754,7 @@ impl StatusDisplay {
             from,
             via,
             irt,
+            vis,
             content,
             media,
             blank: BlankLine::new(),
@@ -1756,6 +1792,7 @@ impl TextFragment for StatusDisplay {
             width, &mut highlight));
         push_fragment(&mut lines, self.via.render_highlighted_update(
             width, &mut highlight));
+        push_fragment(&mut lines, self.vis.render(width));
         push_fragment(&mut lines, self.irt.render(width));
         push_fragment(&mut lines, self.blank.render(width));
         let rendered_content = self.content.render(width);