Skip to content

Commit ac07665

Browse files
committed
[bilibili.space] Extract major conversions into separate methods
1 parent 34c542e commit ac07665

File tree

1 file changed

+143
-147
lines changed

1 file changed

+143
-147
lines changed

src/platform/bilibili/source/space.rs

Lines changed: 143 additions & 147 deletions
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,142 @@ mod data {
192192
}
193193

194194
impl ModuleDynamicMajor {
195-
pub fn as_archive(&self) -> Option<&ModuleDynamicMajorArchiveInner> {
195+
pub fn to_content(&self) -> Option<PostContent> {
196196
match self {
197-
ModuleDynamicMajor::Archive(archive) => Some(&archive.archive),
198-
_ => None,
197+
Self::None(none) => Some(PostContent::plain(&none.none.tips)),
198+
Self::Opus(opus) => {
199+
if let Some(title) = opus.opus.title.as_deref() {
200+
Some(
201+
PostContent::plain(title)
202+
.with_plain("\n\n")
203+
.with_content(opus.opus.summary.to_content()),
204+
)
205+
} else {
206+
Some(opus.opus.summary.to_content())
207+
}
208+
}
209+
Self::Archive(archive) => Some(
210+
PostContent::plain("投稿了视频《")
211+
.with_plain(&archive.archive.title)
212+
.with_plain("》"),
213+
),
214+
Self::Article(article) => Some(
215+
PostContent::plain("投稿了文章《")
216+
.with_plain(&article.article.title)
217+
.with_plain("》"),
218+
),
219+
Self::Draw(_) => None,
220+
Self::Common(common) => Some(
221+
PostContent::plain(&common.common.title)
222+
.with_plain(" - ")
223+
.with_plain(&common.common.desc),
224+
),
225+
Self::Pgc(pgc) => Some(
226+
PostContent::plain("剧集《")
227+
.with_plain(&pgc.pgc.title)
228+
.with_plain("》"),
229+
),
230+
Self::Live(live) => Some(PostContent::plain(&live.live.title)),
231+
Self::LiveRcmd | Self::Blocked => {
232+
critical!("unexpected major type", kv: { major:? = self });
233+
unreachable!()
234+
}
235+
}
236+
}
237+
238+
pub fn to_url(&self) -> Option<PostUrl> {
239+
match self {
240+
Self::None(_) | Self::Opus(_) | Self::Draw(_) | Self::Common(_) => {
241+
// No need to add extra URLs
242+
None
243+
}
244+
Self::Archive(archive) => Some(PostUrl::new_clickable(
245+
format!("https://www.bilibili.com/video/{}", archive.archive.bvid),
246+
"查看视频",
247+
)),
248+
Self::Article(article) => Some(PostUrl::new_clickable(
249+
format!("https://www.bilibili.com/read/cv{}", article.article.id),
250+
"查看文章",
251+
)),
252+
Self::Pgc(pgc) => Some(PostUrl::new_clickable(
253+
format!("https://www.bilibili.com/bangumi/play/ep{}", pgc.pgc.epid),
254+
"查看剧集",
255+
)),
256+
Self::Live(live) => Some(PostUrl::new_clickable(
257+
format!("https://live.bilibili.com/{}", live.live.id),
258+
"前往直播间",
259+
)),
260+
Self::LiveRcmd | Self::Blocked => {
261+
critical!("unexpected major type", kv: { major:? = self });
262+
unreachable!()
263+
}
264+
}
265+
}
266+
267+
pub fn to_attachments(&self) -> Vec<PostAttachment> {
268+
match self {
269+
Self::None(_) => vec![],
270+
Self::Opus(opus) => opus
271+
.opus
272+
.pics
273+
.iter()
274+
.map(|pic| {
275+
PostAttachment::Image(PostAttachmentImage {
276+
media_url: upgrade_to_https(&pic.url),
277+
has_spoiler: false,
278+
})
279+
})
280+
.collect(),
281+
Self::Archive(archive) => {
282+
vec![PostAttachment::Image(PostAttachmentImage {
283+
media_url: upgrade_to_https(&archive.archive.cover),
284+
has_spoiler: false,
285+
})]
286+
}
287+
Self::Article(article) => article
288+
.article
289+
.covers
290+
.iter()
291+
.map(|cover| {
292+
PostAttachment::Image(PostAttachmentImage {
293+
media_url: upgrade_to_https(cover),
294+
has_spoiler: false,
295+
})
296+
})
297+
.collect(),
298+
Self::Draw(draw) => draw
299+
.draw
300+
.items
301+
.iter()
302+
.map(|item| {
303+
PostAttachment::Image(PostAttachmentImage {
304+
media_url: upgrade_to_https(&item.src),
305+
has_spoiler: false,
306+
})
307+
})
308+
.collect(),
309+
Self::Common(common) => {
310+
vec![PostAttachment::Image(PostAttachmentImage {
311+
media_url: upgrade_to_https(&common.common.cover),
312+
has_spoiler: false,
313+
})]
314+
}
315+
Self::Pgc(pgc) => {
316+
vec![PostAttachment::Image(PostAttachmentImage {
317+
media_url: upgrade_to_https(&pgc.pgc.cover),
318+
has_spoiler: false,
319+
})]
320+
}
321+
Self::Live(live) => {
322+
vec![PostAttachment::Image(PostAttachmentImage {
323+
media_url: upgrade_to_https(&live.live.cover),
324+
has_spoiler: false,
325+
})]
326+
}
327+
Self::LiveRcmd | Self::Blocked => {
328+
critical!("unexpected major type", kv: { major:? = self });
329+
unreachable!()
330+
}
199331
}
200332
}
201333
}
@@ -580,57 +712,12 @@ fn fetch_space_history_impl<'a>(
580712

581713
fn parse_response(resp: data::SpaceHistory, blocked: &mut BlockedPostIds) -> anyhow::Result<Posts> {
582714
fn parse_item(item: &data::Item, parent_item: Option<&data::Item>) -> anyhow::Result<Post> {
583-
let major_content =
584-
item.modules
585-
.dynamic
586-
.major
587-
.as_ref()
588-
.and_then(|major| -> Option<PostContent> {
589-
match major {
590-
data::ModuleDynamicMajor::None(none) => {
591-
Some(PostContent::plain(&none.none.tips))
592-
}
593-
data::ModuleDynamicMajor::Opus(opus) => {
594-
if let Some(title) = opus.opus.title.as_deref() {
595-
Some(
596-
PostContent::plain(title)
597-
.with_plain("\n\n")
598-
.with_content(opus.opus.summary.to_content()),
599-
)
600-
} else {
601-
Some(opus.opus.summary.to_content())
602-
}
603-
}
604-
data::ModuleDynamicMajor::Archive(archive) => Some(
605-
PostContent::plain("投稿了视频《")
606-
.with_plain(&archive.archive.title)
607-
.with_plain("》"),
608-
),
609-
data::ModuleDynamicMajor::Article(article) => Some(
610-
PostContent::plain("投稿了文章《")
611-
.with_plain(&article.article.title)
612-
.with_plain("》"),
613-
),
614-
data::ModuleDynamicMajor::Draw(_) => None,
615-
data::ModuleDynamicMajor::Common(common) => Some(
616-
PostContent::plain(&common.common.title)
617-
.with_plain(" - ")
618-
.with_plain(&common.common.desc),
619-
),
620-
data::ModuleDynamicMajor::Pgc(pgc) => Some(
621-
PostContent::plain("剧集《")
622-
.with_plain(&pgc.pgc.title)
623-
.with_plain("》"),
624-
),
625-
data::ModuleDynamicMajor::Live(live) => {
626-
Some(PostContent::plain(&live.live.title))
627-
}
628-
data::ModuleDynamicMajor::LiveRcmd | data::ModuleDynamicMajor::Blocked => {
629-
critical!("unexpected major type", kv: { major:? });
630-
unreachable!()
631-
}
632-
}
633-
});
715+
let major_content = item
716+
.modules
717+
.dynamic
718+
.major
719+
.as_ref()
720+
.and_then(|major| major.to_content());
634721
let content = match (&item.modules.dynamic.desc, major_content) {
635722
(Some(desc), Some(major)) => desc.to_content().with_plain("\n\n").with_content(major),
636723
(Some(desc), None) => desc.to_content(),
@@ -661,35 +748,7 @@ fn parse_response(resp: data::SpaceHistory, blocked: &mut BlockedPostIds) -> any
661748
.dynamic
662749
.major
663750
.as_ref()
664-
.and_then(|major| match major {
665-
data::ModuleDynamicMajor::None(_)
666-
| data::ModuleDynamicMajor::Opus(_)
667-
| data::ModuleDynamicMajor::Draw(_)
668-
| data::ModuleDynamicMajor::Common(_) => {
669-
// No need to add extra URLs
670-
None
671-
}
672-
data::ModuleDynamicMajor::Archive(archive) => Some(PostUrl::new_clickable(
673-
format!("https://www.bilibili.com/video/{}", archive.archive.bvid),
674-
"查看视频",
675-
)),
676-
data::ModuleDynamicMajor::Article(article) => Some(PostUrl::new_clickable(
677-
format!("https://www.bilibili.com/read/cv{}", article.article.id),
678-
"查看文章",
679-
)),
680-
data::ModuleDynamicMajor::Pgc(pgc) => Some(PostUrl::new_clickable(
681-
format!("https://www.bilibili.com/bangumi/play/ep{}", pgc.pgc.epid),
682-
"查看剧集",
683-
)),
684-
data::ModuleDynamicMajor::Live(live) => Some(PostUrl::new_clickable(
685-
format!("https://live.bilibili.com/{}", live.live.id),
686-
"前往直播间",
687-
)),
688-
data::ModuleDynamicMajor::LiveRcmd | data::ModuleDynamicMajor::Blocked => {
689-
critical!("unexpected major type", kv: { major:? });
690-
unreachable!()
691-
}
692-
})
751+
.and_then(|major| major.to_url())
693752
.unwrap_or(major_url);
694753

695754
let time = item
@@ -723,70 +782,7 @@ fn parse_response(resp: data::SpaceHistory, blocked: &mut BlockedPostIds) -> any
723782
.dynamic
724783
.major
725784
.as_ref()
726-
.map(|major| match major {
727-
data::ModuleDynamicMajor::None(_) => vec![],
728-
data::ModuleDynamicMajor::Opus(opus) => opus
729-
.opus
730-
.pics
731-
.iter()
732-
.map(|pic| {
733-
PostAttachment::Image(PostAttachmentImage {
734-
media_url: upgrade_to_https(&pic.url),
735-
has_spoiler: false,
736-
})
737-
})
738-
.collect(),
739-
data::ModuleDynamicMajor::Archive(archive) => {
740-
vec![PostAttachment::Image(PostAttachmentImage {
741-
media_url: upgrade_to_https(&archive.archive.cover),
742-
has_spoiler: false,
743-
})]
744-
}
745-
data::ModuleDynamicMajor::Article(article) => article
746-
.article
747-
.covers
748-
.iter()
749-
.map(|cover| {
750-
PostAttachment::Image(PostAttachmentImage {
751-
media_url: upgrade_to_https(cover),
752-
has_spoiler: false,
753-
})
754-
})
755-
.collect(),
756-
data::ModuleDynamicMajor::Draw(draw) => draw
757-
.draw
758-
.items
759-
.iter()
760-
.map(|item| {
761-
PostAttachment::Image(PostAttachmentImage {
762-
media_url: upgrade_to_https(&item.src),
763-
has_spoiler: false,
764-
})
765-
})
766-
.collect(),
767-
data::ModuleDynamicMajor::Common(common) => {
768-
vec![PostAttachment::Image(PostAttachmentImage {
769-
media_url: upgrade_to_https(&common.common.cover),
770-
has_spoiler: false,
771-
})]
772-
}
773-
data::ModuleDynamicMajor::Pgc(pgc) => {
774-
vec![PostAttachment::Image(PostAttachmentImage {
775-
media_url: upgrade_to_https(&pgc.pgc.cover),
776-
has_spoiler: false,
777-
})]
778-
}
779-
data::ModuleDynamicMajor::Live(live) => {
780-
vec![PostAttachment::Image(PostAttachmentImage {
781-
media_url: upgrade_to_https(&live.live.cover),
782-
has_spoiler: false,
783-
})]
784-
}
785-
data::ModuleDynamicMajor::LiveRcmd | data::ModuleDynamicMajor::Blocked => {
786-
critical!("unexpected major type: {major:?}");
787-
unreachable!()
788-
}
789-
})
785+
.map(|major| major.to_attachments())
790786
.unwrap_or_default(),
791787
prefer_treat_as_reply: false,
792788
})

0 commit comments

Comments
 (0)