Пример #1
0
        /// <summary>
        /// Subscribe to periodic 9-axis IMU measurements.
        /// </summary>
        /// <param name="deviceName">Name of the device, e.g. Movesense 174430000051</param>
        /// <param name="notificationCallback">Callback function to receive the IMU9Data</param>
        /// <param name="sampleRate">Sampling rate, e.g. 26 for 26Hz</param>
        public async Task <IMdsSubscription> SubscribeIMU9Async(string deviceName, Action <IMU9Data> notificationCallback, int sampleRate = DEFAULT_SAMPLE_RATE)
        {
            string datapath = String.Format(IMU9_SUBSCRIPTION_PATH, sampleRate);
            var    op       = new ApiSubscription <IMU9Data>(deviceName, datapath);

            return(await op.SubscribeAsync(notificationCallback));
        }
Пример #2
0
 private void FixRelativeUrl(ApiSubscription sub)
 {
     if (!sub.ThumbnailUrl.IsAbsoluteUri)
     {
         sub.ThumbnailUrl = new Uri(AppState.BackendBase, sub.ThumbnailUrl);
     }
 }
Пример #3
0
        /// <summary>
        /// Subscribe to periodic Magnetometer data measurements
        /// </summary>
        /// <param name="notificationCallback">Callback function to receive the MagnData</param>
        /// <param name="sampleRate">Sampling rate, e.g. 26 for 26Hz</param>
        public async Task <IMdsSubscription> SubscribeMagnetometerAsync(Action <MagnData> notificationCallback, int sampleRate = DEFAULT_SAMPLE_RATE)
        {
            string datapath = String.Format(MAGNETOMETER_SUBSCRIPTION_PATH, sampleRate);
            var    op       = new ApiSubscription <MagnData>(this, datapath);

            return(await op.SubscribeAsync(notificationCallback));
        }
Пример #4
0
        public async Task <IMdsSubscription> SubscribeGyrometerAsync(string deviceName, Action <GyroData> notificationCallback, int sampleRate = DEFAULT_SAMPLE_RATE)
        {
            string datapath = String.Format(GYROMETER_SUBSCRIPTION_PATH, sampleRate);
            var    op       = new ApiSubscription <GyroData>(deviceName, datapath);

            return(await op.SubscribeAsync(notificationCallback).ConfigureAwait(false));
        }
Пример #5
0
        /// <summary>
        /// Subscribe to periodic 6-axis IMU measurements (Acc + Gyro).
        /// </summary>
        /// <param name="notificationCallback">Callback function to receive the IMU6Data</param>
        /// <param name="sampleRate">Sampling rate, e.g. 26 for 26Hz</param>
        public async Task <IMdsSubscription> SubscribeIMU6Async(Action <IMU6Data> notificationCallback, int sampleRate = DEFAULT_SAMPLE_RATE)
        {
            string datapath = String.Format(IMU6_SUBSCRIPTION_PATH, sampleRate);
            var    op       = new ApiSubscription <IMU6Data>(this, datapath);

            return(await op.SubscribeAsync(notificationCallback).ConfigureAwait(false));
        }
Пример #6
0
        private void AddSubscription(ApiSubscription sub)
        {
            FixRelativeUrl(sub);
            var vmSub = new SubscriptionViewModel(sub);
            var tvSub = new SortedTreeViewNode <SubscriptionItemViewModelBase, string>(vmSub);

            GetParentFolder(sub.ParentFolderId).Children.Add(tvSub);
        }
Пример #7
0
        public async Task Synchronize(ApiSubscription subscription)
        {
            using var scope = serviceProvider.CreateScope();
            var backend = scope.ServiceProvider.GetRequiredService <BackendService>();

            await backend.SubscriptionSynchronize(new SubscriptionSynchronizeRequest()
            {
                Id = subscription.Id
            });
        }
Пример #8
0
        public async Task Delete(ApiSubscription subscription, bool deleteDownloadedFiles)
        {
            using var scope = serviceProvider.CreateScope();
            var backend = scope.ServiceProvider.GetRequiredService <BackendService>();

            await backend.SubscriptionDelete(new SubscriptionDeleteRequest()
            {
                Ids = new[] { subscription.Id },
                DeleteDownloadedFiles = deleteDownloadedFiles
            });
        }
Пример #9
0
 //Delete subscription (DELETE -> /subscriptions/some-url-friendly-identifier)
 public HttpResponseMessage Delete(int id, ApiSubscription subdata)
 {
     try
     {
         repo.DeleteSubscription(subdata.Id);
         return Request.CreateResponse(HttpStatusCode.OK,subdata);
     }
     catch (Exception ex)
     {
         return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.GetBaseException());
     }
 }
        public async Task AddSubscription_ActivitiesEndPoint_WithoutSubscriberId()
        {
            Action <HttpRequestMessage> additionalChecks = message =>
            {
                Assert.AreEqual(0, message.Headers.Count());
            };

            FitbitClient fitbitClient = SetupFitbitClient("AddSubscriptionResponse.json", "https://api.fitbit.com/1/user/-/activities/apiSubscriptions/323-activities.json", HttpMethod.Post, additionalChecks);

            ApiSubscription response = await fitbitClient.AddSubscriptionAsync(APICollectionType.activities, "323");

            Assert.AreEqual("323", response.SubscriptionId);
        }
        public void Can_Deserialize_UpdatedResource()
        {
            // aka Add Subscription response
            string content = SampleDataHelper.GetContent("AddSubscriptionResponse.json");
            JsonDotNetSerializer deserializer = new JsonDotNetSerializer();

            ApiSubscription subscription = deserializer.Deserialize <ApiSubscription>(content);

            Assert.AreEqual(APICollectionType.user, subscription.CollectionType);
            Assert.AreEqual("227YZL", subscription.OwnerId);
            Assert.AreEqual("1", subscription.SubscriberId);
            Assert.AreEqual("323", subscription.SubscriptionId);
        }
Пример #12
0
 //Create subscription (POST -> /subscriptions) -> Deprecated ;)
 //Create subscription (POST -> /subscriptions/userId)
 public HttpResponseMessage Post(int id, ApiSubscription subdata)
 {
     if (subdata == null)
     {
         return Request.CreateErrorResponse(HttpStatusCode.BadRequest, new ArgumentNullException("subdata"));
     }
     try
     {
         var saved = repo.AddUserSubscription(id, subdata);
         var response = Request.CreateResponse<ApiSubscription>(HttpStatusCode.Created, saved);
         return response;
     }
     catch (Exception ex)
     {
         return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.GetBaseException());
     }
 }
        public void Can_Deserialize_ApiSubscription()
        {
            string content = SampleDataHelper.GetContent("ListApiSubscriptionsResponseSingle.json");
            JsonDotNetSerializer deserializer = new JsonDotNetSerializer {
                RootProperty = "apiSubscriptions"
            };

            List <ApiSubscription> subscriptions = deserializer.Deserialize <List <ApiSubscription> >(content);

            Assert.IsNotNull(subscriptions);
            Assert.AreEqual(1, subscriptions.Count);
            ApiSubscription subscription = subscriptions.FirstOrDefault();

            Assert.AreEqual(APICollectionType.user, subscription.CollectionType);
            Assert.AreEqual("227YZL", subscription.OwnerId);
            Assert.AreEqual("1", subscription.SubscriberId);
            Assert.AreEqual("323", subscription.SubscriptionId);
        }
        public async Task AddSubscription_ActivitiesEndPoint_WithSubscriberId()
        {
            Action <HttpRequestMessage> additionalChecks = message =>
            {
                Assert.AreEqual(1, message.Headers.Count());
                Assert.IsTrue(message.Headers.Contains(Constants.Headers.XFitbitSubscriberId));

                IEnumerable <string> headerValues;
                Assert.IsTrue(message.Headers.TryGetValues(Constants.Headers.XFitbitSubscriberId, out headerValues));

                Assert.AreEqual(SubScriberId, headerValues.First());
            };

            FitbitClient fitbitClient = SetupFitbitClient("AddSubscriptionResponse.json", "https://api.fitbit.com/1/user/-/activities/apiSubscriptions/323-activities.json", HttpMethod.Post, additionalChecks);

            ApiSubscription response = await fitbitClient.AddSubscriptionAsync(APICollectionType.activities, "323", SubScriberId);

            Assert.AreEqual("323", response.SubscriptionId);
        }
Пример #15
0
        private bool RemoveSubscription(ApiSubscription subscription)
        {
            var parent = GetParentFolder(subscription.ParentFolderId);

            foreach (var child in parent.Children)
            {
                if (child.Data is SubscriptionViewModel subVm &&
                    subVm.Subscription.Id == subscription.Id)
                {
                    parent.Children.Remove(child);

                    if (child == treeView.SelectedItem)
                    {
                        treeView.SelectedItem = null;
                    }

                    return(true);
                }
            }

            return(false);
        }
Пример #16
0
        //Add subscription to user (PUT -> /users/subscriptionId) spec changed to:
        //Add subscription to user (PUT -> /users/userId) (major violation of spec)
        public HttpResponseMessage Put(int id, ApiSubscription subdata)
        {
            try
            {
                if (subdata == null)
                {
                    return Request.CreateErrorResponse(HttpStatusCode.BadRequest, new ArgumentNullException("subdata"));
                }
                //get CurrentUser instead
                var user = repo.GetUser(id);
                if (user == null)
                {
                    return Request.CreateErrorResponse(HttpStatusCode.NoContent,"No user with id: " +  id.ToString());
                }

                var replySub = repo.AddUserSubscription(id, subdata);
                return Request.CreateResponse<ApiSubscription>(HttpStatusCode.OK, replySub);
            }
            catch (Exception ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.GetBaseException());
            }
        }
Пример #17
0
 public ApiSubscription UpdateSubscription(ApiSubscription sub)
 {
     return _client.UpdateSubscription(sub);
 }
Пример #18
0
 //Update subscription data such  (PUT -> /subscriptions/some-url-friendly-identifier)
 //id is redundant because I update the subscription directly from subdata
 public HttpResponseMessage Put(int id, ApiSubscription subdata)
 {
     if (subdata == null)
     {
         return Request.CreateErrorResponse(HttpStatusCode.BadRequest, new ArgumentNullException("subdata"));
     }
     try
     {
         //could have,should have used repo.AddUserSubscription(id, subdata) but I didn't. (Because I would like feedback on best approach)
         var saved = repo.UpdateSubscription(subdata);
         if (saved == null)
         {
             return Request.CreateErrorResponse(HttpStatusCode.NoContent, subdata.Id.ToString());
         }
         return Request.CreateResponse(HttpStatusCode.OK, saved);
     }
     catch (Exception ex)
     {
         return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.GetBaseException());
     }
 }
Пример #19
0
 public SubscriptionViewModel(ApiSubscription subscription)
 {
     Subscription = subscription;
 }
Пример #20
0
 public ApiSubscription AddUserSubscription(int userId, ApiSubscription subscription)
 {
     return _client.AddUserSubscription(userId, subscription);
 }
Пример #21
0
 private void Messaging_SubscriptionUpdated(object sender, ApiSubscription subscription)
 {
     appState.Subscriptions[subscription.Id] = subscription;
 }
Пример #22
0
        public async Task <IMdsSubscription> SubscribeTimeAsync(string deviceName, Action <TimeNotificationResult> notificationCallback)
        {
            var op = new ApiSubscription <TimeNotificationResult>(deviceName, TIME_SUBSCRIPTION_PATH);

            return(await op.SubscribeAsync(notificationCallback).ConfigureAwait(false));
        }
Пример #23
0
        /// <summary>
        /// Subscribe to device time notifications
        /// </summary>
        /// <param name="notificationCallback">Callback function to receive the time data</param>
        public async Task <IMdsSubscription> SubscribeTimeAsync(Action <TimeNotificationResult> notificationCallback)
        {
            var op = new ApiSubscription <TimeNotificationResult>(this, TIME_SUBSCRIPTION_PATH);

            return(await op.SubscribeAsync(notificationCallback));
        }
Пример #24
0
 public async Task NotifySubscriptionUpdated(UserAccount userAccount, ApiSubscription subscription)
 {
     await ForUser(userAccount).NotifySubscriptionUpdated(subscription);
 }
Пример #25
0
 private void NotifySubscriptionUpdated(ApiSubscription subscription)
 {
     SubscriptionUpdated?.Invoke(this, subscription);
 }