a fork of iceshrimp.net but a tweaked frontend to my personal liking. waow
fediverse social-media social iceshrimp fedi
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

[backend/masto-client] Add bubble timeline endpoints

+31 -5
+3
Iceshrimp.Backend/Controllers/Mastodon/Schemas/TimelineSchemas.cs
··· 9 9 [FromQuery(Name = "local")] public bool OnlyLocal { get; set; } = false; 10 10 [FromQuery(Name = "remote")] public bool OnlyRemote { get; set; } = false; 11 11 [FromQuery(Name = "only_media")] public bool OnlyMedia { get; set; } = false; 12 + 13 + // Akkoma extensions 14 + [FromQuery(Name = "bubble")] public bool Bubble { get; set; } = false; 12 15 } 13 16 14 17 public class HashtagTimelineRequest : PublicTimelineRequest
+23 -2
Iceshrimp.Backend/Controllers/Mastodon/TimelineController.cs
··· 55 55 return await db.Notes 56 56 .IncludeCommonProperties() 57 57 .HasVisibility(Note.NoteVisibility.Public) 58 - .FilterByPublicTimelineRequest(request) 58 + .FilterByPublicTimelineRequest(request, db) 59 + .FilterHidden(user, db) 60 + .FilterMutedThreads(user, db) 61 + .Paginate(query, ControllerContext) 62 + .PrecomputeVisibilities(user) 63 + .RenderAllForMastodonAsync(noteRenderer, user, Filter.FilterContext.Public); 64 + } 65 + 66 + [Authorize("read:statuses")] 67 + [HttpGet("bubble")] 68 + [ProducesResults(HttpStatusCode.OK)] 69 + public async Task<IEnumerable<StatusEntity>> GetBubbleTimeline( 70 + MastodonPaginationQuery query 71 + ) 72 + { 73 + var user = HttpContext.GetUserOrFail(); 74 + var request = new TimelineSchemas.PublicTimelineRequest { Bubble = true }; 75 + 76 + return await db.Notes 77 + .IncludeCommonProperties() 78 + .HasVisibility(Note.NoteVisibility.Public) 79 + .FilterByPublicTimelineRequest(request, db) 59 80 .FilterHidden(user, db) 60 81 .FilterMutedThreads(user, db) 61 82 .Paginate(query, ControllerContext) ··· 74 95 return await db.Notes 75 96 .IncludeCommonProperties() 76 97 .Where(p => p.Tags.Contains(hashtag.ToLowerInvariant())) 77 - .FilterByHashtagTimelineRequest(request) 98 + .FilterByHashtagTimelineRequest(request, db) 78 99 .FilterHidden(user, db) 79 100 .FilterMutedThreads(user, db) 80 101 .Paginate(query, ControllerContext)
+5 -3
Iceshrimp.Backend/Core/Extensions/QueryableExtensions.cs
··· 569 569 } 570 570 571 571 public static IQueryable<Note> FilterByPublicTimelineRequest( 572 - this IQueryable<Note> query, TimelineSchemas.PublicTimelineRequest request 572 + this IQueryable<Note> query, TimelineSchemas.PublicTimelineRequest request, DatabaseContext db 573 573 ) 574 574 { 575 575 if (request.OnlyLocal) ··· 578 578 query = query.Where(p => p.UserHost != null); 579 579 if (request.OnlyMedia) 580 580 query = query.Where(p => p.FileIds.Count != 0); 581 + if (request.Bubble) 582 + query = query.Where(p => db.BubbleInstances.Any(i => i.Host == p.UserHost)); 581 583 582 584 return query; 583 585 } 584 586 585 587 public static IQueryable<Note> FilterByHashtagTimelineRequest( 586 - this IQueryable<Note> query, TimelineSchemas.HashtagTimelineRequest request 588 + this IQueryable<Note> query, TimelineSchemas.HashtagTimelineRequest request, DatabaseContext db 587 589 ) 588 590 { 589 591 if (request.Any.Count > 0) ··· 593 595 if (request.None.Count > 0) 594 596 query = query.Where(p => request.None.All(t => !p.Tags.Contains(t))); 595 597 596 - return query.FilterByPublicTimelineRequest(request); 598 + return query.FilterByPublicTimelineRequest(request, db); 597 599 } 598 600 599 601 #pragma warning disable CS8602 // Dereference of a possibly null reference.