Ver Fonte

Merge pull request #4565 from pixelfed/staging

Staging
daniel há 2 anos atrás
pai
commit
2cdf8917da
28 ficheiros alterados com 205 adições e 68 exclusões
  1. 2 0
      CHANGELOG.md
  2. 16 0
      app/Http/Controllers/Api/ApiV1Controller.php
  3. 5 2
      app/Jobs/SharePipeline/SharePipeline.php
  4. 3 2
      app/Jobs/SharePipeline/UndoSharePipeline.php
  5. BIN
      public/js/daci.chunk.06d17098233d10d2.js
  6. BIN
      public/js/daci.chunk.b9e8578923bea3c3.js
  7. BIN
      public/js/discover~findfriends.chunk.ae74572b77d74920.js
  8. BIN
      public/js/discover~findfriends.chunk.d691be73c68195ac.js
  9. BIN
      public/js/discover~memories.chunk.25ef142d12a48a20.js
  10. BIN
      public/js/discover~memories.chunk.4f59af2dab851399.js
  11. BIN
      public/js/discover~myhashtags.chunk.4b413213e12db5b8.js
  12. BIN
      public/js/discover~myhashtags.chunk.c973b20c8878052f.js
  13. BIN
      public/js/discover~serverfeed.chunk.1dace6b026047712.js
  14. BIN
      public/js/discover~serverfeed.chunk.8f3f1aaa21cefc1d.js
  15. BIN
      public/js/discover~settings.chunk.491f217e6c54be1e.js
  16. BIN
      public/js/discover~settings.chunk.ef99ab7d5116b492.js
  17. BIN
      public/js/home.chunk.3be19ae25a42cbd5.js
  18. BIN
      public/js/home.chunk.e9ae8285416aa78f.js
  19. 0 0
      public/js/home.chunk.e9ae8285416aa78f.js.LICENSE.txt
  20. BIN
      public/js/manifest.js
  21. BIN
      public/js/post.chunk.741e92852b834d92.js
  22. 0 0
      public/js/post.chunk.741e92852b834d92.js.LICENSE.txt
  23. BIN
      public/js/post.chunk.ce42d6040d1683fd.js
  24. BIN
      public/js/profile.chunk.3f076e6eff0c5ede.js
  25. BIN
      public/js/profile.chunk.e30bbdae030833e4.js
  26. BIN
      public/mix-manifest.json
  27. 32 12
      resources/assets/components/partials/TimelineStatus.vue
  28. 147 52
      resources/assets/components/sections/Timeline.vue

+ 2 - 0
CHANGELOG.md

@@ -46,6 +46,8 @@
 - Update ProfileController, allow albums in atom feed. Closes #4561. Fixes #4526 ([1c105a6c](https://github.com/pixelfed/pixelfed/commit/1c105a6c))
 - Update admin users view, fix website value. Closes #4557 ([c469d475](https://github.com/pixelfed/pixelfed/commit/c469d475))
 - Update StatusStatelessTransformer, allow unlisted reblogs ([1c13b518](https://github.com/pixelfed/pixelfed/commit/1c13b518))
+- Update ApiV1Controller, hydrate reblog state in home timeline ([13bdaa2e](https://github.com/pixelfed/pixelfed/commit/13bdaa2e))
+- Update Timeline component, improve reblog support ([29de91e5](https://github.com/pixelfed/pixelfed/commit/29de91e5))
 -  ([](https://github.com/pixelfed/pixelfed/commit/))
 
 ## [v0.11.8 (2023-05-29)](https://github.com/pixelfed/pixelfed/compare/v0.11.7...v0.11.8)

+ 16 - 0
app/Http/Controllers/Api/ApiV1Controller.php

@@ -2199,6 +2199,14 @@ class ApiV1Controller extends Controller
 			->filter(function($status) {
 				return $status && isset($status['account']);
 			})
+            ->map(function($status) use($pid) {
+                if(!empty($status['reblog'])) {
+                    $status['reblog']['favourited'] = (bool) LikeService::liked($pid, $status['reblog']['id']);
+                    $status['reblog']['reblogged'] = (bool) ReblogService::get($pid, $status['reblog']['id']);
+                }
+
+                return $status;
+            })
 			->take($limit)
 			->values();
 		} else {
@@ -2242,6 +2250,14 @@ class ApiV1Controller extends Controller
 			->filter(function($status) {
 				return $status && isset($status['account']);
 			})
+            ->map(function($status) use($pid) {
+                if(!empty($status['reblog'])) {
+                    $status['reblog']['favourited'] = (bool) LikeService::liked($pid, $status['reblog']['id']);
+                    $status['reblog']['reblogged'] = (bool) ReblogService::get($pid, $status['reblog']['id']);
+                }
+
+                return $status;
+            })
 			->take($limit)
 			->values();
 		}

+ 5 - 2
app/Jobs/SharePipeline/SharePipeline.php

@@ -49,7 +49,10 @@ class SharePipeline implements ShouldQueue
 	public function handle()
 	{
 		$status = $this->status;
-		$parent = $this->status->parent();
+		$parent = Status::find($this->status->reblog_of_id);
+        if(!$parent) {
+            return;
+        }
 		$actor = $status->profile;
 		$target = $parent->profile;
 
@@ -84,7 +87,7 @@ class SharePipeline implements ShouldQueue
 
 	public function remoteAnnounceDeliver()
 	{
-		if(config_cache('federation.activitypub.enabled') == false) {
+		if(config('app.env') !== 'production' || config_cache('federation.activitypub.enabled') == false) {
 			return true;
 		}
 		$status = $this->status;

+ 3 - 2
app/Jobs/SharePipeline/UndoSharePipeline.php

@@ -61,7 +61,7 @@ class UndoSharePipeline implements ShouldQueue
 			return;
 		}
 
-		if(config_cache('federation.activitypub.enabled') == false) {
+		if(config('app.env') !== 'production' || config_cache('federation.activitypub.enabled') == false) {
 			return $status->delete();
 		} else {
 			return $this->remoteAnnounceDeliver();
@@ -70,7 +70,8 @@ class UndoSharePipeline implements ShouldQueue
 
 	public function remoteAnnounceDeliver()
 	{
-		if(config_cache('federation.activitypub.enabled') == false) {
+		if(config('app.env') !== 'production' || config_cache('federation.activitypub.enabled') == false) {
+            $status->delete();
 			return 1;
 		}
 

BIN
public/js/daci.chunk.06d17098233d10d2.js


BIN
public/js/daci.chunk.b9e8578923bea3c3.js


BIN
public/js/discover~findfriends.chunk.ae74572b77d74920.js


BIN
public/js/discover~findfriends.chunk.d691be73c68195ac.js


BIN
public/js/discover~memories.chunk.25ef142d12a48a20.js


BIN
public/js/discover~memories.chunk.4f59af2dab851399.js


BIN
public/js/discover~myhashtags.chunk.4b413213e12db5b8.js


BIN
public/js/discover~myhashtags.chunk.c973b20c8878052f.js


BIN
public/js/discover~serverfeed.chunk.1dace6b026047712.js


BIN
public/js/discover~serverfeed.chunk.8f3f1aaa21cefc1d.js


BIN
public/js/discover~settings.chunk.491f217e6c54be1e.js


BIN
public/js/discover~settings.chunk.ef99ab7d5116b492.js


BIN
public/js/home.chunk.3be19ae25a42cbd5.js


BIN
public/js/home.chunk.e9ae8285416aa78f.js


+ 0 - 0
public/js/home.chunk.3be19ae25a42cbd5.js.LICENSE.txt → public/js/home.chunk.e9ae8285416aa78f.js.LICENSE.txt


BIN
public/js/manifest.js


BIN
public/js/post.chunk.741e92852b834d92.js


+ 0 - 0
public/js/post.chunk.ce42d6040d1683fd.js.LICENSE.txt → public/js/post.chunk.741e92852b834d92.js.LICENSE.txt


BIN
public/js/post.chunk.ce42d6040d1683fd.js


BIN
public/js/profile.chunk.3f076e6eff0c5ede.js


BIN
public/js/profile.chunk.e30bbdae030833e4.js


BIN
public/mix-manifest.json


+ 32 - 12
resources/assets/components/partials/TimelineStatus.vue

@@ -3,18 +3,20 @@
         <div class="card shadow-sm" style="border-radius: 15px;">
             <post-header
                 :profile="profile"
-                :status="status"
+                :status="shadowStatus"
+                :is-reblog="isReblog"
+                :reblog-account="reblogAccount"
                 @menu="openMenu"
                 @follow="follow"
                 @unfollow="unfollow" />
 
             <post-content
                 :profile="profile"
-                :status="status" />
+                :status="shadowStatus" />
 
             <post-reactions
-                v-if="reactionBar"
-                :status="status"
+            	v-if="reactionBar"
+                :status="shadowStatus"
                 :profile="profile"
                 :admin="admin"
                 v-on:like="like"
@@ -29,7 +31,7 @@
 
             <div v-if="showCommentDrawer" class="card-footer rounded-bottom border-0" style="background: rgba(0,0,0,0.02);z-index: 3;">
                 <comment-drawer
-                    :status="status"
+                    :status="shadowStatus"
                     :profile="profile"
                     v-on:handle-report="handleReport"
                     v-on:counter-change="counterChange"
@@ -58,8 +60,8 @@
             },
 
             reactionBar: {
-                type: Boolean,
-                default: true
+            	type: Boolean,
+            	default: true
             },
 
             useDropdownMenu: {
@@ -90,14 +92,14 @@
         },
 
         mounted() {
-            this.license = this.status.media_attachments && this.status.media_attachments.length ?
-                this.status
+            this.license = this.shadowStatus.media_attachments && this.shadowStatus.media_attachments.length ?
+                this.shadowStatus
                 .media_attachments
                 .filter(m => m.hasOwnProperty('license') && m.license && m.license.hasOwnProperty('id'))
                 .map(m => m.license)[0] : false;
             this.admin = window._sharedData.user.is_admin;
-            this.owner = this.status.account.id == window._sharedData.user.id;
-            if(this.status.reply_count && this.autoloadComments && this.status.comments_disabled === false) {
+            this.owner = this.shadowStatus.account.id == window._sharedData.user.id;
+            if(this.shadowStatus.reply_count && this.autoloadComments && this.shadowStatus.comments_disabled === false) {
                 setTimeout(() => {
                     this.showCommentDrawer = true;
                 }, 1000);
@@ -127,6 +129,24 @@
                 get() {
                     return this.$store.state.newReactions;
                 },
+            },
+
+            isReblog: {
+                get() {
+                    return this.status.reblog != null;
+                }
+            },
+
+            reblogAccount: {
+                get() {
+                    return this.status.reblog ? this.status.account : null;
+                }
+            },
+
+            shadowStatus: {
+                get() {
+                    return this.status.reblog ? this.status.reblog : this.status;
+                }
             }
         },
 
@@ -137,7 +157,7 @@
                 handler: function(o, n) {
                     this.isBookmarking = false;
                 }
-            }
+            },
         },
 
         methods: {

+ 147 - 52
resources/assets/components/sections/Timeline.vue

@@ -361,17 +361,30 @@
 
             likeStatus(index) {
                 let status = this.feed[index];
-                let state = status.favourited;
-                let count = status.favourites_count;
-                this.feed[index].favourites_count = count + 1;
-                this.feed[index].favourited = !status.favourited;
+                if(status.reblog) {
+                    status = status.reblog;
+                    let state = status.favourited;
+                    let count = status.favourites_count;
+                    this.feed[index].reblog.favourites_count = count + 1;
+                    this.feed[index].reblog.favourited = !status.favourited;
+                } else {
+                    let state = status.favourited;
+                    let count = status.favourites_count;
+                    this.feed[index].favourites_count = count + 1;
+                    this.feed[index].favourited = !status.favourited;
+                }
 
                 axios.post('/api/v1/statuses/' + status.id + '/favourite')
                 .then(res => {
                     //
                 }).catch(err => {
-                    this.feed[index].favourites_count = count;
-                    this.feed[index].favourited = false;
+                    if(status.reblog) {
+                        this.feed[index].reblog.favourites_count = count;
+                        this.feed[index].reblog.favourited = false;
+                    } else {
+                        this.feed[index].favourites_count = count;
+                        this.feed[index].favourited = false;
+                    }
 
                     let el = document.createElement('p');
                     el.classList.add('text-left');
@@ -413,17 +426,30 @@
 
             unlikeStatus(index) {
                 let status = this.feed[index];
-                let state = status.favourited;
-                let count = status.favourites_count;
-                this.feed[index].favourites_count = count - 1;
-                this.feed[index].favourited = !status.favourited;
+                if(status.reblog) {
+                    status = status.reblog;
+                    let state = status.favourited;
+                    let count = status.favourites_count;
+                    this.feed[index].reblog.favourites_count = count - 1;
+                    this.feed[index].reblog.favourited = !status.favourited;
+                } else {
+                    let state = status.favourited;
+                    let count = status.favourites_count;
+                    this.feed[index].favourites_count = count - 1;
+                    this.feed[index].favourited = !status.favourited;
+                }
 
                 axios.post('/api/v1/statuses/' + status.id + '/unfavourite')
                 .then(res => {
                     //
                 }).catch(err => {
-                    this.feed[index].favourites_count = count;
-                    this.feed[index].favourited = false;
+                    if(status.reblog && status.pf_type == 'share') {
+                        this.feed[index].reblog.favourites_count = count;
+                        this.feed[index].reblog.favourited = false;
+                    } else {
+                        this.feed[index].favourites_count = count;
+                        this.feed[index].favourited = false;
+                    }
                 })
             },
 
@@ -445,7 +471,8 @@
 
             openLikesModal(idx) {
                 this.postIndex = idx;
-                this.likesModalPost = this.feed[this.postIndex];
+                let post = this.feed[this.postIndex];
+                this.likesModalPost = post.reblog ? post.reblog : post;
                 this.showLikesModal = true;
                 this.$nextTick(() => {
                     this.$refs.likesModal.open();
@@ -454,7 +481,8 @@
 
             openSharesModal(idx) {
                 this.postIndex = idx;
-                this.sharesModalPost = this.feed[this.postIndex];
+                let post = this.feed[this.postIndex];
+                this.sharesModalPost = post.reblog ? post.reblog : post;
                 this.showSharesModal = true;
                 this.$nextTick(() => {
                     this.$refs.sharesModal.open();
@@ -492,19 +520,32 @@
             },
 
             counterChange(index, type) {
+                let post = this.feed[index];
                 switch(type) {
                     case 'comment-increment':
-                        this.feed[index].reply_count = this.feed[index].reply_count + 1;
+                        if(post.reblog != null) {
+                            this.feed[index].reblog.reply_count = this.feed[index].reblog.reply_count + 1;
+                        } else {
+                            this.feed[index].reply_count = this.feed[index].reply_count + 1;
+                        }
                     break;
 
                     case 'comment-decrement':
-                        this.feed[index].reply_count = this.feed[index].reply_count - 1;
+                        if(post.reblog != null) {
+                            this.feed[index].reblog.reply_count = this.feed[index].reblog.reply_count - 1;
+                        } else {
+                            this.feed[index].reply_count = this.feed[index].reply_count - 1;
+                        }
                     break;
                 }
             },
 
             openCommentLikesModal(post) {
-                this.likesModalPost = post;
+                if(post.reblog != null) {
+                    this.likesModalPost = post.reblog;
+                } else {
+                    this.likesModalPost = post;
+                }
                 this.showLikesModal = true;
                 this.$nextTick(() => {
                     this.$refs.likesModal.open();
@@ -513,33 +554,59 @@
 
             shareStatus(index) {
                 let status = this.feed[index];
-                let state = status.reblogged;
-                let count = status.reblogs_count;
-                this.feed[index].reblogs_count = count + 1;
-                this.feed[index].reblogged = !status.reblogged;
+                if(status.reblog) {
+                    status = status.reblog;
+                    let state = status.reblogged;
+                    let count = status.reblogs_count;
+                    this.feed[index].reblog.reblogs_count = count + 1;
+                    this.feed[index].reblog.reblogged = !status.reblogged;
+                } else {
+                    let state = status.reblogged;
+                    let count = status.reblogs_count;
+                    this.feed[index].reblogs_count = count + 1;
+                    this.feed[index].reblogged = !status.reblogged;
+                }
 
                 axios.post('/api/v1/statuses/' + status.id + '/reblog')
                 .then(res => {
                     //
                 }).catch(err => {
-                    this.feed[index].reblogs_count = count;
-                    this.feed[index].reblogged = false;
+                    if(status.reblog) {
+                        this.feed[index].reblog.reblogs_count = count;
+                        this.feed[index].reblog.reblogged = false;
+                    } else {
+                        this.feed[index].reblogs_count = count;
+                        this.feed[index].reblogged = false;
+                    }
                 })
             },
 
             unshareStatus(index) {
                 let status = this.feed[index];
-                let state = status.reblogged;
-                let count = status.reblogs_count;
-                this.feed[index].reblogs_count = count - 1;
-                this.feed[index].reblogged = !status.reblogged;
+                if(status.reblog) {
+                    status = status.reblog;
+                    let state = status.reblogged;
+                    let count = status.reblogs_count;
+                    this.feed[index].reblog.reblogs_count = count - 1;
+                    this.feed[index].reblog.reblogged = !status.reblogged;
+                } else {
+                    let state = status.reblogged;
+                    let count = status.reblogs_count;
+                    this.feed[index].reblogs_count = count - 1;
+                    this.feed[index].reblogged = !status.reblogged;
+                }
 
                 axios.post('/api/v1/statuses/' + status.id + '/unreblog')
                 .then(res => {
                     //
                 }).catch(err => {
-                    this.feed[index].reblogs_count = count;
-                    this.feed[index].reblogged = false;
+                    if(status.reblog) {
+                        this.feed[index].reblog.reblogs_count = count;
+                        this.feed[index].reblog.reblogged = false;
+                    } else {
+                        this.feed[index].reblogs_count = count;
+                        this.feed[index].reblogged = false;
+                    }
                 })
             },
 
@@ -554,11 +621,19 @@
             handleBookmark(index) {
                 let p = this.feed[index];
 
+                if(p.reblog) {
+                    p = p.reblog;
+                }
+
                 axios.post('/i/bookmark', {
                     item: p.id
                 })
                 .then(res => {
-                    this.feed[index].bookmarked = !p.bookmarked;
+                    if(this.feed[index].reblog) {
+                        this.feed[index].reblog.bookmarked = !p.bookmarked;
+                    } else {
+                        this.feed[index].bookmarked = !p.bookmarked;
+                    }
                 })
                 .catch(err => {
                     // this.feed[index].bookmarked = false;
@@ -571,31 +646,51 @@
             },
 
             follow(index) {
-                // this.feed[index].relationship.following = true;
-
-                axios.post('/api/v1/accounts/' + this.feed[index].account.id + '/follow')
-                .then(res => {
-                    this.$store.commit('updateRelationship', [res.data]);
-                    this.updateProfile({ following_count: this.profile.following_count + 1 });
-                    this.feed[index].account.followers_count = this.feed[index].account.followers_count + 1;
-                }).catch(err => {
-                    swal('Oops!', 'An error occured when attempting to follow this account.', 'error');
-                    this.feed[index].relationship.following = false;
-                });
+                if(this.feed[index].reblog) {
+                    axios.post('/api/v1/accounts/' + this.feed[index].reblog.account.id + '/follow')
+                    .then(res => {
+                        this.$store.commit('updateRelationship', [res.data]);
+                        this.updateProfile({ following_count: this.profile.following_count + 1 });
+                        this.feed[index].reblog.account.followers_count = this.feed[index].reblog.account.followers_count + 1;
+                    }).catch(err => {
+                        swal('Oops!', 'An error occured when attempting to follow this account.', 'error');
+                        this.feed[index].reblog.relationship.following = false;
+                    });
+                } else {
+                    axios.post('/api/v1/accounts/' + this.feed[index].account.id + '/follow')
+                    .then(res => {
+                        this.$store.commit('updateRelationship', [res.data]);
+                        this.updateProfile({ following_count: this.profile.following_count + 1 });
+                        this.feed[index].account.followers_count = this.feed[index].account.followers_count + 1;
+                    }).catch(err => {
+                        swal('Oops!', 'An error occured when attempting to follow this account.', 'error');
+                        this.feed[index].relationship.following = false;
+                    });
+                }
             },
 
             unfollow(index) {
-                // this.feed[index].relationship.following = false;
-
-                axios.post('/api/v1/accounts/' + this.feed[index].account.id + '/unfollow')
-                .then(res => {
-                    this.$store.commit('updateRelationship', [res.data]);
-                    this.updateProfile({ following_count: this.profile.following_count - 1 });
-                    this.feed[index].account.followers_count = this.feed[index].account.followers_count - 1;
-                }).catch(err => {
-                    swal('Oops!', 'An error occured when attempting to unfollow this account.', 'error');
-                    this.feed[index].relationship.following = true;
-                });
+                if(this.feed[index].reblog) {
+                    axios.post('/api/v1/accounts/' + this.feed[index].reblog.account.id + '/unfollow')
+                    .then(res => {
+                        this.$store.commit('updateRelationship', [res.data]);
+                        this.updateProfile({ following_count: this.profile.following_count - 1 });
+                        this.feed[index].reblog.account.followers_count = this.feed[index].reblog.account.followers_count - 1;
+                    }).catch(err => {
+                        swal('Oops!', 'An error occured when attempting to unfollow this account.', 'error');
+                        this.feed[index].reblog.relationship.following = true;
+                    });
+                } else {
+                    axios.post('/api/v1/accounts/' + this.feed[index].account.id + '/unfollow')
+                    .then(res => {
+                        this.$store.commit('updateRelationship', [res.data]);
+                        this.updateProfile({ following_count: this.profile.following_count - 1 });
+                        this.feed[index].account.followers_count = this.feed[index].account.followers_count - 1;
+                    }).catch(err => {
+                        swal('Oops!', 'An error occured when attempting to unfollow this account.', 'error');
+                        this.feed[index].relationship.following = true;
+                    });
+                }
             },
 
             updateProfile(delta) {