From f8d6c67079acefcbd9d943f10845b3d145fc4ab1 Mon Sep 17 00:00:00 2001 From: Andrew Dobis Date: Sat, 11 Apr 2020 12:55:06 +0200 Subject: [PATCH] Commenting & seeing comments on a post ( issues: #37 #77 ) (#87) Comment and like buttons added + a few UI tweaks * WIP posts * WIP posts * trying to add images * trying to add images * Got posts working and linked them to the profile * added tests for Post * layout changes * moved a test file * refactoring * refactoring * removed wrong annotation in unit test * removed an import that was breaking the build * removed tests that broke from merge, will override with master * added UI test for the post activity * WIP posts * WIP posts * trying to add images * trying to add images * Got posts working and linked them to the profile * layout changes * refactoring * refactoring * WIP posts * WIP posts * trying to add images * trying to add images * Got posts working and linked them to the profile * added tests for Post * layout changes * moved a test file * refactoring * refactoring * removed wrong annotation in unit test * removed an import that was breaking the build * removed tests that broke from merge, will override with master * fixed merging errors * trying my best to merge * removed drawable definition in activity_post.xml * Started converting Post to a fragment * got a working feed * WI * removed non-valid test * rebase on other branch * moved the feed to the home page * Add tests * delete test for now * Adapt test to changes (no more profile from drawer) * Add unit test for api * Add test for profile, refactor to allow testing, add exception to security policy to allow tests * Adapt test to new situation * Fix typo due to change * refactor somewhat * added a feed test * WIP posts * trying to add images * WIP posts * trying to add images * Got posts working and linked them to the profile * added tests for Post * layout changes * moved a test file * refactoring * refactoring * WIP posts * WIP posts * trying to add images * trying to add images * Got posts working and linked them to the profile * added tests for Post * layout changes * moved a test file * refactoring * refactoring * removed wrong annotation in unit test * removed an import that was breaking the build * removed tests that broke from merge, will override with master * added UI test for the post activity * WIP posts * trying to add images * WIP posts * trying to add images * Got posts working and linked them to the profile * added tests for Post * layout changes * moved a test file * refactoring * refactoring * WIP posts * WIP posts * trying to add images * trying to add images * Got posts working and linked them to the profile * added tests for Post * layout changes * moved a test file * refactoring * refactoring * removed wrong annotation in unit test * removed an import that was breaking the build * removed tests that broke from merge, will override with master * added UI test for the post activity * fixed merging errors * trying my best to merge * removed drawable definition in activity_post.xml * Started converting Post to a fragment * got a working feed * WI * removed non-valid test * WIP posts * WIP posts * trying to add images * trying to add images * Got posts working and linked them to the profile * added tests for Post * layout changes * moved a test file * WIP posts * WIP posts * trying to add images * trying to add images * Got posts working and linked them to the profile * added tests for Post * layout changes * moved a test file * refactoring * refactoring * refactoring * refactoring * removed wrong annotation in unit test * WIP posts * WIP posts * WIP posts * WIP posts * trying to add images * trying to add images * trying to add images * trying to add images * Got posts working and linked them to the profile * Got posts working and linked them to the profile * added tests for Post * layout changes * layout changes * moved a test file * refactoring * refactoring * refactoring * refactoring * removed wrong annotation in unit test * removed an import that was breaking the build * removed an import that was breaking the build * removed tests that broke from merge, will override with master * removed tests that broke from merge, will override with master * added UI test for the post activity * fixed merging errors * trying my best to merge * removed drawable definition in activity_post.xml * Started converting Post to a fragment * got a working feed * WI * removed non-valid test * rebase on other branch * moved the feed to the home page * added a feed test * added a working feed test * fixed broken test * merged with master * added a max height for images and made profile pictures round * Added a default image for the post * created a PostActivity to look a single posts * fixed buggy postActivity * Complete overhall of the feed UI * removed test that didn't please Travis * removed legacy test * changed feedAdapter init location (outside of network callback) * changed the feed from public timeline to home timeline * Refactored myProfile page * Converted profile picture to round image * restored feed test * I can like a post, but unlike is still a WIP * Liking kind of works now and added tests * fixed an error, now we can unlike as well * fixed travis constraint error * Display user's posts on profile page * moved test to Mock server tests * fixed test * last resort debugging * Changed fixed size of profile posts * last resort debugging * last resort debugging * last resort debugging * made post_activity profilepic round * Total refactor of profile posts * still have a weird bug with the comments: input is always null (WIP) * still trying to fix coments * removed annoying side margins in the home feed * trying to fix comments * fixed null comment * converted all posts back to statuses and got rid of post * Refactored recycler view * Merged with my-profile * Posts displayed on profile page * Added links to profile activity where needed * fixed comment posting * finished implementing comments, but api is buggy so none are visible * removed useless space in profile page * fixed ci config bug * trying to trigger ci hook (github was down last time) * updated tests with master tests * added tests for the comments * added tests for the comments * added first() matcher to fix comment test * still trying to fix comment tests' null progress bar * getting rid of that null progress bar * added comment test * fixed merge error * added like button test * added more post tests * took pr coments into account * added back an old test * added mockServer response for comment test and fixed comment null pointer bug * changed notification UI to better separate notifications * added mockserver response for likes and corrected like toggling error * added a test for posting comments * fixed typo in test * a gift for code climate * refactored stuff * fixed broken imports * comment refactored as xml Co-authored-by: Matthieu <61561059+Wv5twkFEKh54vo4tta9yu7dHa3@users.noreply.github.com> Co-authored-by: mjaillot --- android-wait-for-emulator.sh | 1 - app/build.gradle | 4 +- .../java/com/h/pixeldroid/MockedServerTest.kt | 217 ++++++++++++- .../h/pixeldroid/testUtility/MockServer.kt | 109 ++++++- .../java/com/h/pixeldroid/PostActivity.kt | 4 +- .../java/com/h/pixeldroid/api/PixelfedAPI.kt | 2 +- .../h/pixeldroid/fragments/PostFragment.kt | 22 +- .../fragments/ProfilePostsFragment.kt | 1 + .../fragments/feeds/FeedFragment.kt | 19 +- .../fragments/feeds/HomeFragment.kt | 83 +++-- .../fragments/feeds/NotificationsFragment.kt | 20 +- .../java/com/h/pixeldroid/objects/Status.kt | 98 +++++- .../com/h/pixeldroid/utils/ImageConverter.kt | 4 +- .../java/com/h/pixeldroid/utils/PostUtils.kt | 163 ++++++++++ app/src/main/res/layout/comment.xml | 39 +++ .../res/layout/fragment_notifications.xml | 116 +++---- app/src/main/res/layout/post_fragment.xml | 291 +++++++++++------- app/src/main/res/values/ids.xml | 4 + build.gradle | 2 +- 19 files changed, 956 insertions(+), 243 deletions(-) create mode 100644 app/src/main/java/com/h/pixeldroid/utils/PostUtils.kt create mode 100644 app/src/main/res/layout/comment.xml create mode 100644 app/src/main/res/values/ids.xml diff --git a/android-wait-for-emulator.sh b/android-wait-for-emulator.sh index e41d628d..80a891fe 100644 --- a/android-wait-for-emulator.sh +++ b/android-wait-for-emulator.sh @@ -2,7 +2,6 @@ # Originally written by Ralf Kistner , but placed in the public domain -#set -x set +e bootanim="" diff --git a/app/build.gradle b/app/build.gradle index 9abfe120..569fb943 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,7 +77,7 @@ dependencies { } implementation "com.github.bumptech.glide:okhttp-integration:4.11.0" - implementation ("com.github.bumptech.glide:recyclerview-integration:4.11.0") { + implementation("com.github.bumptech.glide:recyclerview-integration:4.11.0") { // Excludes the support library because it's already included by Glide. transitive = false } @@ -95,7 +95,7 @@ dependencies { androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' androidTestImplementation 'androidx.test.espresso:espresso-intents:3.2.0' androidTestImplementation 'com.android.support.test.espresso:espresso-contrib:3.0.2' - implementation 'androidx.paging:paging-runtime-ktx:2.1.1' + implementation 'androidx.paging:paging-runtime-ktx:2.1.2' implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.2.0' } diff --git a/app/src/androidTest/java/com/h/pixeldroid/MockedServerTest.kt b/app/src/androidTest/java/com/h/pixeldroid/MockedServerTest.kt index b70133e6..f1b37e8a 100644 --- a/app/src/androidTest/java/com/h/pixeldroid/MockedServerTest.kt +++ b/app/src/androidTest/java/com/h/pixeldroid/MockedServerTest.kt @@ -1,22 +1,34 @@ package com.h.pixeldroid +import android.R.attr.x import android.content.Context +import android.text.Editable import android.view.Gravity +import android.view.View +import android.widget.EditText +import android.widget.TextView +import androidx.core.text.set import androidx.test.core.app.ActivityScenario import androidx.test.espresso.Espresso.onView -import androidx.test.espresso.action.ViewActions +import androidx.test.espresso.UiController +import androidx.test.espresso.ViewAction +import androidx.test.espresso.action.* +import androidx.test.espresso.action.ViewActions.swipeDown import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.contrib.DrawerActions import androidx.test.espresso.contrib.DrawerMatchers import androidx.test.espresso.contrib.NavigationViewActions -import androidx.test.espresso.matcher.ViewMatchers -import androidx.test.espresso.matcher.ViewMatchers.withId -import androidx.test.espresso.matcher.ViewMatchers.withText +import androidx.test.espresso.contrib.RecyclerViewActions.actionOnItemAtPosition +import androidx.test.espresso.matcher.ViewMatchers.* import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry import com.google.android.material.tabs.TabLayout +import com.h.pixeldroid.fragments.feeds.HomeFragment +import com.h.pixeldroid.fragments.feeds.ViewHolder import com.h.pixeldroid.testUtility.MockServer +import org.hamcrest.BaseMatcher +import org.hamcrest.Matcher import org.junit.Before import org.junit.Rule import org.junit.Test @@ -26,9 +38,88 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class MockedServerTest { + private fun first(matcher: Matcher): Matcher? { + return object : BaseMatcher() { + var isFirst = true + override fun describeTo(description: org.hamcrest.Description?) { + description?.appendText("first matching item") + } + + override fun matches(item: Any?): Boolean { + if (isFirst && matcher.matches(item)) { + isFirst = false + return true + } + return false + } + + } + } + + /** + * @param percent can be 1 or 0 + * 1: swipes all the way up + * 0: swipes half way up + */ + private fun slowSwipeUp(percent: Boolean) : ViewAction { + return ViewActions.actionWithAssertions( + GeneralSwipeAction( + Swipe.SLOW, + GeneralLocation.BOTTOM_CENTER, + if(percent) GeneralLocation.TOP_CENTER else GeneralLocation.CENTER, + Press.FINGER) + ) + } + + fun getText(matcher: Matcher?): String? { + val stringHolder = arrayOf(null) + onView(matcher).perform(object : ViewAction { + override fun getConstraints(): Matcher { + return isAssignableFrom(TextView::class.java) + } + + override fun getDescription(): String { + return "getting text from a TextView" + } + + override fun perform( + uiController: UiController, + view: View + ) { + val tv = view as TextView //Save, because of check in getConstraints() + stringHolder[0] = tv.text.toString() + } + }) + return stringHolder[0] + } + + private fun clickChildViewWithId(id: Int) = object : ViewAction { + + override fun getConstraints() = null + + override fun getDescription() = "click child view with id $id" + + override fun perform(uiController: UiController, view: View) { + val v = view.findViewById(id) + v.performClick() + } + } + + private fun typeTextInViewWithId(id: Int, text: String) = object : ViewAction { + + override fun getConstraints() = null + + override fun getDescription() = "click child view with id $id" + + override fun perform(uiController: UiController, view: View) { + val v = view.findViewById(id) + v.text.append(text) + } + } val mockServer = MockServer() + @get:Rule var globalTimeout: Timeout = Timeout.seconds(100) @get:Rule @@ -122,13 +213,13 @@ class MockedServerTest { // Open Drawer to click on navigation. onView(withId(R.id.drawer_layout)) .check(matches(DrawerMatchers.isClosed(Gravity.LEFT))) // Left Drawer should be closed. - .perform(DrawerActions.open()); // Open Drawer + .perform(DrawerActions.open()) // Open Drawer // Start the screen of your activity. onView(withId(R.id.nav_view)).perform(NavigationViewActions.navigateTo(R.id.nav_settings)) // Check that settings activity was opened. - onView(withText(R.string.signature_title)).check(matches(ViewMatchers.isDisplayed())) + onView(withText(R.string.signature_title)).check(matches(isDisplayed())) } @Test @@ -139,7 +230,7 @@ class MockedServerTest { .perform(ViewActions.swipeLeft()) // notifications .perform(ViewActions.swipeLeft()) // profile .perform(ViewActions.swipeLeft()) // should stop at profile - onView(withId(R.id.nbFollowersTextView)).check(matches(ViewMatchers.isDisplayed())) + onView(withId(R.id.nbFollowersTextView)).check(matches(isDisplayed())) } @Test @@ -153,6 +244,116 @@ class MockedServerTest { .perform(ViewActions.swipeRight()) // search .perform(ViewActions.swipeRight()) // homepage .perform(ViewActions.swipeRight()) // should stop at homepage - onView(withId(R.id.list)).check(matches(ViewMatchers.isDisplayed())) + onView(withId(R.id.list)).check(matches(isDisplayed())) + } + + @Test + fun clickingLikeButtonWorks() { + ActivityScenario.launch(MainActivity::class.java) + Thread.sleep(1000) + + //Get initial like count + val likes = getText(withId(R.id.nlikes)) + + //Like the post + onView(withId(R.id.list)) + .perform(actionOnItemAtPosition + (0, clickChildViewWithId(R.id.liker))) + Thread.sleep(100) + //Unlike the post + onView(withId(R.id.list)) + .perform(actionOnItemAtPosition + (0, clickChildViewWithId(R.id.liker))) + //... + Thread.sleep(100) + + //Profit + onView(withId(R.id.nlikes)).check(matches((withText(likes)))) + } + + @Test + fun clickingUsernameOpensProfile() { + ActivityScenario.launch(MainActivity::class.java) + Thread.sleep(1000) + + //Get initial like count + onView(withId(R.id.list)) + .perform(actionOnItemAtPosition + (0, clickChildViewWithId(R.id.username))) + + Thread.sleep(1000) + + //Check that the Profile opened + onView(withId(R.id.accountNameTextView)).check(matches(isDisplayed())) + } + + @Test + fun clickingProfilePicOpensProfile() { + ActivityScenario.launch(MainActivity::class.java) + Thread.sleep(1000) + + //Get initial like count + onView(withId(R.id.list)) + .perform(actionOnItemAtPosition + (0, clickChildViewWithId(R.id.profilePic))) + + Thread.sleep(1000) + + //Check that the Profile opened + onView(withId(R.id.accountNameTextView)).check(matches(isDisplayed())) + } + + @Test + fun clickingCommentButtonOpensCommentSection() { + ActivityScenario.launch(MainActivity::class.java) + Thread.sleep(1000) + //Click comment button and then try to see if the commenter exists + onView(withId(R.id.list)) + .perform(actionOnItemAtPosition + (0, clickChildViewWithId(R.id.commenter))) + Thread.sleep(1000) + onView(withId(R.id.commentIn)) + .check(matches(hasDescendant(withId(R.id.editComment)))) + } + + @Test + fun clickingViewCommentShowsTheComments() { + ActivityScenario.launch(MainActivity::class.java) + Thread.sleep(1000) + //Open the comment section + onView(withId(R.id.list)) + .perform(actionOnItemAtPosition + (0, clickChildViewWithId(R.id.ViewComments))) + Thread.sleep(1000) + onView(withId(R.id.commentContainer)) + .check(matches(hasDescendant(withId(R.id.comment)))) + } + + @Test + fun postingACommentWorks() { + ActivityScenario.launch(MainActivity::class.java) + Thread.sleep(1000) + + //Open the comment section + onView(withId(R.id.list)) + .perform(actionOnItemAtPosition + (0, clickChildViewWithId(R.id.commenter))) + + onView(withId(R.id.list)).perform(slowSwipeUp(true)) + onView(withId(R.id.list)).perform(slowSwipeUp(false)) + onView(withId(R.id.list)).perform(slowSwipeUp(false)) + Thread.sleep(1000) + + onView(withId(R.id.list)) + .perform(actionOnItemAtPosition + (0, typeTextInViewWithId(R.id.editComment, "test"))) + onView(withId(R.id.list)) + .perform(actionOnItemAtPosition + (0, clickChildViewWithId(R.id.submitComment))) + + Thread.sleep(1000) + onView(withId(R.id.commentContainer)) + .check(matches(hasDescendant(withId(R.id.comment)))) } } + diff --git a/app/src/androidTest/java/com/h/pixeldroid/testUtility/MockServer.kt b/app/src/androidTest/java/com/h/pixeldroid/testUtility/MockServer.kt index 7472e22e..db124836 100644 --- a/app/src/androidTest/java/com/h/pixeldroid/testUtility/MockServer.kt +++ b/app/src/androidTest/java/com/h/pixeldroid/testUtility/MockServer.kt @@ -33,9 +33,96 @@ class MockServer { " \"software\": \"pixelfed\",\n" + " \"is_admin\": false\n" + " }" - private val feedJson = """[{"id":"140364967936397312","uri":"https:\/\/pixelfed.de\/p\/Miike\/140364967936397312","url":"https:\/\/pixelfed.de\/p\/Miike\/140364967936397312","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"Day 8 #rotavicentina<\/a> #hiking<\/a> #nature<\/a>","created_at":"2020-03-03T08:00:16.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":0,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[{"name":"hiking","url":"https:\/\/pixelfed.de\/discover\/tags\/hiking"},{"name":"nature","url":"https:\/\/pixelfed.de\/discover\/tags\/nature"},{"name":"rotavicentina","url":"https:\/\/pixelfed.de\/discover\/tags\/rotavicentina"}],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"115114166443970560","username":"Miike","acct":"Miike","display_name":"Miike Duart","locked":false,"created_at":"2019-12-24T15:42:35.000000Z","followers_count":14,"following_count":0,"statuses_count":71,"note":"","url":"https:\/\/pixelfed.de\/Miike","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/011\/511\/416\/644\/397\/056\/0\/ZhaopLJWTWJ3hsVCS5pS_avatar.png?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/011\/511\/416\/644\/397\/056\/0\/ZhaopLJWTWJ3hsVCS5pS_avatar.png?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"15888","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/113a3e2124a33b1f5511e531953f5ee48456e0c7\/34dd6d9fb1762dac8c7ddeeaf789d2d8fa083c9f\/JtjO0eAbELpgO1UZqF5ydrKbCKRVyJUM1WAaqIeB.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/113a3e2124a33b1f5511e531953f5ee48456e0c7\/34dd6d9fb1762dac8c7ddeeaf789d2d8fa083c9f\/JtjO0eAbELpgO1UZqF5ydrKbCKRVyJUM1WAaqIeB_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"140349785193451520","uri":"https:\/\/pixelfed.de\/p\/stephan\/140349785193451520","url":"https:\/\/pixelfed.de\/p\/stephan\/140349785193451520","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"","created_at":"2020-03-03T06:59:56.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":2,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"908","username":"stephan","acct":"stephan","display_name":"Stephan","locked":false,"created_at":"2019-03-17T07:46:33.000000Z","followers_count":136,"following_count":25,"statuses_count":136,"note":"Musician, software developer & hobby photographer.","url":"https:\/\/pixelfed.de\/stephan","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/000\/000\/000\/908\/5nQzzsB1mkwKaUqQ9GNN_avatar.png?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/000\/000\/000\/908\/5nQzzsB1mkwKaUqQ9GNN_avatar.png?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"15887","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/113a3e2124a33b1f5511e531953f5ee48456e0c7\/a1349f5183c2bac7d52880e8f5188df0f3b2d62a\/mvT3nYV6Wdu42Xh56Ny4VYaWU0OzbnC3wjxiqnKS.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/113a3e2124a33b1f5511e531953f5ee48456e0c7\/a1349f5183c2bac7d52880e8f5188df0f3b2d62a\/mvT3nYV6Wdu42Xh56Ny4VYaWU0OzbnC3wjxiqnKS_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"140276879742603264","uri":"https:\/\/pixelfed.de\/p\/fegrimaldi\/140276879742603264","url":"https:\/\/pixelfed.de\/p\/fegrimaldi\/140276879742603264","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"february 2 is the day to give flowers to Iemanj\u00e1. #salvador<\/a> #bahia<\/a> #brazil<\/a> #iemanja<\/a>","created_at":"2020-03-03T02:10:14.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":1,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[{"name":"salvador","url":"https:\/\/pixelfed.de\/discover\/tags\/salvador"},{"name":"bahia","url":"https:\/\/pixelfed.de\/discover\/tags\/bahia"},{"name":"brazil","url":"https:\/\/pixelfed.de\/discover\/tags\/brazil"},{"name":"iemanja","url":"https:\/\/pixelfed.de\/discover\/tags\/iemanja"}],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"137257212828585984","username":"fegrimaldi","acct":"fegrimaldi","display_name":"Fernanda Grimaldi","locked":false,"created_at":"2020-02-23T18:11:09.000000Z","followers_count":2,"following_count":7,"statuses_count":2,"note":"a little piece of Bahia in the fediverse.","url":"https:\/\/pixelfed.de\/fegrimaldi","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/013\/725\/721\/282\/858\/598\/4\/oUPBit0TJso1xNhJfFqg_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/013\/725\/721\/282\/858\/598\/4\/oUPBit0TJso1xNhJfFqg_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"15886","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/113a3e2124a33b1f5511e531953f5ee48456e0c7\/feb878b4bd60b85ac840670c6b9c809fd76b628b\/lYMrx0WF8LDqn0vTRgNJaRs7stMKtAXrgzpMrWEr.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/113a3e2124a33b1f5511e531953f5ee48456e0c7\/feb878b4bd60b85ac840670c6b9c809fd76b628b\/lYMrx0WF8LDqn0vTRgNJaRs7stMKtAXrgzpMrWEr_thumb.jpeg","text_url":null,"meta":null,"description":null}]}]""" + private val feedJson = """[{"id":"140364967936397312","uri":"https:\/\/pixelfed.de\/p\/Miike\/140364967936397312","url":"https:\/\/pixelfed.de\/p\/Miike\/140364967936397312","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"Day 8 #rotavicentina<\/a> #hiking<\/a> #nature<\/a>","created_at":"2020-03-03T08:00:16.000000Z","emojis":[],"replies_count":1,"reblogs_count":0,"favourites_count":0,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[{"name":"hiking","url":"https:\/\/pixelfed.de\/discover\/tags\/hiking"},{"name":"nature","url":"https:\/\/pixelfed.de\/discover\/tags\/nature"},{"name":"rotavicentina","url":"https:\/\/pixelfed.de\/discover\/tags\/rotavicentina"}],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"115114166443970560","username":"Miike","acct":"Miike","display_name":"Miike Duart","locked":false,"created_at":"2019-12-24T15:42:35.000000Z","followers_count":14,"following_count":0,"statuses_count":71,"note":"","url":"https:\/\/pixelfed.de\/Miike","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/011\/511\/416\/644\/397\/056\/0\/ZhaopLJWTWJ3hsVCS5pS_avatar.png?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/011\/511\/416\/644\/397\/056\/0\/ZhaopLJWTWJ3hsVCS5pS_avatar.png?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"15888","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/113a3e2124a33b1f5511e531953f5ee48456e0c7\/34dd6d9fb1762dac8c7ddeeaf789d2d8fa083c9f\/JtjO0eAbELpgO1UZqF5ydrKbCKRVyJUM1WAaqIeB.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/113a3e2124a33b1f5511e531953f5ee48456e0c7\/34dd6d9fb1762dac8c7ddeeaf789d2d8fa083c9f\/JtjO0eAbELpgO1UZqF5ydrKbCKRVyJUM1WAaqIeB_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"140349785193451520","uri":"https:\/\/pixelfed.de\/p\/stephan\/140349785193451520","url":"https:\/\/pixelfed.de\/p\/stephan\/140349785193451520","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"","created_at":"2020-03-03T06:59:56.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":2,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"908","username":"stephan","acct":"stephan","display_name":"Stephan","locked":false,"created_at":"2019-03-17T07:46:33.000000Z","followers_count":136,"following_count":25,"statuses_count":136,"note":"Musician, software developer & hobby photographer.","url":"https:\/\/pixelfed.de\/stephan","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/000\/000\/000\/908\/5nQzzsB1mkwKaUqQ9GNN_avatar.png?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/000\/000\/000\/908\/5nQzzsB1mkwKaUqQ9GNN_avatar.png?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"15887","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/113a3e2124a33b1f5511e531953f5ee48456e0c7\/a1349f5183c2bac7d52880e8f5188df0f3b2d62a\/mvT3nYV6Wdu42Xh56Ny4VYaWU0OzbnC3wjxiqnKS.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/113a3e2124a33b1f5511e531953f5ee48456e0c7\/a1349f5183c2bac7d52880e8f5188df0f3b2d62a\/mvT3nYV6Wdu42Xh56Ny4VYaWU0OzbnC3wjxiqnKS_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"140276879742603264","uri":"https:\/\/pixelfed.de\/p\/fegrimaldi\/140276879742603264","url":"https:\/\/pixelfed.de\/p\/fegrimaldi\/140276879742603264","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"february 2 is the day to give flowers to Iemanj\u00e1. #salvador<\/a> #bahia<\/a> #brazil<\/a> #iemanja<\/a>","created_at":"2020-03-03T02:10:14.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":1,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[{"name":"salvador","url":"https:\/\/pixelfed.de\/discover\/tags\/salvador"},{"name":"bahia","url":"https:\/\/pixelfed.de\/discover\/tags\/bahia"},{"name":"brazil","url":"https:\/\/pixelfed.de\/discover\/tags\/brazil"},{"name":"iemanja","url":"https:\/\/pixelfed.de\/discover\/tags\/iemanja"}],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"137257212828585984","username":"fegrimaldi","acct":"fegrimaldi","display_name":"Fernanda Grimaldi","locked":false,"created_at":"2020-02-23T18:11:09.000000Z","followers_count":2,"following_count":7,"statuses_count":2,"note":"a little piece of Bahia in the fediverse.","url":"https:\/\/pixelfed.de\/fegrimaldi","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/013\/725\/721\/282\/858\/598\/4\/oUPBit0TJso1xNhJfFqg_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/013\/725\/721\/282\/858\/598\/4\/oUPBit0TJso1xNhJfFqg_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"15886","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/113a3e2124a33b1f5511e531953f5ee48456e0c7\/feb878b4bd60b85ac840670c6b9c809fd76b628b\/lYMrx0WF8LDqn0vTRgNJaRs7stMKtAXrgzpMrWEr.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/113a3e2124a33b1f5511e531953f5ee48456e0c7\/feb878b4bd60b85ac840670c6b9c809fd76b628b\/lYMrx0WF8LDqn0vTRgNJaRs7stMKtAXrgzpMrWEr_thumb.jpeg","text_url":null,"meta":null,"description":null}]}]""" private val notificationsJson = "[{\"id\":\"45945\",\"type\":\"favourite\",\"created_at\":\"2020-03-15T14:49:20.000000Z\",\"account\":{\"id\":\"136800034732773376\",\"username\":\"Dobios\",\"acct\":\"Dobios\",\"display_name\":\"Andrew Dobis\",\"locked\":false,\"created_at\":\"2020-02-22T11:54:29.000000Z\",\"followers_count\":2,\"following_count\":1,\"statuses_count\":0,\"note\":\"\",\"url\":\"https:\\/\\/pixelfed.de\\/Dobios\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false},\"status\":{\"id\":\"144456497894658048\",\"uri\":\"https:\\/\\/pixelfed.de\\/p\\/dante\\/144456497894658048\",\"url\":\"https:\\/\\/pixelfed.de\\/p\\/dante\\/144456497894658048\",\"in_reply_to_id\":null,\"in_reply_to_account_id\":null,\"reblog\":null,\"content\":\"Saturn V launch\",\"created_at\":\"2020-03-14T14:58:32.000000Z\",\"emojis\":[],\"replies_count\":0,\"reblogs_count\":1,\"favourites_count\":6,\"reblogged\":null,\"favourited\":null,\"muted\":null,\"sensitive\":false,\"spoiler_text\":\"\",\"visibility\":\"public\",\"mentions\":[],\"tags\":[],\"card\":null,\"poll\":null,\"application\":{\"name\":\"web\",\"website\":null},\"language\":null,\"pinned\":null,\"account\":{\"id\":\"136453537340198912\",\"username\":\"Dante\",\"acct\":\"dante\",\"display_name\":\"Dante\",\"locked\":false,\"created_at\":\"2020-02-21T12:57:38.000000Z\",\"followers_count\":3,\"following_count\":4,\"statuses_count\":1,\"note\":\"\",\"url\":\"https:\\/\\/pixelfed.de\\/dante\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false},\"media_attachments\":[{\"id\":\"16583\",\"type\":\"image\",\"url\":\"https:\\/\\/pixelfed.de\\/storage\\/m\\/113a3e2124a33b1f5511e531953f5ee48456e0c7\\/0fa8bbe19cc23442034913a7c97fbe4527c1d63a\\/vs2vouJ86OvzxhK9ewhPlfPf4Y9IoQ5CHfiBIqad.jpeg\",\"remote_url\":null,\"preview_url\":\"https:\\/\\/pixelfed.de\\/storage\\/m\\/113a3e2124a33b1f5511e531953f5ee48456e0c7\\/0fa8bbe19cc23442034913a7c97fbe4527c1d63a\\/vs2vouJ86OvzxhK9ewhPlfPf4Y9IoQ5CHfiBIqad_thumb.jpeg\",\"text_url\":null,\"meta\":null,\"description\":null}]}},{\"id\":\"45944\",\"type\":\"follow\",\"created_at\":\"2020-03-15T14:49:11.000000Z\",\"account\":{\"id\":\"136800034732773376\",\"username\":\"Dobios\",\"acct\":\"Dobios\",\"display_name\":\"Andrew Dobis\",\"locked\":false,\"created_at\":\"2020-02-22T11:54:29.000000Z\",\"followers_count\":2,\"following_count\":1,\"statuses_count\":0,\"note\":\"\",\"url\":\"https:\\/\\/pixelfed.de\\/Dobios\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false}},{\"id\":\"45942\",\"type\":\"reblog\",\"created_at\":\"2020-03-15T14:41:04.000000Z\",\"account\":{\"id\":\"144813993922531328\",\"username\":\"Clement\",\"acct\":\"Clement\",\"display_name\":\"Andrea\",\"locked\":false,\"created_at\":\"2020-03-15T14:39:06.000000Z\",\"followers_count\":0,\"following_count\":2,\"statuses_count\":0,\"note\":\"\",\"url\":\"https:\\/\\/pixelfed.de\\/Clement\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false},\"status\":{\"id\":\"144814478708576256\",\"uri\":\"https:\\/\\/pixelfed.de\\/p\\/Clement\\/144814478708576256\",\"url\":\"https:\\/\\/pixelfed.de\\/p\\/Clement\\/144814478708576256\",\"in_reply_to_id\":null,\"in_reply_to_account_id\":136453537340198912,\"reblog\":null,\"content\":\"\",\"created_at\":\"2020-03-15T14:41:02.000000Z\",\"emojis\":[],\"replies_count\":0,\"reblogs_count\":0,\"favourites_count\":0,\"reblogged\":null,\"favourited\":null,\"muted\":null,\"sensitive\":false,\"spoiler_text\":\"\",\"visibility\":\"public\",\"mentions\":[],\"tags\":[],\"card\":null,\"poll\":null,\"application\":{\"name\":\"web\",\"website\":null},\"language\":null,\"pinned\":null,\"account\":{\"id\":\"144813993922531328\",\"username\":\"Clement\",\"acct\":\"Clement\",\"display_name\":\"Andrea\",\"locked\":false,\"created_at\":\"2020-03-15T14:39:06.000000Z\",\"followers_count\":0,\"following_count\":2,\"statuses_count\":0,\"note\":\"\",\"url\":\"https:\\/\\/pixelfed.de\\/Clement\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false}}},{\"id\":\"45941\",\"type\":\"mention\",\"created_at\":\"2020-03-15T14:40:52.000000Z\",\"account\":{\"id\":\"144813993922531328\",\"username\":\"Clement\",\"acct\":\"Clement\",\"display_name\":\"Andrea\",\"locked\":false,\"created_at\":\"2020-03-15T14:39:06.000000Z\",\"followers_count\":0,\"following_count\":2,\"statuses_count\":0,\"note\":\"\",\"url\":\"https:\\/\\/pixelfed.de\\/Clement\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false},\"status\":{\"id\":\"144814428691501056\",\"uri\":\"https:\\/\\/pixelfed.de\\/p\\/Clement\\/144814428691501056\",\"url\":\"https:\\/\\/pixelfed.de\\/p\\/Clement\\/144814428691501056\",\"in_reply_to_id\":144456497894658048,\"in_reply_to_account_id\":136453537340198912,\"reblog\":null,\"content\":\"@dante<\\/a> I identify to this pic.\",\"created_at\":\"2020-03-15T14:40:50.000000Z\",\"emojis\":[],\"replies_count\":0,\"reblogs_count\":0,\"favourites_count\":1,\"reblogged\":null,\"favourited\":null,\"muted\":null,\"sensitive\":false,\"spoiler_text\":\"\",\"visibility\":\"public\",\"mentions\":[{\"id\":\"136453537340198912\",\"url\":\"https:\\/\\/pixelfed.de\\/dante\",\"username\":\"dante\",\"acct\":\"dante\"}],\"tags\":[],\"card\":null,\"poll\":null,\"application\":{\"name\":\"web\",\"website\":null},\"language\":null,\"pinned\":null,\"account\":{\"id\":\"144813993922531328\",\"username\":\"Clement\",\"acct\":\"Clement\",\"display_name\":\"Andrea\",\"locked\":false,\"created_at\":\"2020-03-15T14:39:06.000000Z\",\"followers_count\":0,\"following_count\":2,\"statuses_count\":0,\"note\":\"\",\"url\":\"https:\\/\\/pixelfed.de\\/Clement\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false}}},{\"id\":\"45940\",\"type\":\"favourite\",\"created_at\":\"2020-03-15T14:40:22.000000Z\",\"account\":{\"id\":\"144813993922531328\",\"username\":\"Clement\",\"acct\":\"Clement\",\"display_name\":\"Andrea\",\"locked\":false,\"created_at\":\"2020-03-15T14:39:06.000000Z\",\"followers_count\":0,\"following_count\":2,\"statuses_count\":0,\"note\":\"\",\"url\":\"https:\\/\\/pixelfed.de\\/Clement\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false},\"status\":{\"id\":\"144456497894658048\",\"uri\":\"https:\\/\\/pixelfed.de\\/p\\/dante\\/144456497894658048\",\"url\":\"https:\\/\\/pixelfed.de\\/p\\/dante\\/144456497894658048\",\"in_reply_to_id\":null,\"in_reply_to_account_id\":null,\"reblog\":null,\"content\":\"Saturn V launch\",\"created_at\":\"2020-03-14T14:58:32.000000Z\",\"emojis\":[],\"replies_count\":0,\"reblogs_count\":1,\"favourites_count\":6,\"reblogged\":null,\"favourited\":null,\"muted\":null,\"sensitive\":false,\"spoiler_text\":\"\",\"visibility\":\"public\",\"mentions\":[],\"tags\":[],\"card\":null,\"poll\":null,\"application\":{\"name\":\"web\",\"website\":null},\"language\":null,\"pinned\":null,\"account\":{\"id\":\"136453537340198912\",\"username\":\"dante\",\"acct\":\"dante\",\"display_name\":\"Dante\",\"locked\":false,\"created_at\":\"2020-02-21T12:57:38.000000Z\",\"followers_count\":3,\"following_count\":4,\"statuses_count\":1,\"note\":\"\",\"url\":\"https:\\/\\/pixelfed.de\\/dante\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false},\"media_attachments\":[{\"id\":\"16583\",\"type\":\"image\",\"url\":\"https:\\/\\/pixelfed.de\\/storage\\/m\\/113a3e2124a33b1f5511e531953f5ee48456e0c7\\/0fa8bbe19cc23442034913a7c97fbe4527c1d63a\\/vs2vouJ86OvzxhK9ewhPlfPf4Y9IoQ5CHfiBIqad.jpeg\",\"remote_url\":null,\"preview_url\":\"https:\\/\\/pixelfed.de\\/storage\\/m\\/113a3e2124a33b1f5511e531953f5ee48456e0c7\\/0fa8bbe19cc23442034913a7c97fbe4527c1d63a\\/vs2vouJ86OvzxhK9ewhPlfPf4Y9IoQ5CHfiBIqad_thumb.jpeg\",\"text_url\":null,\"meta\":null,\"description\":null}]}},{\"id\":\"45939\",\"type\":\"follow\",\"created_at\":\"2020-03-15T14:40:12.000000Z\",\"account\":{\"id\":\"144813993922531328\",\"username\":\"Clement\",\"acct\":\"Clement\",\"display_name\":\"Andrea\",\"locked\":false,\"created_at\":\"2020-03-15T14:39:06.000000Z\",\"followers_count\":0,\"following_count\":2,\"statuses_count\":0,\"note\":\"\",\"url\":\"https:\\/\\/pixelfed.de\\/Clement\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false}},{\"id\":\"45804\",\"type\":\"favourite\",\"created_at\":\"2020-03-15T02:22:47.000000Z\",\"account\":{\"id\":\"131984031779786752\",\"username\":\"joska\",\"acct\":\"joska\",\"display_name\":\"jxzk\",\"locked\":false,\"created_at\":\"2020-02-09T04:57:25.000000Z\",\"followers_count\":3,\"following_count\":2,\"statuses_count\":82,\"note\":\"Feliz :D\",\"url\":\"https:\\/\\/pixelfed.de\\/joska\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/013\\/198\\/403\\/177\\/978\\/675\\/2\\/zhytNrT3ij5cHBXX1mJv_avatar.jpeg?v=4fc82b26aecb47d2868c4efbe3581732a3e7cbcc6c2efb32062c08170a05eeb8\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/013\\/198\\/403\\/177\\/978\\/675\\/2\\/zhytNrT3ij5cHBXX1mJv_avatar.jpeg?v=4fc82b26aecb47d2868c4efbe3581732a3e7cbcc6c2efb32062c08170a05eeb8\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false},\"status\":{\"id\":\"144456497894658048\",\"uri\":\"https:\\/\\/pixelfed.de\\/p\\/dante\\/144456497894658048\",\"url\":\"https:\\/\\/pixelfed.de\\/p\\/dante\\/144456497894658048\",\"in_reply_to_id\":null,\"in_reply_to_account_id\":null,\"reblog\":null,\"content\":\"Saturn V launch\",\"created_at\":\"2020-03-14T14:58:32.000000Z\",\"emojis\":[],\"replies_count\":0,\"reblogs_count\":1,\"favourites_count\":6,\"reblogged\":null,\"favourited\":null,\"muted\":null,\"sensitive\":false,\"spoiler_text\":\"\",\"visibility\":\"public\",\"mentions\":[],\"tags\":[],\"card\":null,\"poll\":null,\"application\":{\"name\":\"web\",\"website\":null},\"language\":null,\"pinned\":null,\"account\":{\"id\":\"136453537340198912\",\"username\":\"dante\",\"acct\":\"dante\",\"display_name\":\"Dante\",\"locked\":false,\"created_at\":\"2020-02-21T12:57:38.000000Z\",\"followers_count\":3,\"following_count\":4,\"statuses_count\":1,\"note\":\"\",\"url\":\"https:\\/\\/pixelfed.de\\/dante\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false},\"media_attachments\":[{\"id\":\"16583\",\"type\":\"image\",\"url\":\"https:\\/\\/pixelfed.de\\/storage\\/m\\/113a3e2124a33b1f5511e531953f5ee48456e0c7\\/0fa8bbe19cc23442034913a7c97fbe4527c1d63a\\/vs2vouJ86OvzxhK9ewhPlfPf4Y9IoQ5CHfiBIqad.jpeg\",\"remote_url\":null,\"preview_url\":\"https:\\/\\/pixelfed.de\\/storage\\/m\\/113a3e2124a33b1f5511e531953f5ee48456e0c7\\/0fa8bbe19cc23442034913a7c97fbe4527c1d63a\\/vs2vouJ86OvzxhK9ewhPlfPf4Y9IoQ5CHfiBIqad_thumb.jpeg\",\"text_url\":null,\"meta\":null,\"description\":null}]}},{\"id\":\"45783\",\"type\":\"favourite\",\"created_at\":\"2020-03-15T00:45:53.000000Z\",\"account\":{\"id\":\"139939422090170368\",\"username\":\"DrMsch\",\"acct\":\"DrMsch\",\"display_name\":\"Mische\",\"locked\":false,\"created_at\":\"2020-03-02T03:49:18.000000Z\",\"followers_count\":13,\"following_count\":21,\"statuses_count\":9,\"note\":\"TelefonFotos und Malereien von DerMische\",\"url\":\"https:\\/\\/pixelfed.de\\/DrMsch\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/013\\/993\\/942\\/209\\/017\\/036\\/8\\/xQUOq3tBNgOhFItKMZ56_avatar.jpeg?v=4fc82b26aecb47d2868c4efbe3581732a3e7cbcc6c2efb32062c08170a05eeb8\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/013\\/993\\/942\\/209\\/017\\/036\\/8\\/xQUOq3tBNgOhFItKMZ56_avatar.jpeg?v=4fc82b26aecb47d2868c4efbe3581732a3e7cbcc6c2efb32062c08170a05eeb8\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false},\"status\":{\"id\":\"144456497894658048\",\"uri\":\"https:\\/\\/pixelfed.de\\/p\\/dante\\/144456497894658048\",\"url\":\"https:\\/\\/pixelfed.de\\/p\\/dante\\/144456497894658048\",\"in_reply_to_id\":null,\"in_reply_to_account_id\":null,\"reblog\":null,\"content\":\"Saturn V launch\",\"created_at\":\"2020-03-14T14:58:32.000000Z\",\"emojis\":[],\"replies_count\":0,\"reblogs_count\":1,\"favourites_count\":6,\"reblogged\":null,\"favourited\":null,\"muted\":null,\"sensitive\":false,\"spoiler_text\":\"\",\"visibility\":\"public\",\"mentions\":[],\"tags\":[],\"card\":null,\"poll\":null,\"application\":{\"name\":\"web\",\"website\":null},\"language\":null,\"pinned\":null,\"account\":{\"id\":\"136453537340198912\",\"username\":\"dante\",\"acct\":\"dante\",\"display_name\":\"Dante\",\"locked\":false,\"created_at\":\"2020-02-21T12:57:38.000000Z\",\"followers_count\":3,\"following_count\":4,\"statuses_count\":1,\"note\":\"\",\"url\":\"https:\\/\\/pixelfed.de\\/dante\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false},\"media_attachments\":[{\"id\":\"16583\",\"type\":\"image\",\"url\":\"https:\\/\\/pixelfed.de\\/storage\\/m\\/113a3e2124a33b1f5511e531953f5ee48456e0c7\\/0fa8bbe19cc23442034913a7c97fbe4527c1d63a\\/vs2vouJ86OvzxhK9ewhPlfPf4Y9IoQ5CHfiBIqad.jpeg\",\"remote_url\":null,\"preview_url\":\"https:\\/\\/pixelfed.de\\/storage\\/m\\/113a3e2124a33b1f5511e531953f5ee48456e0c7\\/0fa8bbe19cc23442034913a7c97fbe4527c1d63a\\/vs2vouJ86OvzxhK9ewhPlfPf4Y9IoQ5CHfiBIqad_thumb.jpeg\",\"text_url\":null,\"meta\":null,\"description\":null}]}},{\"id\":\"45768\",\"type\":\"favourite\",\"created_at\":\"2020-03-14T22:43:18.000000Z\",\"account\":{\"id\":\"139819612522024960\",\"username\":\"vitorpires\",\"acct\":\"vitorpires\",\"display_name\":\"Vitor Pires\",\"locked\":false,\"created_at\":\"2020-03-01T19:53:13.000000Z\",\"followers_count\":20,\"following_count\":8,\"statuses_count\":42,\"note\":\"photography\\/graphic design\\/desktop publishing\\/illustration\\/3D animation\\/video\\/content writing\\/teaching\\/woodworking\\/luthier\",\"url\":\"https:\\/\\/pixelfed.de\\/vitorpires\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/013\\/981\\/961\\/252\\/202\\/496\\/0\\/2HB6Gs2m5NaSys7W5ikG_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/013\\/981\\/961\\/252\\/202\\/496\\/0\\/2HB6Gs2m5NaSys7W5ikG_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false},\"status\":{\"id\":\"144456497894658048\",\"uri\":\"https:\\/\\/pixelfed.de\\/p\\/dante\\/144456497894658048\",\"url\":\"https:\\/\\/pixelfed.de\\/p\\/dante\\/144456497894658048\",\"in_reply_to_id\":null,\"in_reply_to_account_id\":null,\"reblog\":null,\"content\":\"Saturn V launch\",\"created_at\":\"2020-03-14T14:58:32.000000Z\",\"emojis\":[],\"replies_count\":0,\"reblogs_count\":1,\"favourites_count\":6,\"reblogged\":null,\"favourited\":null,\"muted\":null,\"sensitive\":false,\"spoiler_text\":\"\",\"visibility\":\"public\",\"mentions\":[],\"tags\":[],\"card\":null,\"poll\":null,\"application\":{\"name\":\"web\",\"website\":null},\"language\":null,\"pinned\":null,\"account\":{\"id\":\"136453537340198912\",\"username\":\"dante\",\"acct\":\"dante\",\"display_name\":\"Dante\",\"locked\":false,\"created_at\":\"2020-02-21T12:57:38.000000Z\",\"followers_count\":3,\"following_count\":4,\"statuses_count\":1,\"note\":\"\",\"url\":\"https:\\/\\/pixelfed.de\\/dante\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false},\"media_attachments\":[{\"id\":\"16583\",\"type\":\"image\",\"url\":\"https:\\/\\/pixelfed.de\\/storage\\/m\\/113a3e2124a33b1f5511e531953f5ee48456e0c7\\/0fa8bbe19cc23442034913a7c97fbe4527c1d63a\\/vs2vouJ86OvzxhK9ewhPlfPf4Y9IoQ5CHfiBIqad.jpeg\",\"remote_url\":null,\"preview_url\":\"https:\\/\\/pixelfed.de\\/storage\\/m\\/113a3e2124a33b1f5511e531953f5ee48456e0c7\\/0fa8bbe19cc23442034913a7c97fbe4527c1d63a\\/vs2vouJ86OvzxhK9ewhPlfPf4Y9IoQ5CHfiBIqad_thumb.jpeg\",\"text_url\":null,\"meta\":null,\"description\":null}]}},{\"id\":\"45723\",\"type\":\"favourite\",\"created_at\":\"2020-03-14T15:01:49.000000Z\",\"account\":{\"id\":\"79574199701737472\",\"username\":\"Spaziergaenger\",\"acct\":\"Spaziergaenger\",\"display_name\":\"anonymous\",\"locked\":false,\"created_at\":\"2019-09-17T13:59:27.000000Z\",\"followers_count\":40,\"following_count\":0,\"statuses_count\":894,\"note\":\"\",\"url\":\"https:\\/\\/pixelfed.de\\/Spaziergaenger\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/007\\/957\\/419\\/970\\/173\\/747\\/2\\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/007\\/957\\/419\\/970\\/173\\/747\\/2\\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false},\"status\":{\"id\":\"144456497894658048\",\"uri\":\"https:\\/\\/pixelfed.de\\/p\\/dante\\/144456497894658048\",\"url\":\"https:\\/\\/pixelfed.de\\/p\\/dante\\/144456497894658048\",\"in_reply_to_id\":null,\"in_reply_to_account_id\":null,\"reblog\":null,\"content\":\"Saturn V launch\",\"created_at\":\"2020-03-14T14:58:32.000000Z\",\"emojis\":[],\"replies_count\":0,\"reblogs_count\":1,\"favourites_count\":6,\"reblogged\":null,\"favourited\":null,\"muted\":null,\"sensitive\":false,\"spoiler_text\":\"\",\"visibility\":\"public\",\"mentions\":[],\"tags\":[],\"card\":null,\"poll\":null,\"application\":{\"name\":\"web\",\"website\":null},\"language\":null,\"pinned\":null,\"account\":{\"id\":\"136453537340198912\",\"username\":\"dante\",\"acct\":\"dante\",\"display_name\":\"Dante\",\"locked\":false,\"created_at\":\"2020-02-21T12:57:38.000000Z\",\"followers_count\":3,\"following_count\":4,\"statuses_count\":1,\"note\":\"\",\"url\":\"https:\\/\\/pixelfed.de\\/dante\",\"avatar\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"avatar_static\":\"https:\\/\\/pixelfed.de\\/storage\\/avatars\\/default.png?v=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\"header\":\"\",\"header_static\":\"\",\"emojis\":[],\"moved\":null,\"fields\":null,\"bot\":false,\"software\":\"pixelfed\",\"is_admin\":false},\"media_attachments\":[{\"id\":\"16583\",\"type\":\"image\",\"url\":\"https:\\/\\/pixelfed.de\\/storage\\/m\\/113a3e2124a33b1f5511e531953f5ee48456e0c7\\/0fa8bbe19cc23442034913a7c97fbe4527c1d63a\\/vs2vouJ86OvzxhK9ewhPlfPf4Y9IoQ5CHfiBIqad.jpeg\",\"remote_url\":null,\"preview_url\":\"https:\\/\\/pixelfed.de\\/storage\\/m\\/113a3e2124a33b1f5511e531953f5ee48456e0c7\\/0fa8bbe19cc23442034913a7c97fbe4527c1d63a\\/vs2vouJ86OvzxhK9ewhPlfPf4Y9IoQ5CHfiBIqad_thumb.jpeg\",\"text_url\":null,\"meta\":null,\"description\":null}]}}]" private val accountStatusesJson = """[{"id":"153848799696130048","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153848799696130048","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153848799696130048","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nn\u00e4her geht es an Neu-Bamberg und den dritten Kontrollpunkt heran","created_at":"2020-04-09T13:00:12.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":1,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18521","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/IX5g6bLSCB4lpp0wTr6HKj4mYEpNUhgrjv50InJ3.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/IX5g6bLSCB4lpp0wTr6HKj4mYEpNUhgrjv50InJ3_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"153848420002566144","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153848420002566144","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153848420002566144","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nimmer wieder Wein und im Hintergrund der Steinbruch","created_at":"2020-04-09T12:58:41.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":1,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18520","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/g0ScH8shkytKjS9fask1CZHj0TMzWhbgJALApt5u.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/g0ScH8shkytKjS9fask1CZHj0TMzWhbgJALApt5u_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"153848196064481280","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153848196064481280","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153848196064481280","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\ndas Ende der Steigung ist absehbar","created_at":"2020-04-09T12:57:48.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":0,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18518","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/xLvyeeywOdeUTxYW03caxRXzNr4bldmAB1JUXUzv.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/xLvyeeywOdeUTxYW03caxRXzNr4bldmAB1JUXUzv_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"153446932994461696","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153446932994461696","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153446932994461696","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nweiter gehts es steil den Berg hinauf","created_at":"2020-04-08T10:23:19.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":0,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18421","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/VkG4AxsEE8gyWqUxprpna6LNSwRtKjW6A8yoZijI.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/VkG4AxsEE8gyWqUxprpna6LNSwRtKjW6A8yoZijI_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"153446615137521664","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153446615137521664","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153446615137521664","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nUnd hier gibt es neben dem zweiten Stempel auch k\u00fchle Getr\u00e4nke und Reibekuchen zum Sattessen","created_at":"2020-04-08T10:22:03.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":0,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18420","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/BhSqEKyy6iBlJGnrHpvjp2ZCrmCnepM0E3c83vvf.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/BhSqEKyy6iBlJGnrHpvjp2ZCrmCnepM0E3c83vvf_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"153446167173271552","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153446167173271552","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153446167173271552","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nDer zweite Kontrollpunkt: das sogenannte Wingertsh\u00e4uschen","created_at":"2020-04-08T10:20:17.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":4,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18419","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/iPjOwRResYI4BZxSNV7ZNpTsLz7Wna4IRHcu25dz.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/iPjOwRResYI4BZxSNV7ZNpTsLz7Wna4IRHcu25dz_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"153053485812813824","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153053485812813824","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153053485812813824","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nBlick auf die Kreisstra\u00dfe 88","created_at":"2020-04-07T08:19:54.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":2,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18291","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/GdQiZxDAB99NYbq0QpeW4GoNDzhAGuxcylOhWaBF.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/GdQiZxDAB99NYbq0QpeW4GoNDzhAGuxcylOhWaBF_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"153053256745095168","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153053256745095168","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153053256745095168","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nendlich Schatten","created_at":"2020-04-07T08:18:59.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":3,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18290","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/6TIe7Rj5vLFwp7VIRjLapnLqOzQ0WCtfnaVni9QS.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/6TIe7Rj5vLFwp7VIRjLapnLqOzQ0WCtfnaVni9QS_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"153052983712681984","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153052983712681984","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/153052983712681984","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nDer Wald kommt immer n\u00e4her","created_at":"2020-04-07T08:17:54.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":4,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18285","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/N0Dmh4lwjTcI8ACNqnxsS2cuWN5ZvusnZAt8XauE.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/N0Dmh4lwjTcI8ACNqnxsS2cuWN5ZvusnZAt8XauE_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"152657825544409088","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/152657825544409088","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/152657825544409088","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nnoch immer bei glei\u00dfender Sonne auf offenem Feld kommt Wald in Sicht","created_at":"2020-04-06T06:07:41.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":3,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18180","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/jgnP7gR3rw37yCnF1T5379krsZhRzh6JHiASINSP.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/jgnP7gR3rw37yCnF1T5379krsZhRzh6JHiASINSP_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"152657278993043456","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/152657278993043456","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/152657278993043456","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nBlick durch die Zweige auf die historische Kapelle von Hof Iben","created_at":"2020-04-06T06:05:31.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":2,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18179","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/FyadKaDMpUZkde9cQzrBKbtcAaHKsT4WtDQSnLMg.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/FyadKaDMpUZkde9cQzrBKbtcAaHKsT4WtDQSnLMg_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"152656864235098112","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/152656864235098112","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/152656864235098112","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nimmer weiter \u00fcber offene Felder","created_at":"2020-04-06T06:03:52.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":4,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18178","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/ExqK24a3Ri3Jn7XEodkoAx7kRLJIQPuWaFzx09Sk.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/ExqK24a3Ri3Jn7XEodkoAx7kRLJIQPuWaFzx09Sk_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"152158673148448768","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/152158673148448768","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/152158673148448768","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\n... und r\u00fcber nach Neu Bamberg, links der Steinbruch","created_at":"2020-04-04T21:04:14.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":1,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18106","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/r29IsMP9TUagGBhr8UzRi7Odb83mMJNotEAZxqsS.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/r29IsMP9TUagGBhr8UzRi7Odb83mMJNotEAZxqsS_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"152158370521026560","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/152158370521026560","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/152158370521026560","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nDer Blick zur\u00fcck nach F\u00fcrfeld ...","created_at":"2020-04-04T21:03:02.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":2,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18105","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/CDMIhBX34DlG3L4clpHQvdPoBpR8MCgIUSy1cnQU.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/CDMIhBX34DlG3L4clpHQvdPoBpR8MCgIUSy1cnQU_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"152157823550230528","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/152157823550230528","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/152157823550230528","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\n... bis zum Horizont ...","created_at":"2020-04-04T21:00:52.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":1,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18104","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/JYBeWD99cXadqo385uZjH98y2Cs1tQ0kun1NH9vd.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/JYBeWD99cXadqo385uZjH98y2Cs1tQ0kun1NH9vd_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"151795147183624192","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/151795147183624192","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/151795147183624192","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nDuch die Weinberge Richtung Hof Iben","created_at":"2020-04-03T20:59:43.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":1,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18071","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/VUD4ewNlZ7ofpFiO8wG9SEoaG4TbmRBgNtfEkEKw.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/VUD4ewNlZ7ofpFiO8wG9SEoaG4TbmRBgNtfEkEKw_thumb.jpeg","text_url":null,"meta":null,"description":null},{"id":"18072","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/2tiRGDebac4DvE3a2djRjCHtaJuspwdyaxiu27JY.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/2tiRGDebac4DvE3a2djRjCHtaJuspwdyaxiu27JY_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"151794839434956800","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/151794839434956800","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/151794839434956800","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nBlick nach S\u00fcden \u00fcber die herrliche Landschaft","created_at":"2020-04-03T20:58:29.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":1,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18070","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/vdEd5cyW6SMxectXdDVPdMNNt4TNrtERHSRGWc9R.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/vdEd5cyW6SMxectXdDVPdMNNt4TNrtERHSRGWc9R_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"151794394431885312","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/151794394431885312","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/151794394431885312","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nBlick \u00fcber F\u00fcrfeld","created_at":"2020-04-03T20:56:43.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":4,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"18069","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/sGtZi6f3Q9cJfc6cou08otJqBoGCcSlot64yttra.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/sGtZi6f3Q9cJfc6cou08otJqBoGCcSlot64yttra_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"151344455130157056","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/151344455130157056","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/151344455130157056","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nDas Fahrzeug der Veranstaltungsleitung von hinten","created_at":"2020-04-02T15:08:49.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":2,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"17966","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/0bixTrcD8FKkM12kG7k21OzfDDZQIVEyadu7Tv47.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/0bixTrcD8FKkM12kG7k21OzfDDZQIVEyadu7Tv47_thumb.jpeg","text_url":null,"meta":null,"description":null}]},{"id":"151343830426324992","uri":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/151343830426324992","url":"https:\/\/pixelfed.de\/p\/Spaziergaenger\/151343830426324992","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"2017-05-28 VG Bad-Kreuznach Wandertag
\n
\nBlick zur\u00fcck zum Eichelberg","created_at":"2020-04-02T15:06:21.000000Z","emojis":[],"replies_count":0,"reblogs_count":0,"favourites_count":1,"reblogged":null,"favourited":null,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"79574199701737472","username":"Spaziergaenger","acct":"Spaziergaenger","display_name":"anonymous","locked":false,"created_at":"2019-09-17T13:59:27.000000Z","followers_count":43,"following_count":0,"statuses_count":966,"note":"","url":"https:\/\/pixelfed.de\/Spaziergaenger","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/007\/957\/419\/970\/173\/747\/2\/KEg4YgCgsmzdgyVztszz_avatar.jpeg?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"17965","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/PgvSJ25k9SS6dhFh5l3v0rgQ5r7SY5JbepkrDkPP.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/d0931bf747b992a1c83e055753526516f2706111\/d75e944e8cc85b953d37d1a9d615f44d6e0cca22\/PgvSJ25k9SS6dhFh5l3v0rgQ5r7SY5JbepkrDkPP_thumb.jpeg","text_url":null,"meta":null,"description":null}]}]""" + private val commentStatusesJson = """{ + "ancestors": [], + "descendants": [ + { + "id": "103189026958574542", + "created_at": "2019-11-23T20:06:36.011Z", + "in_reply_to_id": "140364967936397312", + "in_reply_to_account_id": null, + "sensitive": false, + "spoiler_text": "", + "visibility": "public", + "language": "en", + "uri": "https://mastodon.social/users/Gargron/statuses/103270115826048975", + "url": "https://mastodon.social/@Gargron/103270115826048975", + "replies_count": 5, + "reblogs_count": 6, + "favourites_count": 11, + "favourited": false, + "reblogged": false, + "muted": false, + "bookmarked": false, + "content": "

"I lost my inheritance with one wrong digit on my sort code"

https://www.theguardian.com/money/2019/dec/07/i-lost-my-193000-inheritance-with-one-wrong-digit-on-my-sort-code", + "reblog": null, + "application": { + "name": "Web", + "website": null + }, + "account": { + "id": "1", + "username": "Gargron", + "acct": "Gargron", + "display_name": "Eugen", + "locked": false, + "bot": false, + "discoverable": true, + "group": false, + "created_at": "2016-03-16T14:34:26.392Z", + "note": "

Developer of Mastodon and administrator of mastodon.social. I post service announcements, development updates, and personal stuff.

", + "url": "https://mastodon.social/@Gargron", + "avatar": "https://files.mastodon.social/accounts/avatars/000/000/001/original/d96d39a0abb45b92.jpg", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/000/001/original/d96d39a0abb45b92.jpg", + "header": "https://files.mastodon.social/accounts/headers/000/000/001/original/c91b871f294ea63e.png", + "header_static": "https://files.mastodon.social/accounts/headers/000/000/001/original/c91b871f294ea63e.png", + "followers_count": 322930, + "following_count": 459, + "statuses_count": 61323, + "last_status_at": "2019-12-10T08:14:44.811Z", + "emojis": [], + "fields": [ + { + "name": "Patreon", + "value": "https://www.patreon.com/mastodonhttps://zeonfederated.com#rotavicentina<\/a> #hiking<\/a> #nature<\/a>","created_at":"2020-03-03T08:00:16.000000Z","emojis":[],"replies_count":1,"reblogs_count":0,"favourites_count":1,"reblogged":null,"favourited":true,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[{"name":"hiking","url":"https:\/\/pixelfed.de\/discover\/tags\/hiking"},{"name":"nature","url":"https:\/\/pixelfed.de\/discover\/tags\/nature"},{"name":"rotavicentina","url":"https:\/\/pixelfed.de\/discover\/tags\/rotavicentina"}],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"115114166443970560","username":"Miike","acct":"Miike","display_name":"Miike Duart","locked":false,"created_at":"2019-12-24T15:42:35.000000Z","followers_count":14,"following_count":0,"statuses_count":71,"note":"","url":"https:\/\/pixelfed.de\/Miike","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/011\/511\/416\/644\/397\/056\/0\/ZhaopLJWTWJ3hsVCS5pS_avatar.png?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/011\/511\/416\/644\/397\/056\/0\/ZhaopLJWTWJ3hsVCS5pS_avatar.png?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"15888","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/113a3e2124a33b1f5511e531953f5ee48456e0c7\/34dd6d9fb1762dac8c7ddeeaf789d2d8fa083c9f\/JtjO0eAbELpgO1UZqF5ydrKbCKRVyJUM1WAaqIeB.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/113a3e2124a33b1f5511e531953f5ee48456e0c7\/34dd6d9fb1762dac8c7ddeeaf789d2d8fa083c9f\/JtjO0eAbELpgO1UZqF5ydrKbCKRVyJUM1WAaqIeB_thumb.jpeg","text_url":null,"meta":null,"description":null}]}""" + val unlikeJson = """{"id":"140364967936397312","uri":"https:\/\/pixelfed.de\/p\/Miike\/140364967936397312","url":"https:\/\/pixelfed.de\/p\/Miike\/140364967936397312","in_reply_to_id":null,"in_reply_to_account_id":null,"reblog":null,"content":"Day 8 #rotavicentina<\/a> #hiking<\/a> #nature<\/a>","created_at":"2020-03-03T08:00:16.000000Z","emojis":[],"replies_count":1,"reblogs_count":0,"favourites_count":0,"reblogged":null,"favourited":false,"muted":null,"sensitive":false,"spoiler_text":"","visibility":"public","mentions":[],"tags":[{"name":"hiking","url":"https:\/\/pixelfed.de\/discover\/tags\/hiking"},{"name":"nature","url":"https:\/\/pixelfed.de\/discover\/tags\/nature"},{"name":"rotavicentina","url":"https:\/\/pixelfed.de\/discover\/tags\/rotavicentina"}],"card":null,"poll":null,"application":{"name":"web","website":null},"language":null,"pinned":null,"account":{"id":"115114166443970560","username":"Miike","acct":"Miike","display_name":"Miike Duart","locked":false,"created_at":"2019-12-24T15:42:35.000000Z","followers_count":14,"following_count":0,"statuses_count":71,"note":"","url":"https:\/\/pixelfed.de\/Miike","avatar":"https:\/\/pixelfed.de\/storage\/avatars\/011\/511\/416\/644\/397\/056\/0\/ZhaopLJWTWJ3hsVCS5pS_avatar.png?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","avatar_static":"https:\/\/pixelfed.de\/storage\/avatars\/011\/511\/416\/644\/397\/056\/0\/ZhaopLJWTWJ3hsVCS5pS_avatar.png?v=d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35","header":"","header_static":"","emojis":[],"moved":null,"fields":null,"bot":false,"software":"pixelfed","is_admin":false},"media_attachments":[{"id":"15888","type":"image","url":"https:\/\/pixelfed.de\/storage\/m\/113a3e2124a33b1f5511e531953f5ee48456e0c7\/34dd6d9fb1762dac8c7ddeeaf789d2d8fa083c9f\/JtjO0eAbELpgO1UZqF5ydrKbCKRVyJUM1WAaqIeB.jpeg","remote_url":null,"preview_url":"https:\/\/pixelfed.de\/storage\/m\/113a3e2124a33b1f5511e531953f5ee48456e0c7\/34dd6d9fb1762dac8c7ddeeaf789d2d8fa083c9f\/JtjO0eAbELpgO1UZqF5ydrKbCKRVyJUM1WAaqIeB_thumb.jpeg","text_url":null,"meta":null,"description":null}]}""" fun start() { server.dispatcher = getDispatcher() @@ -64,6 +151,26 @@ class MockServer { "Content-Type", "application/json; charset=utf-8" ).setResponseCode(200).setBody(accountStatusesJson) + } else if(request.path?.matches("/api/v1/statuses/[0-9]*/context".toRegex()) == true) { + return MockResponse().addHeader( + "Content-Type", + "application/json; charset=utf-8" + ).setResponseCode(200).setBody(commentStatusesJson) + } else if(request.path?.matches("/api/v1/statuses/[0-9]*/favourite".toRegex()) == true) { + return MockResponse().addHeader( + "Content-Type", + "application/json; charset=utf-8" + ).setResponseCode(200).setBody(likedJson) + } else if(request.path?.matches("/api/v1/statuses/[0-9]*/unfavourite".toRegex()) == true) { + return MockResponse().addHeader( + "Content-Type", + "application/json; charset=utf-8" + ).setResponseCode(200).setBody(unlikeJson) + } else if(request.path?.startsWith("/api/v1/statuses") == true) { + return MockResponse().addHeader( + "Content-Type", + "application/json; charset=utf-8" + ).setResponseCode(200).setBody(unlikeJson) } return MockResponse().setResponseCode(404) } diff --git a/app/src/main/java/com/h/pixeldroid/PostActivity.kt b/app/src/main/java/com/h/pixeldroid/PostActivity.kt index bcbcaffd..311ad5e2 100644 --- a/app/src/main/java/com/h/pixeldroid/PostActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/PostActivity.kt @@ -3,8 +3,10 @@ package com.h.pixeldroid import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.h.pixeldroid.fragments.PostFragment -import com.h.pixeldroid.objects.Status.Companion.POST_TAG import com.h.pixeldroid.objects.Status +import com.h.pixeldroid.objects.Status.Companion.POST_TAG + + class PostActivity : AppCompatActivity() { lateinit var postFragment : PostFragment diff --git a/app/src/main/java/com/h/pixeldroid/api/PixelfedAPI.kt b/app/src/main/java/com/h/pixeldroid/api/PixelfedAPI.kt index b78394aa..72b076f8 100644 --- a/app/src/main/java/com/h/pixeldroid/api/PixelfedAPI.kt +++ b/app/src/main/java/com/h/pixeldroid/api/PixelfedAPI.kt @@ -60,7 +60,7 @@ interface PixelfedAPI { //Used in our case to post a comment @FormUrlEncoded @POST("/api/v1/statuses") - fun commentStatus( + fun postStatus( //The authorization header needs to be of the form "Bearer " @Header("Authorization") authorization: String, @Field("status") statusText : String, diff --git a/app/src/main/java/com/h/pixeldroid/fragments/PostFragment.kt b/app/src/main/java/com/h/pixeldroid/fragments/PostFragment.kt index d5820cae..466c2a13 100644 --- a/app/src/main/java/com/h/pixeldroid/fragments/PostFragment.kt +++ b/app/src/main/java/com/h/pixeldroid/fragments/PostFragment.kt @@ -1,5 +1,6 @@ package com.h.pixeldroid.fragments +import android.content.Context import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.os.Bundle @@ -8,9 +9,14 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import com.bumptech.glide.Glide +import com.h.pixeldroid.BuildConfig import com.h.pixeldroid.R -import com.h.pixeldroid.objects.Status.Companion.POST_TAG +import com.h.pixeldroid.api.PixelfedAPI +import com.h.pixeldroid.fragments.feeds.HomeFragment +import com.h.pixeldroid.fragments.feeds.ViewHolder import com.h.pixeldroid.objects.Status + +import com.h.pixeldroid.objects.Status.Companion.POST_TAG import kotlinx.android.synthetic.main.post_fragment.view.* @@ -27,6 +33,20 @@ class PostFragment : Fragment() { .placeholder(ColorDrawable(Color.GRAY)) status?.setupPost(root, picRequest, root.postPicture, root.profilePic) + + //Setup arguments needed for the onclicklisteners + val holder = ViewHolder(root, context!!) + val preferences = requireActivity().getSharedPreferences( + "${BuildConfig.APPLICATION_ID}.pref", Context.MODE_PRIVATE + ) + val accessToken = preferences.getString("accessToken", "") + val api = PixelfedAPI.create("${preferences.getString("domain", "")}") + + //Activate onclickListeners + status?.activateLiker(holder, api, "Bearer $accessToken") + status?.activateCommenter(holder, api, "Bearer $accessToken") + status?.showComments(holder, api, "Bearer $accessToken") + return root } } diff --git a/app/src/main/java/com/h/pixeldroid/fragments/ProfilePostsFragment.kt b/app/src/main/java/com/h/pixeldroid/fragments/ProfilePostsFragment.kt index 340245d5..16f62f23 100644 --- a/app/src/main/java/com/h/pixeldroid/fragments/ProfilePostsFragment.kt +++ b/app/src/main/java/com/h/pixeldroid/fragments/ProfilePostsFragment.kt @@ -14,6 +14,7 @@ import com.h.pixeldroid.BuildConfig import com.h.pixeldroid.R import com.h.pixeldroid.api.PixelfedAPI + /** * A fragment representing a list of Items. * Activities containing this fragment MUST implement the diff --git a/app/src/main/java/com/h/pixeldroid/fragments/feeds/FeedFragment.kt b/app/src/main/java/com/h/pixeldroid/fragments/feeds/FeedFragment.kt index 25901db2..a4df57f4 100644 --- a/app/src/main/java/com/h/pixeldroid/fragments/feeds/FeedFragment.kt +++ b/app/src/main/java/com/h/pixeldroid/fragments/feeds/FeedFragment.kt @@ -41,7 +41,7 @@ open class FeedFragment: Fragment( protected lateinit var list : RecyclerView protected lateinit var adapter : FeedsRecyclerViewAdapter - private lateinit var swipeRefreshLayout: SwipeRefreshLayout + protected lateinit var swipeRefreshLayout: SwipeRefreshLayout private lateinit var loadingIndicator: ProgressBar override fun onCreateView( @@ -51,11 +51,16 @@ open class FeedFragment: Fragment( ): View? { val view = inflater.inflate(R.layout.fragment_feed, container, false) + //Initialize lateinit fields that are needed as soon as the view is created swipeRefreshLayout = view.findViewById(R.id.swipeRefreshLayout) loadingIndicator = view.findViewById(R.id.progressBar) list = swipeRefreshLayout.list - // Set the adapter + preferences = requireActivity().getSharedPreferences( + "${BuildConfig.APPLICATION_ID}.pref", Context.MODE_PRIVATE + ) list.layoutManager = LinearLayoutManager(context) + pixelfedAPI = PixelfedAPI.create("${preferences.getString("domain", "")}") + accessToken = preferences.getString("accessToken", "") return view } @@ -63,13 +68,6 @@ open class FeedFragment: Fragment( override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - preferences = requireActivity().getSharedPreferences( - "${BuildConfig.APPLICATION_ID}.pref", Context.MODE_PRIVATE - ) - - pixelfedAPI = PixelfedAPI.create("${preferences.getString("domain", "")}") - accessToken = preferences.getString("accessToken", "") - swipeRefreshLayout.setOnRefreshListener { //by invalidating data, loadInitial will be called again factory.liveData.value!!.invalidate() @@ -77,6 +75,7 @@ open class FeedFragment: Fragment( } + inner class FeedDataSource(private val makeInitialCall: (Int) -> Call>, private val makeAfterCall: (Int, String) -> Call> ): ItemKeyedDataSource() { @@ -104,11 +103,13 @@ open class FeedFragment: Fragment( } private fun enqueueCall(call: Call>, callback: LoadCallback){ + call.enqueue(object : Callback> { override fun onResponse(call: Call>, response: Response>) { if (response.code() == 200) { val notifications = response.body()!! as ArrayList callback.onResult(notifications as List) + } else{ Toast.makeText(context,"Something went wrong while loading", Toast.LENGTH_SHORT).show() } diff --git a/app/src/main/java/com/h/pixeldroid/fragments/feeds/HomeFragment.kt b/app/src/main/java/com/h/pixeldroid/fragments/feeds/HomeFragment.kt index 7c55fe25..36c8f4f0 100644 --- a/app/src/main/java/com/h/pixeldroid/fragments/feeds/HomeFragment.kt +++ b/app/src/main/java/com/h/pixeldroid/fragments/feeds/HomeFragment.kt @@ -7,8 +7,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView +import android.widget.* import androidx.lifecycle.LiveData import androidx.lifecycle.Observer import androidx.paging.LivePagedListBuilder @@ -21,12 +20,10 @@ import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader import com.bumptech.glide.util.ViewPreloadSizeProvider import com.h.pixeldroid.R import com.h.pixeldroid.objects.Status -import com.h.pixeldroid.utils.ImageConverter -import kotlinx.android.synthetic.main.fragment_home.* import retrofit2.Call -class HomeFragment : FeedFragment() { +class HomeFragment : FeedFragment() { lateinit var picRequest: RequestBuilder @@ -36,8 +33,6 @@ class HomeFragment : FeedFragment - adapter.submitList(c) - //after a refresh is done we need to stop the pull to refresh spinner - swipeRefreshLayout.isRefreshing = false - }) //Make Glide be aware of the recyclerview and pre-load images val sizeProvider: ListPreloader.PreloadSizeProvider = ViewPreloadSizeProvider() @@ -63,6 +52,17 @@ class HomeFragment : FeedFragment + adapter.submitList(c) + //after a refresh is done we need to stop the pull to refresh spinner + swipeRefreshLayout.isRefreshing = false + }) + } + private fun makeContent(): LiveData> { fun makeInitialCall(requestedLoadSize: Int): Call> { return pixelfedAPI @@ -81,13 +81,15 @@ class HomeFragment : FeedFragment() { - + inner class HomeRecyclerViewAdapter() + : FeedsRecyclerViewAdapter() { + private val api = pixelfedAPI + private val credential = "Bearer $accessToken" override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val view = LayoutInflater.from(parent.context) .inflate(R.layout.post_fragment, parent, false) context = view.context - return ViewHolder(view) + return ViewHolder(view, context) } /** @@ -100,26 +102,20 @@ class HomeFragment : FeedFragment metrics.heightPixels) { - ImageConverter.setDefaultImage(holder.postView, holder.postPic) - } - } + //Set initial favorite toggle value + holder.isLiked = post.favourited - /** - * Represents the posts that will be contained within the feed - */ - inner class ViewHolder(val postView: View) : RecyclerView.ViewHolder(postView) { - val profilePic : ImageView = postView.findViewById(R.id.profilePic) - val postPic : ImageView = postView.findViewById(R.id.postPicture) - val username : TextView = postView.findViewById(R.id.username) - val usernameDesc: TextView = postView.findViewById(R.id.usernameDesc) - val description : TextView = postView.findViewById(R.id.description) - val nlikes : TextView = postView.findViewById(R.id.nlikes) - val nshares : TextView = postView.findViewById(R.id.nshares) + //Activate liker + post.activateLiker(holder, api, credential) + + //Show comments + post.showComments(holder, api, credential) + + //Activate Commenter + post.activateCommenter(holder, api, credential) } override fun getPreloadItems(position: Int): MutableList { @@ -132,3 +128,24 @@ class HomeFragment : FeedFragment - adapter.submitList(c) - //after a refresh is done we need to stop the pull to refresh spinner - swipeRefreshLayout.isRefreshing = false - }) //Make Glide be aware of the recyclerview and pre-load images val sizeProvider: ListPreloader.PreloadSizeProvider = ViewPreloadSizeProvider() @@ -74,6 +66,18 @@ class NotificationsFragment : FeedFragment + adapter.submitList(c) + //after a refresh is done we need to stop the pull to refresh spinner + swipeRefreshLayout.isRefreshing = false + }) + } + private fun makeContent(): LiveData> { fun makeInitialCall(requestedLoadSize: Int): Call> { return pixelfedAPI diff --git a/app/src/main/java/com/h/pixeldroid/objects/Status.kt b/app/src/main/java/com/h/pixeldroid/objects/Status.kt index ee53ec1d..30c8c12a 100644 --- a/app/src/main/java/com/h/pixeldroid/objects/Status.kt +++ b/app/src/main/java/com/h/pixeldroid/objects/Status.kt @@ -4,9 +4,19 @@ import android.graphics.Typeface import android.graphics.drawable.Drawable import android.view.View import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import android.widget.Toast import com.bumptech.glide.RequestBuilder +import com.h.pixeldroid.R +import com.h.pixeldroid.api.PixelfedAPI +import com.h.pixeldroid.fragments.feeds.ViewHolder import com.h.pixeldroid.utils.ImageConverter -import kotlinx.android.synthetic.main.post_fragment.view.* +import com.h.pixeldroid.utils.PostUtils.Companion.likePostCall +import com.h.pixeldroid.utils.PostUtils.Companion.postComment +import com.h.pixeldroid.utils.PostUtils.Companion.retrieveComments +import com.h.pixeldroid.utils.PostUtils.Companion.toggleCommentInput +import com.h.pixeldroid.utils.PostUtils.Companion.unLikePostCall import java.io.Serializable /* @@ -93,21 +103,26 @@ data class Status( profilePic: ImageView ) { //Setup username as a button that opens the profile - rootView.username.text = this.getUsername() - rootView.username.setTypeface(null, Typeface.BOLD) - rootView.username.setOnClickListener { account.openProfile(rootView.context) } + val username = rootView.findViewById(R.id.username) + username.text = this.getUsername() + username.setTypeface(null, Typeface.BOLD) + username.setOnClickListener { account.openProfile(rootView.context) } - rootView.usernameDesc.text = this.getUsername() - rootView.usernameDesc.setTypeface(null, Typeface.BOLD) + val usernameDesc = rootView.findViewById(R.id.usernameDesc) + usernameDesc.text = this.getUsername() + usernameDesc.setTypeface(null, Typeface.BOLD) - rootView.description.text = this.getDescription() + rootView.findViewById(R.id.description).text = this.getDescription() - rootView.nlikes.text = this.getNLikes() - rootView.nlikes.setTypeface(null, Typeface.BOLD) + val nlikes = rootView.findViewById(R.id.nlikes) + nlikes.text = this.getNLikes() + nlikes.setTypeface(null, Typeface.BOLD) - rootView.nshares.text = this.getNShares() - rootView.nshares.setTypeface(null, Typeface.BOLD) + val nshares = rootView.findViewById(R.id.nshares) + nshares.text = this.getNShares() + nshares.setTypeface(null, Typeface.BOLD) + //Setup images request.load(this.getPostUrl()).into(postPic) ImageConverter.setRoundImageFromURL( rootView, @@ -115,6 +130,67 @@ data class Status( profilePic ) profilePic.setOnClickListener { account.openProfile(rootView.context) } + + //Set comment initial visibility + rootView.findViewById(R.id.commentIn).visibility = View.GONE + } + + fun activateLiker( + holder : ViewHolder, + api: PixelfedAPI, + credential: String + ) { + //Activate the liker + holder.liker.setOnClickListener { + if (holder.isLiked) { + //Unlike the post + unLikePostCall(holder, api, credential, this) + } else { + //like the post + likePostCall(holder, api, credential, this) + } + } + } + + fun showComments( + holder : ViewHolder, + api: PixelfedAPI, + credential: String + ) { + //Show all comments of a post + if (replies_count == 0) { + holder.viewComment.text = "No comments on this post..." + } else { + holder.viewComment.text = "View all ${replies_count} comments..." + holder.viewComment.setOnClickListener { + holder.viewComment.visibility = View.GONE + + //Retrieve the comments + retrieveComments(holder, api, credential, this) + } + } + } + + fun activateCommenter( + holder : ViewHolder, + api: PixelfedAPI, + credential: String + ) { + //Toggle comment button + toggleCommentInput(holder) + + //Activate commenter + holder.submitCmnt.setOnClickListener { + val textIn = holder.comment.text + //Open text input + if(textIn.isNullOrEmpty()) { + Toast.makeText(holder.context,"Comment must not be empty!", Toast.LENGTH_SHORT).show() + } else { + + //Post the comment + postComment(holder, api, credential, this) + } + } } enum class Visibility : Serializable { diff --git a/app/src/main/java/com/h/pixeldroid/utils/ImageConverter.kt b/app/src/main/java/com/h/pixeldroid/utils/ImageConverter.kt index 324c2bd9..f287a130 100644 --- a/app/src/main/java/com/h/pixeldroid/utils/ImageConverter.kt +++ b/app/src/main/java/com/h/pixeldroid/utils/ImageConverter.kt @@ -77,8 +77,8 @@ class ImageConverter { * @param view, the view in which this is happening * @param image, the imageView into which we will load the image */ - fun setDefaultImage(view : View, image : ImageView) { - Glide.with(view).load(R.drawable.ic_default_user).into(image) + fun setImageFromDrawable(view : View, image : ImageView, drawable : Int) { + Glide.with(view).load(drawable).into(image) } } } \ No newline at end of file diff --git a/app/src/main/java/com/h/pixeldroid/utils/PostUtils.kt b/app/src/main/java/com/h/pixeldroid/utils/PostUtils.kt new file mode 100644 index 00000000..d18c2f50 --- /dev/null +++ b/app/src/main/java/com/h/pixeldroid/utils/PostUtils.kt @@ -0,0 +1,163 @@ +package com.h.pixeldroid.utils + +import android.graphics.Typeface +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.LinearLayout +import android.widget.TextView +import android.widget.Toast +import androidx.cardview.widget.CardView +import com.h.pixeldroid.R +import com.h.pixeldroid.api.PixelfedAPI +import com.h.pixeldroid.fragments.feeds.ViewHolder +import com.h.pixeldroid.objects.Account +import com.h.pixeldroid.objects.Context +import com.h.pixeldroid.objects.Status +import kotlinx.android.synthetic.main.comment.view.* +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response + +class PostUtils { + companion object { + fun toggleCommentInput( + holder : ViewHolder + ) { + //Toggle comment button + holder.commenter.setOnClickListener { + when(holder.commentIn.visibility) { + View.VISIBLE -> holder.commentIn.visibility = View.GONE + View.INVISIBLE -> holder.commentIn.visibility = View.VISIBLE + View.GONE -> holder.commentIn.visibility = View.VISIBLE + } + } + } + + fun likePostCall( + holder : ViewHolder, + api: PixelfedAPI, + credential: String, + post : Status + ) { + api.likePost(credential, post.id).enqueue(object : Callback { + override fun onFailure(call: Call, t: Throwable) { + Log.e("LIKE ERROR", t.toString()) + } + + override fun onResponse(call: Call, response: Response) { + if(response.code() == 200) { + val resp = response.body()!! + + //Update shown like count and internal like toggle + holder.nlikes.text = resp.getNLikes() + holder.isLiked = resp.favourited + } else { + Log.e("RESPOSE_CODE", response.code().toString()) + } + } + + }) + } + + fun unLikePostCall( + holder : ViewHolder, + api: PixelfedAPI, + credential: String, + post : Status + ) { + api.unlikePost(credential, post.id).enqueue(object : Callback { + override fun onFailure(call: Call, t: Throwable) { + Log.e("UNLIKE ERROR", t.toString()) + } + + override fun onResponse(call: Call, response: Response) { + if(response.code() == 200) { + val resp = response.body()!! + + //Update shown like count and internal like toggle + holder.nlikes.text = resp.getNLikes() + holder.isLiked = resp.favourited + } else { + Log.e("RESPOSE_CODE", response.code().toString()) + } + + } + + }) + } + + fun postComment( + holder : ViewHolder, + api: PixelfedAPI, + credential: String, + post : Status + ) { + val textIn = holder.comment.text + val nonNullText = textIn.toString() + api.postStatus(credential, nonNullText, post.id).enqueue(object : + Callback { + override fun onFailure(call: Call, t: Throwable) { + Log.e("COMMENT ERROR", t.toString()) + Toast.makeText(holder.context,"Comment error!", Toast.LENGTH_SHORT).show() + } + + override fun onResponse(call: Call, response: Response) { + //Check that the received response code is valid + if(response.code() == 200) { + val resp = response.body()!! + holder.commentIn.visibility = View.GONE + + //Add the comment to the comment section + addComment(holder.context, holder.commentCont, resp.account.username, resp.content) + + Toast.makeText(holder.context,"Comment: \"$textIn\" posted!", Toast.LENGTH_SHORT).show() + Log.e("COMMENT SUCCESS", "posted: $textIn") + } else { + Log.e("ERROR_CODE", response.code().toString()) + } + } + }) + } + + fun addComment(context: android.content.Context, commentContainer: LinearLayout, commentUsername: String, commentContent: String) { + + val view = LayoutInflater.from(context) + .inflate(R.layout.comment, commentContainer, true) + + view.user.text = commentUsername + view.commentText.text = commentContent + } + + fun retrieveComments( + holder : ViewHolder, + api: PixelfedAPI, + credential: String, + post : Status + ) { + api.statusComments(post.id, credential).enqueue(object : + Callback { + override fun onFailure(call: Call, t: Throwable) { + Log.e("COMMENT FETCH ERROR", t.toString()) + } + + override fun onResponse( + call: Call, + response: Response + ) { + if(response.code() == 200) { + val statuses = response.body()!!.descendants + + //Create the new views for each comment + for (status in statuses) { + addComment(holder.context, holder.commentCont, status.account.username, status.content) + } + } else { + Log.e("COMMENT ERROR", "${response.code()} with body ${response.errorBody()}") + } + } + }) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/comment.xml b/app/src/main/res/layout/comment.xml new file mode 100644 index 00000000..a8ab59f5 --- /dev/null +++ b/app/src/main/res/layout/comment.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_notifications.xml b/app/src/main/res/layout/fragment_notifications.xml index 29be634b..7c2a07d4 100644 --- a/app/src/main/res/layout/fragment_notifications.xml +++ b/app/src/main/res/layout/fragment_notifications.xml @@ -1,66 +1,72 @@ - + android:layout_margin="5dp"> - + android:layout_margin="8dp"> - + - + - + - + + + + diff --git a/app/src/main/res/layout/post_fragment.xml b/app/src/main/res/layout/post_fragment.xml index f198ed31..37647ac4 100644 --- a/app/src/main/res/layout/post_fragment.xml +++ b/app/src/main/res/layout/post_fragment.xml @@ -1,127 +1,200 @@ - +xmlns:app="http://schemas.android.com/apk/res-auto" +xmlns:tools="http://schemas.android.com/tools" +android:layout_width="match_parent" +android:layout_height="wrap_content" +tools:context=".fragments.PostFragment"> - - + + android:layout_height="wrap_content"> + android:orientation="vertical"> - - - - - - - - + android:orientation="vertical" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml new file mode 100644 index 00000000..878209f5 --- /dev/null +++ b/app/src/main/res/values/ids.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index eb87dbab..067a3626 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.6.1' + classpath 'com.android.tools.build:gradle:3.6.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong