From b5017d4805386e0174466f93c9b5648e137b0801 Mon Sep 17 00:00:00 2001 From: Justin Mazzocchi <2831158+jzzocc@users.noreply.github.com> Date: Mon, 17 Aug 2020 22:13:37 -0700 Subject: [PATCH] Basic status fetching and rendering --- .../DevelopmentAssets.xcassets/Contents.json | 6 + .../timelineJSON.dataset/Contents.json | 13 + .../timelineJSON.dataset/timeline.json | 1581 +++++++++++++++++ Development Assets/DevelopmentModels.swift | 8 +- .../TimelinesEndpoint+Stubbing.swift | 14 + Development Assets/Stubbing.swift | 2 + Metatext.xcodeproj/project.pbxproj | 118 +- Shared/Databases/ContentDatabase.swift | 410 +++++ Shared/Model/AppEnvironment.swift | 7 +- Shared/Model/Application.swift | 4 +- Shared/Model/Attachment.swift | 43 + Shared/Model/Card.swift | 25 + Shared/Model/ListTimeline.swift | 8 + Shared/Model/Mention.swift | 10 + Shared/Model/Poll.swift | 21 + Shared/Model/Status.swift | 94 +- Shared/Model/Tag.swift | 8 + Shared/Model/Timeline.swift | 38 + .../TransientStatusCollection.swift} | 4 +- .../Endpoints/TimelinesEndpoint.swift | 42 + Shared/Services/IdentityService.swift | 7 + .../StatusListService.swift | 9 + .../TimelineService.swift | 28 + Shared/View Models/StatusesViewModel.swift | 28 + Shared/Views/StatusesView.swift | 31 + Shared/Views/TimelineView.swift | 17 - iOS/View Models/TabNavigationViewModel.swift | 2 + iOS/Views/TabNavigationView.swift | 2 +- .../SidebarNavigationViewModel.swift | 2 + macOS/Views/SidebarNavigationView.swift | 2 +- 30 files changed, 2544 insertions(+), 40 deletions(-) create mode 100644 Development Assets/DevelopmentAssets.xcassets/Contents.json create mode 100644 Development Assets/DevelopmentAssets.xcassets/timelineJSON.dataset/Contents.json create mode 100644 Development Assets/DevelopmentAssets.xcassets/timelineJSON.dataset/timeline.json create mode 100644 Development Assets/Mastodon API Stubs/TimelinesEndpoint+Stubbing.swift create mode 100644 Shared/Databases/ContentDatabase.swift create mode 100644 Shared/Model/Attachment.swift create mode 100644 Shared/Model/Card.swift create mode 100644 Shared/Model/ListTimeline.swift create mode 100644 Shared/Model/Mention.swift create mode 100644 Shared/Model/Poll.swift create mode 100644 Shared/Model/Tag.swift create mode 100644 Shared/Model/Timeline.swift rename Shared/{View Models/TimelineViewModel.swift => Model/TransientStatusCollection.swift} (54%) create mode 100644 Shared/Networking/Mastodon API/Endpoints/TimelinesEndpoint.swift create mode 100644 Shared/Services/Status List Services/StatusListService.swift create mode 100644 Shared/Services/Status List Services/TimelineService.swift create mode 100644 Shared/View Models/StatusesViewModel.swift create mode 100644 Shared/Views/StatusesView.swift delete mode 100644 Shared/Views/TimelineView.swift diff --git a/Development Assets/DevelopmentAssets.xcassets/Contents.json b/Development Assets/DevelopmentAssets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Development Assets/DevelopmentAssets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Development Assets/DevelopmentAssets.xcassets/timelineJSON.dataset/Contents.json b/Development Assets/DevelopmentAssets.xcassets/timelineJSON.dataset/Contents.json new file mode 100644 index 0000000..7e6a022 --- /dev/null +++ b/Development Assets/DevelopmentAssets.xcassets/timelineJSON.dataset/Contents.json @@ -0,0 +1,13 @@ +{ + "data" : [ + { + "filename" : "timeline.json", + "idiom" : "universal", + "universal-type-identifier" : "public.json" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Development Assets/DevelopmentAssets.xcassets/timelineJSON.dataset/timeline.json b/Development Assets/DevelopmentAssets.xcassets/timelineJSON.dataset/timeline.json new file mode 100644 index 0000000..ed07da0 --- /dev/null +++ b/Development Assets/DevelopmentAssets.xcassets/timelineJSON.dataset/timeline.json @@ -0,0 +1,1581 @@ +[ + { + "id": "104708437047868802", + "created_at": "2020-08-18T04:12:25.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://squeet.me/objects/962c3e10-105f-3b55-282d-896121106910", + "url": "https://squeet.me/display/962c3e10-105f-3b55-282d-896121106910", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 1, + "content": " \u2672 @UCmyGZ0689ODyReHw3rsKLtQ@invidio.us:
- #ThisWeekInLinux -
- This Week in Linux 113: Red Hat + Flatpak, KDE Neon, Darktable, RetroArch, HBO Max Drops Linux -
- #bot -
\nPut emphasis around the Beattles
sed -E 's!(John|Paul|George|Ringo)!<em>&</em>!g' file
#Sed #Linux
from https://www.yesik.it/EP08
I'm Sylvain Leroux from France. Use your favorite search engine to learn more about me if you want!
", + "url": "https://mastodon.social/@YesIKnowIT", + "avatar": "https://files.mastodon.social/accounts/avatars/000/025/733/original/21b3a5e955183b9a.jpg", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/025/733/original/21b3a5e955183b9a.jpg", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 390, + "following_count": 6, + "statuses_count": 2100, + "last_status_at": "2020-08-18", + "emojis": [], + "fields": [] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + }, + { + "name": "sed", + "url": "https://mastodon.social/tags/sed" + } + ], + "emojis": [], + "card": null, + "poll": null + }, + { + "id": "104707921275930703", + "created_at": "2020-08-18T02:01:20.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://pokemon.men/users/archlinux/statuses/104707921078691325", + "url": "https://pokemon.men/@archlinux/104707921078691325", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "#ArchLinux Audio: no devices no applications, pa_pid_file_create() failed https://bbs.archlinux.org/viewtopic.php?id=258269&action=new #Linux
", + "reblog": null, + "account": { + "id": "803769", + "username": "archlinux", + "acct": "archlinux@pokemon.men", + "display_name": "ArchLinux :archlinux:", + "locked": false, + "bot": true, + "discoverable": true, + "group": false, + "created_at": "2019-05-06T09:29:27.890Z", + "note": "", + "url": "https://pokemon.men/@archlinux", + "avatar": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 551, + "following_count": 3, + "statuses_count": 36276, + "last_status_at": "2020-08-18", + "emojis": [ + { + "shortcode": "archlinux", + "url": "https://files.mastodon.social/custom_emojis/images/000/098/720/original/df864361dfd59662.png", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/098/720/static/df864361dfd59662.png", + "visible_in_picker": true + } + ], + "fields": [] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "archlinux", + "url": "https://mastodon.social/tags/archlinux" + }, + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": { + "url": "https://bbs.archlinux.org/viewtopic.php?id=258269&action=new", + "title": "Audio: no devices no applications, pa_pid_file_create() failed / Applications & Desktop Environments / Arch Linux Forums", + "description": "", + "type": "link", + "author_name": "", + "author_url": "", + "provider_name": "", + "provider_url": "", + "html": "", + "width": 0, + "height": 0, + "image": null, + "embed_url": "", + "blurhash": null + }, + "poll": null + }, + { + "id": "104707803181059016", + "created_at": "2020-08-18T01:31:18.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://pokemon.men/users/archlinux/statuses/104707802973756157", + "url": "https://pokemon.men/@archlinux/104707802973756157", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "#ArchLinux One, System-wide Resolution https://bbs.archlinux.org/viewtopic.php?id=258268&action=new #Linux
", + "reblog": null, + "account": { + "id": "803769", + "username": "archlinux", + "acct": "archlinux@pokemon.men", + "display_name": "ArchLinux :archlinux:", + "locked": false, + "bot": true, + "discoverable": true, + "group": false, + "created_at": "2019-05-06T09:29:27.890Z", + "note": "", + "url": "https://pokemon.men/@archlinux", + "avatar": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 551, + "following_count": 3, + "statuses_count": 36276, + "last_status_at": "2020-08-18", + "emojis": [ + { + "shortcode": "archlinux", + "url": "https://files.mastodon.social/custom_emojis/images/000/098/720/original/df864361dfd59662.png", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/098/720/static/df864361dfd59662.png", + "visible_in_picker": true + } + ], + "fields": [] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "archlinux", + "url": "https://mastodon.social/tags/archlinux" + }, + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": { + "url": "https://bbs.archlinux.org/viewtopic.php?id=258268&action=new", + "title": "One, System-wide Resolution / Laptop Issues / Arch Linux Forums", + "description": "", + "type": "link", + "author_name": "", + "author_url": "", + "provider_name": "", + "provider_url": "", + "html": "", + "width": 0, + "height": 0, + "image": null, + "embed_url": "", + "blurhash": null + }, + "poll": null + }, + { + "id": "104707685161810603", + "created_at": "2020-08-18T01:01:19.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://pokemon.men/users/archlinux/statuses/104707685018408709", + "url": "https://pokemon.men/@archlinux/104707685018408709", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "#ArchLinux [SOLVED] Make some XFCE panel plugins icons smaller https://bbs.archlinux.org/viewtopic.php?id=222292&action=new #Linux
", + "reblog": null, + "account": { + "id": "803769", + "username": "archlinux", + "acct": "archlinux@pokemon.men", + "display_name": "ArchLinux :archlinux:", + "locked": false, + "bot": true, + "discoverable": true, + "group": false, + "created_at": "2019-05-06T09:29:27.890Z", + "note": "", + "url": "https://pokemon.men/@archlinux", + "avatar": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 551, + "following_count": 3, + "statuses_count": 36276, + "last_status_at": "2020-08-18", + "emojis": [ + { + "shortcode": "archlinux", + "url": "https://files.mastodon.social/custom_emojis/images/000/098/720/original/df864361dfd59662.png", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/098/720/static/df864361dfd59662.png", + "visible_in_picker": true + } + ], + "fields": [] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "archlinux", + "url": "https://mastodon.social/tags/archlinux" + }, + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": { + "url": "https://bbs.archlinux.org/viewtopic.php?id=222292&action=new", + "title": "[SOLVED] Make some XFCE panel plugins icons smaller / Newbie Corner / Arch Linux Forums", + "description": "", + "type": "link", + "author_name": "", + "author_url": "", + "provider_name": "", + "provider_url": "", + "html": "", + "width": 0, + "height": 0, + "image": null, + "embed_url": "", + "blurhash": null + }, + "poll": null + }, + { + "id": "104707667724226355", + "created_at": "2020-08-18T00:56:55.076Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://mastodon.social/users/Decentralize_today/statuses/104707667724226355", + "url": "https://mastodon.social/@Decentralize_today/104707667724226355", + "replies_count": 0, + "reblogs_count": 3, + "favourites_count": 1, + "content": "Facebook to take board seat at Linux Foundation after signing as Platinum member
#deletefacebook #deletefacebooknow #linux
", + "reblog": null, + "application": { + "name": "Whalebird", + "website": "https://whalebird.org" + }, + "account": { + "id": "772454", + "username": "Decentralize_today", + "acct": "Decentralize_today", + "display_name": "Decentralize.Today", + "locked": false, + "bot": false, + "discoverable": true, + "group": false, + "created_at": "2019-03-23T02:09:11.268Z", + "note": "The future won't be centralized
", + "url": "https://mastodon.social/@Decentralize_today", + "avatar": "https://files.mastodon.social/accounts/avatars/000/772/454/original/08c8790703a92265.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/772/454/original/08c8790703a92265.png", + "header": "https://files.mastodon.social/accounts/headers/000/772/454/original/1194Decentralize.Today-Logo-Tagline-V3-01-DarkBG.png", + "header_static": "https://files.mastodon.social/accounts/headers/000/772/454/original/1194Decentralize.Today-Logo-Tagline-V3-01-DarkBG.png", + "followers_count": 883, + "following_count": 218, + "statuses_count": 2456, + "last_status_at": "2020-08-18", + "emojis": [], + "fields": [ + { + "name": "www", + "value": "https://decentralize.today", + "verified_at": null + } + ] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + }, + { + "name": "deletefacebooknow", + "url": "https://mastodon.social/tags/deletefacebooknow" + }, + { + "name": "deletefacebook", + "url": "https://mastodon.social/tags/deletefacebook" + } + ], + "emojis": [], + "card": { + "url": "http://web.archive.org/web/20200818005521/https://www.theregister.com/2020/08/17/facebook_platinum_member_linux_foundation/", + "title": "Facebook to take board seat at Linux Foundation after signing as Platinum member", + "description": "Already a big mover in Foundation projects like Presto, GraphQL, Osquery and ONNX, so why not go all-in?", + "type": "link", + "author_name": "", + "author_url": "", + "provider_name": "", + "provider_url": "", + "html": "", + "width": 400, + "height": 267, + "image": "https://files.mastodon.social/cache/preview_cards/images/023/011/346/original/5337fcab0b8f989c.jpg", + "embed_url": "", + "blurhash": "USJaAy~W8^DiMcD*S%tRvgM{tlxvT0fjxWV[" + }, + "poll": null + }, + { + "id": "104707623619356492", + "created_at": "2020-08-18T00:45:39.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://fosstodon.org/users/nixchick/statuses/104707623442798384", + "url": "https://fosstodon.org/@nixchick/104707623442798384", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "Matthew Arnold: Why I switched to #fedora #linux
https://fedoramagazine.org/matthew-arnold-why-i-switched-to-fedora/
", + "reblog": null, + "account": { + "id": "1035247", + "username": "nixchick", + "acct": "nixchick@fosstodon.org", + "display_name": "nixchick", + "locked": false, + "bot": false, + "discoverable": true, + "group": false, + "created_at": "2019-12-19T02:51:44.093Z", + "note": "An unhealthy addiction to books,tech, open-source, and coffee.
", + "url": "https://fosstodon.org/@nixchick", + "avatar": "https://files.mastodon.social/cache/accounts/avatars/001/035/247/original/673e80483a6117b8.jpeg", + "avatar_static": "https://files.mastodon.social/cache/accounts/avatars/001/035/247/original/673e80483a6117b8.jpeg", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 140, + "following_count": 64, + "statuses_count": 502, + "last_status_at": "2020-08-18", + "emojis": [], + "fields": [ + { + "name": "Age", + "value": "Old enough to know better.", + "verified_at": null + }, + { + "name": "Location", + "value": "The Midwest, USA", + "verified_at": null + }, + { + "name": "AKA", + "value": "lstench", + "verified_at": null + } + ] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "fedora", + "url": "https://mastodon.social/tags/fedora" + }, + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": { + "url": "https://fedoramagazine.org/matthew-arnold-why-i-switched-to-fedora/", + "title": "Matthew Arnold: Why I switched to Fedora - Fedora Magazine", + "description": "To a veteran user of other distributions, Fedora can be a challenge. If you are switching to Fedora, here are some observations and tips to get you started.", + "type": "link", + "author_name": "marnold512", + "author_url": "https://fedoramagazine.org/author/marnold512/", + "provider_name": "Fedora Magazine", + "provider_url": "https://fedoramagazine.org", + "html": "", + "width": 400, + "height": 169, + "image": "https://files.mastodon.social/cache/preview_cards/images/022/566/822/original/795a2e30937d9250.jpg", + "embed_url": "", + "blurhash": "U542Pij[DzfR-?j[RhfQM]j[%OfPDzayxxfQ" + }, + "poll": null + }, + { + "id": "104707567635429827", + "created_at": "2020-08-18T00:31:18.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://pokemon.men/users/archlinux/statuses/104707567036696269", + "url": "https://pokemon.men/@archlinux/104707567036696269", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "#ArchLinux BSPWM multi-monitor setup https://bbs.archlinux.org/viewtopic.php?id=258267&action=new #Linux
", + "reblog": null, + "account": { + "id": "803769", + "username": "archlinux", + "acct": "archlinux@pokemon.men", + "display_name": "ArchLinux :archlinux:", + "locked": false, + "bot": true, + "discoverable": true, + "group": false, + "created_at": "2019-05-06T09:29:27.890Z", + "note": "", + "url": "https://pokemon.men/@archlinux", + "avatar": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 551, + "following_count": 3, + "statuses_count": 36276, + "last_status_at": "2020-08-18", + "emojis": [ + { + "shortcode": "archlinux", + "url": "https://files.mastodon.social/custom_emojis/images/000/098/720/original/df864361dfd59662.png", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/098/720/static/df864361dfd59662.png", + "visible_in_picker": true + } + ], + "fields": [] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "archlinux", + "url": "https://mastodon.social/tags/archlinux" + }, + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": { + "url": "https://bbs.archlinux.org/viewtopic.php?id=258267&action=new", + "title": "BSPWM multi-monitor setup / Applications & Desktop Environments / Arch Linux Forums", + "description": "", + "type": "link", + "author_name": "", + "author_url": "", + "provider_name": "", + "provider_url": "", + "html": "", + "width": 0, + "height": 0, + "image": null, + "embed_url": "", + "blurhash": null + }, + "poll": null + }, + { + "id": "104707450535913067", + "created_at": "2020-08-18T00:01:21.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://pokemon.men/users/archlinux/statuses/104707449255979646", + "url": "https://pokemon.men/@archlinux/104707449255979646", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "#ArchLinux Darktable 3.2.1 arch package is almost 100% slower than flatpak ver! https://bbs.archlinux.org/viewtopic.php?id=258266&action=new #Linux
", + "reblog": null, + "account": { + "id": "803769", + "username": "archlinux", + "acct": "archlinux@pokemon.men", + "display_name": "ArchLinux :archlinux:", + "locked": false, + "bot": true, + "discoverable": true, + "group": false, + "created_at": "2019-05-06T09:29:27.890Z", + "note": "", + "url": "https://pokemon.men/@archlinux", + "avatar": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 551, + "following_count": 3, + "statuses_count": 36276, + "last_status_at": "2020-08-18", + "emojis": [ + { + "shortcode": "archlinux", + "url": "https://files.mastodon.social/custom_emojis/images/000/098/720/original/df864361dfd59662.png", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/098/720/static/df864361dfd59662.png", + "visible_in_picker": true + } + ], + "fields": [] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "archlinux", + "url": "https://mastodon.social/tags/archlinux" + }, + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": { + "url": "https://bbs.archlinux.org/viewtopic.php?id=258266&action=new", + "title": "Darktable 3.2.1 arch package is almost 100% slower than flatpak ver! / Applications & Desktop Environments / Arch Linux Forums", + "description": "", + "type": "link", + "author_name": "", + "author_url": "", + "provider_name": "", + "provider_url": "", + "html": "", + "width": 0, + "height": 0, + "image": null, + "embed_url": "", + "blurhash": null + }, + "poll": null + }, + { + "id": "104707450254764172", + "created_at": "2020-08-18T00:01:21.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "zhCn", + "uri": "https://pokemon.men/users/archlinux/statuses/104707449225276595", + "url": "https://pokemon.men/@archlinux/104707449225276595", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "#ArchLinux VFIO @boot -> sh vfio-pci-override.sh: permission denied https://bbs.archlinux.org/viewtopic.php?id=255483&action=new #Linux
", + "reblog": null, + "account": { + "id": "803769", + "username": "archlinux", + "acct": "archlinux@pokemon.men", + "display_name": "ArchLinux :archlinux:", + "locked": false, + "bot": true, + "discoverable": true, + "group": false, + "created_at": "2019-05-06T09:29:27.890Z", + "note": "", + "url": "https://pokemon.men/@archlinux", + "avatar": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 551, + "following_count": 3, + "statuses_count": 36276, + "last_status_at": "2020-08-18", + "emojis": [ + { + "shortcode": "archlinux", + "url": "https://files.mastodon.social/custom_emojis/images/000/098/720/original/df864361dfd59662.png", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/098/720/static/df864361dfd59662.png", + "visible_in_picker": true + } + ], + "fields": [] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "archlinux", + "url": "https://mastodon.social/tags/archlinux" + }, + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": { + "url": "https://bbs.archlinux.org/viewtopic.php?id=255483&action=new", + "title": "VFIO @boot -> sh vfio-pci-override.sh: permission denied / Kernel & Hardware / Arch Linux Forums", + "description": "", + "type": "link", + "author_name": "", + "author_url": "", + "provider_name": "", + "provider_url": "", + "html": "", + "width": 0, + "height": 0, + "image": null, + "embed_url": "", + "blurhash": null + }, + "poll": null + }, + { + "id": "104707449889400649", + "created_at": "2020-08-18T00:01:20.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://pokemon.men/users/archlinux/statuses/104707449199508042", + "url": "https://pokemon.men/@archlinux/104707449199508042", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "#ArchLinux Mouse Input stuttering on XPS15 9500 https://bbs.archlinux.org/viewtopic.php?id=257694&action=new #Linux
", + "reblog": null, + "account": { + "id": "803769", + "username": "archlinux", + "acct": "archlinux@pokemon.men", + "display_name": "ArchLinux :archlinux:", + "locked": false, + "bot": true, + "discoverable": true, + "group": false, + "created_at": "2019-05-06T09:29:27.890Z", + "note": "", + "url": "https://pokemon.men/@archlinux", + "avatar": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 551, + "following_count": 3, + "statuses_count": 36276, + "last_status_at": "2020-08-18", + "emojis": [ + { + "shortcode": "archlinux", + "url": "https://files.mastodon.social/custom_emojis/images/000/098/720/original/df864361dfd59662.png", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/098/720/static/df864361dfd59662.png", + "visible_in_picker": true + } + ], + "fields": [] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "archlinux", + "url": "https://mastodon.social/tags/archlinux" + }, + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": { + "url": "https://bbs.archlinux.org/viewtopic.php?id=257694&action=new", + "title": "Mouse Input stuttering on XPS15 9500 / Laptop Issues / Arch Linux Forums", + "description": "", + "type": "link", + "author_name": "", + "author_url": "", + "provider_name": "", + "provider_url": "", + "html": "", + "width": 0, + "height": 0, + "image": null, + "embed_url": "", + "blurhash": null + }, + "poll": null + }, + { + "id": "104707336284420320", + "created_at": "2020-08-17T23:32:37.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://mastodon.technology/users/category/statuses/104707336282287672", + "url": "https://mastodon.technology/@category/104707336282287672", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "#Linux folks, any recommendations for a minimal web browser that can block JavaScript selectively by domain?
I really like nyxt (mostly because of the Emacs styling), but the noscript-mode is either all scripts run or all are blocked - at that point I might as well use lynx!!!
", + "reblog": null, + "account": { + "id": "1257666", + "username": "category", + "acct": "category@mastodon.technology", + "display_name": "Category", + "locked": false, + "bot": false, + "discoverable": false, + "group": false, + "created_at": "2020-08-07T08:33:31.598Z", + "note": "An unapolegitic nerd, whose beard is turning more grey by the day. Loves Linux, MIDI, Vidya and skateboards. And my cat. And now Emacs.
", + "url": "https://mastodon.technology/@category", + "avatar": "https://files.mastodon.social/cache/accounts/avatars/001/257/666/original/6fa91e2e52aba475.png", + "avatar_static": "https://files.mastodon.social/cache/accounts/avatars/001/257/666/original/6fa91e2e52aba475.png", + "header": "https://files.mastodon.social/cache/accounts/headers/001/257/666/original/527785b22c9ccbc8.png", + "header_static": "https://files.mastodon.social/cache/accounts/headers/001/257/666/original/527785b22c9ccbc8.png", + "followers_count": 3, + "following_count": 12, + "statuses_count": 88, + "last_status_at": "2020-08-17", + "emojis": [], + "fields": [ + { + "name": "Location", + "value": "South Coast, UK", + "verified_at": null + }, + { + "name": "Distro", + "value": "Debian/Raspbian", + "verified_at": null + }, + { + "name": "Window Manager", + "value": "i3", + "verified_at": null + } + ] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": null, + "poll": null + }, + { + "id": "104707331658667403", + "created_at": "2020-08-17T23:31:18.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://pokemon.men/users/archlinux/statuses/104707331098420546", + "url": "https://pokemon.men/@archlinux/104707331098420546", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "#ArchLinuxPackageUpdate iana-etc 20200812-1 any https://www.archlinux.org/packages/core/any/iana-etc/ #ArchLinux #Linux
", + "reblog": null, + "account": { + "id": "803769", + "username": "archlinux", + "acct": "archlinux@pokemon.men", + "display_name": "ArchLinux :archlinux:", + "locked": false, + "bot": true, + "discoverable": true, + "group": false, + "created_at": "2019-05-06T09:29:27.890Z", + "note": "", + "url": "https://pokemon.men/@archlinux", + "avatar": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 551, + "following_count": 3, + "statuses_count": 36276, + "last_status_at": "2020-08-18", + "emojis": [ + { + "shortcode": "archlinux", + "url": "https://files.mastodon.social/custom_emojis/images/000/098/720/original/df864361dfd59662.png", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/098/720/static/df864361dfd59662.png", + "visible_in_picker": true + } + ], + "fields": [] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "archlinuxpackageupdate", + "url": "https://mastodon.social/tags/archlinuxpackageupdate" + }, + { + "name": "archlinux", + "url": "https://mastodon.social/tags/archlinux" + }, + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": { + "url": "https://www.archlinux.org/packages/core/any/iana-etc/", + "title": "Arch Linux - iana-etc 20200812-1 (any)", + "description": "", + "type": "link", + "author_name": "", + "author_url": "", + "provider_name": "", + "provider_url": "", + "html": "", + "width": 0, + "height": 0, + "image": null, + "embed_url": "", + "blurhash": null + }, + "poll": null + }, + { + "id": "104707331149219204", + "created_at": "2020-08-17T23:31:16.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "zhCn", + "uri": "https://pokemon.men/users/archlinux/statuses/104707330980332176", + "url": "https://pokemon.men/@archlinux/104707330980332176", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "#ArchLinux PRIME Synchronization configuration not present https://bbs.archlinux.org/viewtopic.php?id=258265&action=new #Linux
", + "reblog": null, + "account": { + "id": "803769", + "username": "archlinux", + "acct": "archlinux@pokemon.men", + "display_name": "ArchLinux :archlinux:", + "locked": false, + "bot": true, + "discoverable": true, + "group": false, + "created_at": "2019-05-06T09:29:27.890Z", + "note": "", + "url": "https://pokemon.men/@archlinux", + "avatar": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 551, + "following_count": 3, + "statuses_count": 36276, + "last_status_at": "2020-08-18", + "emojis": [ + { + "shortcode": "archlinux", + "url": "https://files.mastodon.social/custom_emojis/images/000/098/720/original/df864361dfd59662.png", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/098/720/static/df864361dfd59662.png", + "visible_in_picker": true + } + ], + "fields": [] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "archlinux", + "url": "https://mastodon.social/tags/archlinux" + }, + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": { + "url": "https://bbs.archlinux.org/viewtopic.php?id=258265&action=new", + "title": "PRIME Synchronization configuration not present / Laptop Issues / Arch Linux Forums", + "description": "", + "type": "link", + "author_name": "", + "author_url": "", + "provider_name": "", + "provider_url": "", + "html": "", + "width": 0, + "height": 0, + "image": null, + "embed_url": "", + "blurhash": null + }, + "poll": null + }, + { + "id": "104707213355742819", + "created_at": "2020-08-17T23:01:18.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://pokemon.men/users/archlinux/statuses/104707213146314212", + "url": "https://pokemon.men/@archlinux/104707213146314212", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "#ArchLinuxPackageUpdate firefox-tridactyl 1.20.1-1 any https://www.archlinux.org/packages/community/any/firefox-tridactyl/ #ArchLinux #Linux
", + "reblog": null, + "account": { + "id": "803769", + "username": "archlinux", + "acct": "archlinux@pokemon.men", + "display_name": "ArchLinux :archlinux:", + "locked": false, + "bot": true, + "discoverable": true, + "group": false, + "created_at": "2019-05-06T09:29:27.890Z", + "note": "", + "url": "https://pokemon.men/@archlinux", + "avatar": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 551, + "following_count": 3, + "statuses_count": 36276, + "last_status_at": "2020-08-18", + "emojis": [ + { + "shortcode": "archlinux", + "url": "https://files.mastodon.social/custom_emojis/images/000/098/720/original/df864361dfd59662.png", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/098/720/static/df864361dfd59662.png", + "visible_in_picker": true + } + ], + "fields": [] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "archlinuxpackageupdate", + "url": "https://mastodon.social/tags/archlinuxpackageupdate" + }, + { + "name": "archlinux", + "url": "https://mastodon.social/tags/archlinux" + }, + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": { + "url": "https://www.archlinux.org/packages/community/any/firefox-tridactyl/", + "title": "Arch Linux - firefox-tridactyl 1.20.1-1 (any)", + "description": "", + "type": "link", + "author_name": "", + "author_url": "", + "provider_name": "", + "provider_url": "", + "html": "", + "width": 0, + "height": 0, + "image": null, + "embed_url": "", + "blurhash": null + }, + "poll": null + }, + { + "id": "104707095805517168", + "created_at": "2020-08-17T22:31:21.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://pokemon.men/users/archlinux/statuses/104707095335226017", + "url": "https://pokemon.men/@archlinux/104707095335226017", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "#ArchLinux MacbookAri 2008 taking too long to boot https://bbs.archlinux.org/viewtopic.php?id=258046&action=new #Linux
", + "reblog": null, + "account": { + "id": "803769", + "username": "archlinux", + "acct": "archlinux@pokemon.men", + "display_name": "ArchLinux :archlinux:", + "locked": false, + "bot": true, + "discoverable": true, + "group": false, + "created_at": "2019-05-06T09:29:27.890Z", + "note": "", + "url": "https://pokemon.men/@archlinux", + "avatar": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 551, + "following_count": 3, + "statuses_count": 36276, + "last_status_at": "2020-08-18", + "emojis": [ + { + "shortcode": "archlinux", + "url": "https://files.mastodon.social/custom_emojis/images/000/098/720/original/df864361dfd59662.png", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/098/720/static/df864361dfd59662.png", + "visible_in_picker": true + } + ], + "fields": [] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "archlinux", + "url": "https://mastodon.social/tags/archlinux" + }, + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": { + "url": "https://bbs.archlinux.org/viewtopic.php?id=258046&action=new", + "title": "MacbookAri 2008 taking too long to boot / Newbie Corner / Arch Linux Forums", + "description": "", + "type": "link", + "author_name": "", + "author_url": "", + "provider_name": "", + "provider_url": "", + "html": "", + "width": 0, + "height": 0, + "image": null, + "embed_url": "", + "blurhash": null + }, + "poll": null + }, + { + "id": "104707095521038972", + "created_at": "2020-08-17T22:31:20.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://pokemon.men/users/archlinux/statuses/104707095306448087", + "url": "https://pokemon.men/@archlinux/104707095306448087", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "#ArchLinux Microphone not working on Thinkpad T14s https://bbs.archlinux.org/viewtopic.php?id=257433&action=new #Linux
", + "reblog": null, + "account": { + "id": "803769", + "username": "archlinux", + "acct": "archlinux@pokemon.men", + "display_name": "ArchLinux :archlinux:", + "locked": false, + "bot": true, + "discoverable": true, + "group": false, + "created_at": "2019-05-06T09:29:27.890Z", + "note": "", + "url": "https://pokemon.men/@archlinux", + "avatar": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 551, + "following_count": 3, + "statuses_count": 36276, + "last_status_at": "2020-08-18", + "emojis": [ + { + "shortcode": "archlinux", + "url": "https://files.mastodon.social/custom_emojis/images/000/098/720/original/df864361dfd59662.png", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/098/720/static/df864361dfd59662.png", + "visible_in_picker": true + } + ], + "fields": [] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "archlinux", + "url": "https://mastodon.social/tags/archlinux" + }, + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": { + "url": "https://bbs.archlinux.org/viewtopic.php?id=257433&action=new", + "title": "Microphone not working on Thinkpad T14s / Multimedia and Games / Arch Linux Forums", + "description": "", + "type": "link", + "author_name": "", + "author_url": "", + "provider_name": "", + "provider_url": "", + "html": "", + "width": 0, + "height": 0, + "image": null, + "embed_url": "", + "blurhash": null + }, + "poll": null + }, + { + "id": "104706977691450361", + "created_at": "2020-08-17T22:01:17.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://pokemon.men/users/archlinux/statuses/104706977114433691", + "url": "https://pokemon.men/@archlinux/104706977114433691", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "#ArchLinuxPackageUpdate archlinux-keyring 20200817-1 any https://www.archlinux.org/packages/testing/any/archlinux-keyring/ #ArchLinux #Linux
", + "reblog": null, + "account": { + "id": "803769", + "username": "archlinux", + "acct": "archlinux@pokemon.men", + "display_name": "ArchLinux :archlinux:", + "locked": false, + "bot": true, + "discoverable": true, + "group": false, + "created_at": "2019-05-06T09:29:27.890Z", + "note": "", + "url": "https://pokemon.men/@archlinux", + "avatar": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 551, + "following_count": 3, + "statuses_count": 36276, + "last_status_at": "2020-08-18", + "emojis": [ + { + "shortcode": "archlinux", + "url": "https://files.mastodon.social/custom_emojis/images/000/098/720/original/df864361dfd59662.png", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/098/720/static/df864361dfd59662.png", + "visible_in_picker": true + } + ], + "fields": [] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "archlinuxpackageupdate", + "url": "https://mastodon.social/tags/archlinuxpackageupdate" + }, + { + "name": "archlinux", + "url": "https://mastodon.social/tags/archlinux" + }, + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": { + "url": "https://www.archlinux.org/packages/testing/any/archlinux-keyring/", + "title": "Arch Linux - archlinux-keyring 20200817-1 (any)", + "description": "", + "type": "link", + "author_name": "", + "author_url": "", + "provider_name": "", + "provider_url": "", + "html": "", + "width": 0, + "height": 0, + "image": null, + "embed_url": "", + "blurhash": null + }, + "poll": null + }, + { + "id": "104706977273819021", + "created_at": "2020-08-17T22:01:16.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "zhCn", + "uri": "https://pokemon.men/users/archlinux/statuses/104706977076765589", + "url": "https://pokemon.men/@archlinux/104706977076765589", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "#ArchLinuxPackageUpdate libwebrtc 83.git1.18721df-1 x86_64 https://www.archlinux.org/packages/community-testing/x86_64/libwebrtc/ #ArchLinux #Linux
", + "reblog": null, + "account": { + "id": "803769", + "username": "archlinux", + "acct": "archlinux@pokemon.men", + "display_name": "ArchLinux :archlinux:", + "locked": false, + "bot": true, + "discoverable": true, + "group": false, + "created_at": "2019-05-06T09:29:27.890Z", + "note": "", + "url": "https://pokemon.men/@archlinux", + "avatar": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 551, + "following_count": 3, + "statuses_count": 36276, + "last_status_at": "2020-08-18", + "emojis": [ + { + "shortcode": "archlinux", + "url": "https://files.mastodon.social/custom_emojis/images/000/098/720/original/df864361dfd59662.png", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/098/720/static/df864361dfd59662.png", + "visible_in_picker": true + } + ], + "fields": [] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "archlinuxpackageupdate", + "url": "https://mastodon.social/tags/archlinuxpackageupdate" + }, + { + "name": "archlinux", + "url": "https://mastodon.social/tags/archlinux" + }, + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": { + "url": "https://www.archlinux.org/packages/community-testing/x86_64/libwebrtc/", + "title": "Arch Linux - libwebrtc 83.git1.18721df-1 (x86_64)", + "description": "", + "type": "link", + "author_name": "", + "author_url": "", + "provider_name": "", + "provider_url": "", + "html": "", + "width": 0, + "height": 0, + "image": null, + "embed_url": "", + "blurhash": null + }, + "poll": null + }, + { + "id": "104706937982155569", + "created_at": "2020-08-17T21:51:16.000Z", + "in_reply_to_id": null, + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://pokemon.men/users/archlinux/statuses/104706937752475179", + "url": "https://pokemon.men/@archlinux/104706937752475179", + "replies_count": 0, + "reblogs_count": 0, + "favourites_count": 0, + "content": "#ArchLinuxPackageUpdate containerd 1.4.0-2 x86_64 https://www.archlinux.org/packages/community/x86_64/containerd/ #ArchLinux #Linux
", + "reblog": null, + "account": { + "id": "803769", + "username": "archlinux", + "acct": "archlinux@pokemon.men", + "display_name": "ArchLinux :archlinux:", + "locked": false, + "bot": true, + "discoverable": true, + "group": false, + "created_at": "2019-05-06T09:29:27.890Z", + "note": "", + "url": "https://pokemon.men/@archlinux", + "avatar": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/803/769/original/63c983e058954ae1.png", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 551, + "following_count": 3, + "statuses_count": 36276, + "last_status_at": "2020-08-18", + "emojis": [ + { + "shortcode": "archlinux", + "url": "https://files.mastodon.social/custom_emojis/images/000/098/720/original/df864361dfd59662.png", + "static_url": "https://files.mastodon.social/custom_emojis/images/000/098/720/static/df864361dfd59662.png", + "visible_in_picker": true + } + ], + "fields": [] + }, + "media_attachments": [], + "mentions": [], + "tags": [ + { + "name": "archlinuxpackageupdate", + "url": "https://mastodon.social/tags/archlinuxpackageupdate" + }, + { + "name": "archlinux", + "url": "https://mastodon.social/tags/archlinux" + }, + { + "name": "linux", + "url": "https://mastodon.social/tags/linux" + } + ], + "emojis": [], + "card": { + "url": "https://www.archlinux.org/packages/community/x86_64/containerd/", + "title": "Arch Linux - containerd 1.4.0-2 (x86_64)", + "description": "", + "type": "link", + "author_name": "", + "author_url": "", + "provider_name": "", + "provider_url": "", + "html": "", + "width": 0, + "height": 0, + "image": null, + "embed_url": "", + "blurhash": null + }, + "poll": null + } +] diff --git a/Development Assets/DevelopmentModels.swift b/Development Assets/DevelopmentModels.swift index 9ef14d6..e578d20 100644 --- a/Development Assets/DevelopmentModels.swift +++ b/Development Assets/DevelopmentModels.swift @@ -47,7 +47,9 @@ extension AppEnvironment { static let development = AppEnvironment( session: Session(configuration: .stubbing), webAuthSessionType: SuccessfulMockWebAuthSession.self, - keychainServiceType: MockKeychainService.self) + keychainServiceType: MockKeychainService.self, + userDefaults: MockUserDefaults(), + inMemoryContent: true) } extension IdentitiesService { @@ -110,4 +112,8 @@ extension NotificationTypesPreferencesViewModel { static let development = NotificationTypesPreferencesViewModel(identityService: .development) } +extension StatusesViewModel { + static let development = StatusesViewModel(statusListService: IdentityService.development.service(timeline: .home)) +} + // swiftlint:enable force_try diff --git a/Development Assets/Mastodon API Stubs/TimelinesEndpoint+Stubbing.swift b/Development Assets/Mastodon API Stubs/TimelinesEndpoint+Stubbing.swift new file mode 100644 index 0000000..d4b35a7 --- /dev/null +++ b/Development Assets/Mastodon API Stubs/TimelinesEndpoint+Stubbing.swift @@ -0,0 +1,14 @@ +// Copyright © 2020 Metabolist. All rights reserved. + +import Foundation +#if canImport(UIKit) +import UIKit +#elseif canImport(AppKit) +import AppKit +#endif + +extension TimelinesEndpoint: Stubbing { + func data(url: URL) -> Data? { + NSDataAsset(name: "TimelineJSON")!.data + } +} diff --git a/Development Assets/Stubbing.swift b/Development Assets/Stubbing.swift index c0e17e3..c86569e 100644 --- a/Development Assets/Stubbing.swift +++ b/Development Assets/Stubbing.swift @@ -30,5 +30,7 @@ extension Stubbing { dataString(url: url)?.data(using: .utf8) } + func dataString(url: URL) -> String? { nil } + func statusCode(url: URL) -> Int? { 200 } } diff --git a/Metatext.xcodeproj/project.pbxproj b/Metatext.xcodeproj/project.pbxproj index 589cc00..281dccb 100644 --- a/Metatext.xcodeproj/project.pbxproj +++ b/Metatext.xcodeproj/project.pbxproj @@ -61,6 +61,34 @@ D052BBCB24D74C9300A80A7A /* MockUserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = D052BBC824D74B6400A80A7A /* MockUserDefaults.swift */; }; D052BBD124D750CA00A80A7A /* AppEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D052BBCC24D750A100A80A7A /* AppEnvironment.swift */; }; D052BBD224D750CB00A80A7A /* AppEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D052BBCC24D750A100A80A7A /* AppEnvironment.swift */; }; + D05494E424EA3EF7008B00A5 /* Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05494E324EA3EF7008B00A5 /* Tag.swift */; }; + D05494E524EA3EF7008B00A5 /* Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05494E324EA3EF7008B00A5 /* Tag.swift */; }; + D05494E724EA3F1A008B00A5 /* Mention.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05494E624EA3F1A008B00A5 /* Mention.swift */; }; + D05494E824EA3F1A008B00A5 /* Mention.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05494E624EA3F1A008B00A5 /* Mention.swift */; }; + D05494EA24EA3F54008B00A5 /* Attachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05494E924EA3F54008B00A5 /* Attachment.swift */; }; + D05494EB24EA3F54008B00A5 /* Attachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05494E924EA3F54008B00A5 /* Attachment.swift */; }; + D05494ED24EA3FA9008B00A5 /* Poll.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05494EC24EA3FA9008B00A5 /* Poll.swift */; }; + D05494EE24EA3FA9008B00A5 /* Poll.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05494EC24EA3FA9008B00A5 /* Poll.swift */; }; + D05494F024EA3FE5008B00A5 /* Card.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05494EF24EA3FE5008B00A5 /* Card.swift */; }; + D05494F124EA3FE5008B00A5 /* Card.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05494EF24EA3FE5008B00A5 /* Card.swift */; }; + D05494F724EA49F7008B00A5 /* TimelinesEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05494F624EA49F7008B00A5 /* TimelinesEndpoint.swift */; }; + D05494F824EA49F7008B00A5 /* TimelinesEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05494F624EA49F7008B00A5 /* TimelinesEndpoint.swift */; }; + D05494FA24EA4E5E008B00A5 /* TimelinesEndpoint+Stubbing.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05494F924EA4E5E008B00A5 /* TimelinesEndpoint+Stubbing.swift */; }; + D05494FB24EA4E5E008B00A5 /* TimelinesEndpoint+Stubbing.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05494F924EA4E5E008B00A5 /* TimelinesEndpoint+Stubbing.swift */; }; + D054950124EA4FFE008B00A5 /* DevelopmentAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D054950024EA4FFE008B00A5 /* DevelopmentAssets.xcassets */; }; + D054950224EA4FFE008B00A5 /* DevelopmentAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D054950024EA4FFE008B00A5 /* DevelopmentAssets.xcassets */; }; + D054951224EB1041008B00A5 /* StatusListService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D054951124EB1041008B00A5 /* StatusListService.swift */; }; + D054951324EB1041008B00A5 /* StatusListService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D054951124EB1041008B00A5 /* StatusListService.swift */; }; + D054951524EB1053008B00A5 /* TimelineService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D054951424EB1053008B00A5 /* TimelineService.swift */; }; + D054951624EB1053008B00A5 /* TimelineService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D054951424EB1053008B00A5 /* TimelineService.swift */; }; + D054951B24EB2825008B00A5 /* TransientStatusCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D054951A24EB2825008B00A5 /* TransientStatusCollection.swift */; }; + D054951C24EB2825008B00A5 /* TransientStatusCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D054951A24EB2825008B00A5 /* TransientStatusCollection.swift */; }; + D057426724E9FE1D00839EBA /* ContentDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D057426624E9FE1D00839EBA /* ContentDatabase.swift */; }; + D057426824E9FE1D00839EBA /* ContentDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D057426624E9FE1D00839EBA /* ContentDatabase.swift */; }; + D057426A24EA32AC00839EBA /* Timeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = D057426924EA32AC00839EBA /* Timeline.swift */; }; + D057426B24EA32AC00839EBA /* Timeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = D057426924EA32AC00839EBA /* Timeline.swift */; }; + D057426D24EA339300839EBA /* ListTimeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = D057426C24EA339300839EBA /* ListTimeline.swift */; }; + D057426E24EA339300839EBA /* ListTimeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = D057426C24EA339300839EBA /* ListTimeline.swift */; }; D065F53924D37E5100741304 /* CombineExpectations in Frameworks */ = {isa = PBXBuildFile; productRef = D065F53824D37E5100741304 /* CombineExpectations */; }; D065F53B24D3B33A00741304 /* View+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D065F53A24D3B33A00741304 /* View+Extensions.swift */; }; D065F53C24D3B33A00741304 /* View+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D065F53A24D3B33A00741304 /* View+Extensions.swift */; }; @@ -102,10 +130,10 @@ D0BEC93924C9632800E864C4 /* RootViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEC93724C9632800E864C4 /* RootViewModel.swift */; }; D0BEC93B24C96FD500E864C4 /* RootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEC93A24C96FD500E864C4 /* RootView.swift */; }; D0BEC93C24C96FD500E864C4 /* RootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEC93A24C96FD500E864C4 /* RootView.swift */; }; - D0BEC94724CA22C400E864C4 /* TimelineViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEC94624CA22C400E864C4 /* TimelineViewModel.swift */; }; - D0BEC94824CA22C400E864C4 /* TimelineViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEC94624CA22C400E864C4 /* TimelineViewModel.swift */; }; - D0BEC94A24CA231200E864C4 /* TimelineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEC94924CA231200E864C4 /* TimelineView.swift */; }; - D0BEC94B24CA231200E864C4 /* TimelineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEC94924CA231200E864C4 /* TimelineView.swift */; }; + D0BEC94724CA22C400E864C4 /* StatusesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEC94624CA22C400E864C4 /* StatusesViewModel.swift */; }; + D0BEC94824CA22C400E864C4 /* StatusesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEC94624CA22C400E864C4 /* StatusesViewModel.swift */; }; + D0BEC94A24CA231200E864C4 /* StatusesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEC94924CA231200E864C4 /* StatusesView.swift */; }; + D0BEC94B24CA231200E864C4 /* StatusesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BEC94924CA231200E864C4 /* StatusesView.swift */; }; D0C963FB24CC359D003BD330 /* AlertItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C963FA24CC359D003BD330 /* AlertItem.swift */; }; D0C963FC24CC359D003BD330 /* AlertItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C963FA24CC359D003BD330 /* AlertItem.swift */; }; D0C963FE24CC3812003BD330 /* Publisher+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C963FD24CC3812003BD330 /* Publisher+Extensions.swift */; }; @@ -258,6 +286,20 @@ D052BBC624D749C800A80A7A /* RootViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewModelTests.swift; sourceTree = "