LCOV - code coverage report
Current view: top level - client - feed.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 40 60 66.7 %
Date: 2021-04-14 08:03:52 Functions: 0 0 -

          Line data    Source code
       1             : import 'package:dio/dio.dart';
       2             : import 'package:stream_feed_dart/src/core/api/feed_api.dart';
       3             : import 'package:stream_feed_dart/src/core/http/token.dart';
       4             : import 'package:stream_feed_dart/src/core/models/activity.dart';
       5             : import 'package:stream_feed_dart/src/core/models/activity_update.dart';
       6             : import 'package:stream_feed_dart/src/core/models/feed_id.dart';
       7             : import 'package:stream_feed_dart/src/core/models/follow.dart';
       8             : import 'package:stream_feed_dart/src/core/util/default.dart';
       9             : 
      10             : import 'package:stream_feed_dart/src/client/flat_feed.dart';
      11             : import 'package:stream_feed_dart/src/core/util/token_helper.dart';
      12             : 
      13             : /// Manage api calls for specific feeds
      14             : /// The feed object contains convenient functions
      15             : /// such add activity, remove activity etc
      16             : class Feed {
      17             :   ///Initialize a feed object
      18           5 :   Feed(this.feedId, this.feed, {this.userToken, this.secret})
      19             :       : assert(
      20           0 :           userToken != null || secret != null,
      21             :           'At least a secret or userToken must be provided',
      22             :         );
      23             : 
      24             :   /// Your API secret
      25             :   final String? secret;
      26             :   final Token? userToken;
      27             : 
      28             :   /// The feed id
      29             :   final FeedId feedId;
      30             : 
      31             :   ///The stream client this feed is constructed from
      32             :   final FeedApi feed;
      33             : 
      34             :   /// Adds the given [Activity] to the feed
      35             :   /// parameters:
      36             :   /// [activity] : The activity to add
      37             :   /// Example
      38             :   /// ```dart
      39             :   ///  final activity = Activity(
      40             :   ///             actor: user.id,
      41             :   ///             verb: 'tweet',
      42             :   ///             object: '1',
      43             :   ///             extraData: {
      44             :   ///               'tweet': message,
      45             :   ///             },
      46             :   ///           );
      47             :   /// await userFeed.addActivity(activity);
      48             :   /// ```
      49             :   ///
      50             :   /// API docs: [adding-activities-basic](https://getstream.io/activity-feeds/docs/flutter-dart/adding_activities/?language=dart#adding-activities-basic)
      51           1 :   Future<Activity> addActivity(Activity activity) {
      52           1 :     final token = userToken ??
      53           0 :         TokenHelper.buildFeedToken(secret!, TokenAction.write, feedId);
      54           3 :     return feed.addActivity(token, feedId, activity);
      55             :   }
      56             : 
      57             :   /// Adds the given activities to the feed
      58             :   ///
      59             :   /// Usage :
      60             :   /// ```dart
      61             :   /// final activities = <Activity>[
      62             :   ///   const Activity(
      63             :   ///     actor: 'user:1',
      64             :   ///     verb: 'tweet',
      65             :   ///     object: 'tweet:1',
      66             :   ///   ),
      67             :   ///   const Activity(
      68             :   ///     actor: 'user:2',
      69             :   ///     verb: 'watch',
      70             :   ///     object: 'movie:1',
      71             :   ///   ),
      72             :   /// ];
      73             :   /// await userFeed.addActivities(activities);
      74             :   /// ```
      75             :   /// API docs : [batch-add-activities](https://getstream.io/activity-feeds/docs/flutter-dart/add_many_activities/?language=dart#batch-add-activities)
      76           1 :   Future<List<Activity>> addActivities(Iterable<Activity> activities) {
      77           1 :     final token = userToken ??
      78           0 :         TokenHelper.buildFeedToken(secret!, TokenAction.write, feedId);
      79           3 :     return feed.addActivities(token, feedId, activities);
      80             :   }
      81             : 
      82             :   /// Removes the activity by activityId or foreignId
      83             :   ///
      84             :   /// parameters
      85             :   /// [id] : activityId Identifier of activity to remove
      86             :   ///
      87             :   /// Usage:
      88             :   /// ```dart
      89             :   /// await userFeed.removeActivityById('e561de8f-00f1-11e4-b400-0cc47a024be0');
      90             :   /// ```
      91             :   /// API docs: [removing-activities](https://getstream.io/activity-feeds/docs/flutter-dart/adding_activities/?language=dart#removing-activities)
      92           1 :   Future<void> removeActivityById(String id) {
      93             :     //TODO: named removeActivity in js
      94             :     //TODO: should return response
      95           1 :     final token = userToken ??
      96           0 :         TokenHelper.buildFeedToken(secret!, TokenAction.delete, feedId);
      97           3 :     return feed.removeActivityById(token, feedId, id);
      98             :   }
      99             : 
     100             :   /// Remove an Activity by referencing its foreign_id
     101             :   ///
     102             :   /// Parameters:
     103             :   /// [foreignId]: Identifier of activity to remove
     104             :   ///
     105             :   /// For example :
     106             :   ///```dart
     107             :   /// final chris = client.flatFeed('user', 'chris');
     108             :   /// await chris.removeActivityByForeignId('picture:10');
     109             :   /// ```
     110             :   ///
     111             :   /// API docs: [removing-activities](https://getstream.io/activity-feeds/docs/flutter-dart/adding_activities/?language=dart#removing-activities)
     112           1 :   Future<void> removeActivityByForeignId(String foreignId) {
     113           1 :     final token = userToken ??
     114           0 :         TokenHelper.buildFeedToken(secret!, TokenAction.delete, feedId);
     115           3 :     return feed.removeActivityByForeignId(token, feedId, foreignId);
     116             :   }
     117             : 
     118             :   /// Follows the given target feed
     119             :   ///
     120             :   /// Parameters:
     121             :   ///
     122             :   /// [flatFeet] : Slug of the target feed
     123             :   /// [activityCopyLimit] : Limit the amount of activities copied over on follow
     124             :   ///
     125             :   /// For example to create a following relationship
     126             :   /// between Jack's "timeline" feed and Chris' "user" feed
     127             :   /// you'd do the following
     128             :   /// ```dart
     129             :   /// final jack = client.flatFeed('timeline', 'jack');
     130             :   /// await jack.follow(chris);
     131             :   /// ```
     132             :   ///
     133             :   /// API docs: [following](https://getstream.io/activity-feeds/docs/flutter-dart/following/?language=dart)
     134           0 :   Future<Response> follow(
     135             :     FlatFeed flatFeed, {
     136             :     int? activityCopyLimit,
     137             :   }) async {
     138             :     //TODO: should return API response
     139           0 :     final token = userToken ??
     140           0 :         TokenHelper.buildFollowToken(secret!, TokenAction.write, feedId);
     141           0 :     final targetToken = userToken ??
     142           0 :         TokenHelper.buildFeedToken(secret!, TokenAction.read, flatFeed.feedId);
     143           0 :     return feed.follow(token, targetToken, feedId, flatFeed.feedId,
     144             :         activityCopyLimit ?? Default.activityCopyLimit);
     145             :   }
     146             : 
     147             :   /// List the followers of this feed
     148             :   ///
     149             :   /// Parameters:
     150             :   /// [offset] : pagination offset
     151             :   /// [limit] : limit offset
     152             :   ///
     153             :   /// Usage:
     154             :   /// ```dart
     155             :   /// final followers = await userFeed.getFollowers(limit: 10, offset: 0);
     156             :   /// ```
     157             :   ///
     158             :   /// API docs: [reading-feed-followers](https://getstream.io/activity-feeds/docs/flutter-dart/following/?language=dart#reading-feed-followers)
     159           1 :   Future<List<Follow>> getFollowers({
     160             :     Iterable<FeedId>? feedIds,
     161             :     int? limit,
     162             :     int? offset,
     163             :   }) {
     164           1 :     final token = userToken ??
     165           0 :         TokenHelper.buildFollowToken(secret!, TokenAction.read, feedId);
     166           3 :     return feed.getFollowers(token, feedId, limit ?? Default.limit,
     167           0 :         offset ?? Default.offset, feedIds ?? []);
     168             :   }
     169             : 
     170             :   /// List which feeds this feed is following
     171             :   ///
     172             :   /// - Retrieve last 10 feeds followed by user
     173             :   /// ```dart
     174             :   /// var followed = await userFeed.getFollowed(limit: 10, offset: 0);
     175             :   ///```
     176             :   ///
     177             :   /// - Retrieve 10 feeds followed by user starting from the 11th
     178             :   /// ```dart
     179             :   /// followed = await userFeed.getFollowed(limit: 10, offset: 10);
     180             :   ///```
     181             :   ///
     182             :   /// - Check if user follows specific feeds
     183             :   /// ```dart
     184             :   /// followed = await userFeed.getFollowed(limit: 2, offset: 0, feedIds: [
     185             :   ///  FeedId.id('user:42'),
     186             :   ///  FeedId.id('user:43'),
     187             :   ///]);
     188             :   ///```
     189             :   ///
     190             :   /// API docs: [reading-followed-feeds](https://getstream.io/activity-feeds/docs/flutter-dart/following/?language=dart#reading-followed-feeds)
     191           1 :   Future<List<Follow>> getFollowed({
     192             :     Iterable<FeedId>? feedIds,
     193             :     int? limit,
     194             :     int? offset,
     195             :   }) {
     196           1 :     final token = userToken ??
     197           0 :         TokenHelper.buildFollowToken(secret!, TokenAction.read, feedId);
     198           3 :     return feed.getFollowed(token, feedId, limit ?? Default.limit,
     199           0 :         offset ?? Default.offset, feedIds ?? []);
     200             :   }
     201             : 
     202             :   /// Unfollow the given feed
     203             :   ///
     204             :   /// Parameters:
     205             :   /// - [flatFeet] : Slug of the target feed
     206             :   /// - [keepHistory] when provided the activities from target
     207             :   /// feed will not be kept in the feed
     208             :   ///
     209             :   /// For example:
     210             :   /// - Stop following feed user:user_42
     211             :   /// ```dart
     212             :   /// await timeline.unfollow(user);
     213             :   /// ```
     214             :   /// - Stop following feed user:user_42 but keep history of activities
     215             :   /// ```dart
     216             :   /// await timeline.unfollow(user, keepHistory: true);
     217             :   /// ```
     218             :   ///
     219             :   /// API docs: [unfollowing-feeds](https://getstream.io/activity-feeds/docs/flutter-dart/following/?language=dart#unfollowing-feeds)
     220             : 
     221           1 :   Future<void> unfollow(
     222             :     FlatFeed flatFeet, {
     223             :     bool? keepHistory,
     224             :   }) {
     225           1 :     final token = userToken ??
     226           0 :         TokenHelper.buildFollowToken(secret!, TokenAction.delete, feedId);
     227           4 :     return feed.unfollow(token, feedId, flatFeet.feedId, keepHistory ?? false);
     228             :   }
     229             : 
     230             :   /// Updates an activity's [Activity.to] fields
     231             :   ///
     232             :   /// Parameters:
     233             :   ///
     234             :   /// - [update]: the [Activity] to update
     235             :   /// - [remove]: Remove these targets from the activity
     236             :   /// - [add] : Add these new targets to the activity
     237             :   ///
     238             :   /// For example:
     239             :   /// ```dart
     240             :   /// final add = <FeedId>[];
     241             :   /// final remove = <FeedId>[];
     242             :   /// await userFeed.updateActivityToTargets(update, add, remove);
     243             :   /// ```
     244             :   ///
     245             :   /// API docs: [targeting](https://getstream.io/activity-feeds/docs/flutter-dart/targeting/?language=dart)
     246           1 :   Future<void> updateActivityToTargets(
     247             :       ActivityUpdate update, Iterable<FeedId> add, Iterable<FeedId> remove) {
     248           1 :     final token = userToken ??
     249           0 :         TokenHelper.buildToTargetUpdateToken(
     250           0 :             secret!, TokenAction.write, feedId);
     251           3 :     return feed.updateActivityToTargets(token, feedId, update,
     252             :         add: add, remove: remove);
     253             :   }
     254             : 
     255             :   /// Replace [Activity.to] Targets
     256             :   /// Usage:
     257             :   /// ```dart
     258             :   /// await userFeed.replaceActivityToTargets(update, newTargets);
     259             :   /// ```
     260           1 :   Future<void> replaceActivityToTargets(
     261             :       ActivityUpdate update, Iterable<FeedId> newTargets) {
     262           1 :     final token = userToken ??
     263           0 :         TokenHelper.buildToTargetUpdateToken(
     264           0 :             secret!, TokenAction.write, feedId);
     265           3 :     return feed.updateActivityToTargets(token, feedId, update,
     266             :         replace: newTargets);
     267             :   }
     268             : 
     269             :   /// Update Activities By Id
     270           1 :   Future<List<Activity>> updateActivitiesById(
     271             :       Iterable<ActivityUpdate> updates) {
     272             :     //TODO: further document that thing
     273             :     final token =
     274           1 :         userToken ?? TokenHelper.buildActivityToken(secret!, TokenAction.write);
     275           2 :     return feed.updateActivitiesById(token, updates);
     276             :   }
     277             : 
     278             :   /// Partial update by activity ID
     279             :   ///
     280             :   /// For example
     281             :   /// First, prepare the set operations
     282             :   /// ```dart
     283             :   /// final set = {
     284             :   ///   'product.price': 19.99,
     285             :   ///   'shares': {
     286             :   ///     'facebook': '...',
     287             :   ///     'twitter': '...',
     288             :   ///   }
     289             :   /// };
     290             :   /// ```
     291             :   /// Prepare the unset operations
     292             :   ///  ```dart
     293             :   /// final unset = ['daily_likes', 'popularity'];
     294             :   /// const id = '54a60c1e-4ee3-494b-a1e3-50c06acb5ed4';
     295             :   /// final update = ActivityUpdate.withId(id, set, unset);
     296             :   /// await userFeed.updateActivityById(update);
     297             :   ///  ```
     298           1 :   Future<Activity> updateActivityById(ActivityUpdate update) {
     299             :     final token =
     300           1 :         userToken ?? TokenHelper.buildActivityToken(secret!, TokenAction.write);
     301           2 :     return feed.updateActivityById(token, update);
     302             :   }
     303             : 
     304             :   /// Update Activities By ForeignId
     305           1 :   Future<List<Activity>> updateActivitiesByForeignId(
     306             :       Iterable<ActivityUpdate> updates) {
     307             :     final token =
     308           1 :         userToken ?? TokenHelper.buildActivityToken(secret!, TokenAction.write);
     309           2 :     return feed.updateActivitiesByForeignId(token, updates);
     310             :   }
     311             : 
     312             :   /// Update [Activity.foreignId] By ForeignId
     313             :   ///
     314             :   /// Usage:
     315             :   ///```dart
     316             :   ///await userFeed.updateActivityByForeignId(update);
     317             :   ///```
     318           1 :   Future<Activity> updateActivityByForeignId(ActivityUpdate update) {
     319             :     final token =
     320           1 :         userToken ?? TokenHelper.buildActivityToken(secret!, TokenAction.write);
     321             : 
     322           2 :     return feed.updateActivityByForeignId(token, update);
     323             :   }
     324             : }

Generated by: LCOV version 1.15