Ejemplo n.º 1
0
        /// <summary>
        /// Sends the status to the user with targetId in private.
        /// </summary>
        /// <param name="status"></param>
        /// <param name="targetId"></param>
        /// <returns></returns>
        public static async Task <LCStatus> SendPrivately(LCStatus status, string targetId)
        {
            if (status == null)
            {
                throw new ArgumentNullException(nameof(status));
            }
            if (string.IsNullOrEmpty(targetId))
            {
                throw new ArgumentNullException(nameof(targetId));
            }
            LCUser user = await LCUser.GetCurrent();

            if (user == null)
            {
                throw new ArgumentNullException("current user");
            }

            status.Data[SourceKey] = user;
            LCQuery <LCObject> query = new LCQuery <LCObject>("_User")
                                       .WhereEqualTo("objectId", targetId);

            status.query = query;

            status.InboxType = InboxTypePrivate;

            return(await status.Send());
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets the count of the status with inboxType.
        /// </summary>
        /// <param name="inboxType"></param>
        /// <returns></returns>
        public static async Task <LCStatusCount> GetCount(string inboxType)
        {
            LCUser user = await LCUser.GetCurrent();

            if (user == null)
            {
                throw new ArgumentNullException("current user");
            }

            Dictionary <string, object> queryParams = new Dictionary <string, object> {
                { OwnerKey, JsonConvert.SerializeObject(LCEncoder.Encode(user)) }
            };

            if (!string.IsNullOrEmpty(inboxType))
            {
                queryParams[InboxTypeKey] = inboxType;
            }
            Dictionary <string, object> response = await LCCore.HttpClient.Get <Dictionary <string, object> >("subscribe/statuses/count",
                                                                                                              queryParams : queryParams);

            LCStatusCount statusCount = new LCStatusCount {
                Total  = (int)response["total"],
                Unread = (int)response["unread"]
            };

            return(statusCount);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Sends the status to the followers of this user.
        /// </summary>
        /// <param name="status"></param>
        /// <returns></returns>
        public static async Task <LCStatus> SendToFollowers(LCStatus status)
        {
            if (status == null)
            {
                throw new ArgumentNullException(nameof(status));
            }
            LCUser user = await LCUser.GetCurrent();

            if (user == null)
            {
                throw new ArgumentNullException("current user");
            }

            status.Data[SourceKey] = user;

            LCQuery <LCObject> query = new LCQuery <LCObject>("_Follower")
                                       .WhereEqualTo("user", user)
                                       .Select("follower");

            status.query = query;

            status.InboxType = InboxTypeDefault;

            return(await status.Send());
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Deletes this status.
        /// </summary>
        /// <returns></returns>
        public new async Task Delete()
        {
            LCUser user = await LCUser.GetCurrent();

            if (user == null)
            {
                throw new ArgumentNullException("current user");
            }

            LCUser source = (Data[SourceKey] ?? this[SourceKey]) as LCUser;

            if (source != null && source.ObjectId == user.ObjectId)
            {
                await LCCore.HttpClient.Delete($"statuses/{ObjectId}");
            }
            else
            {
                Dictionary <string, object> data = new Dictionary <string, object> {
                    { OwnerKey, JsonConvert.SerializeObject(LCEncoder.Encode(user)) },
                    { InboxTypeKey, InboxType },
                    { MessageIdKey, MessageId }
                };
                await LCCore.HttpClient.Delete("subscribe/statuses/inbox", queryParams : data);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Get the rankings that around the currently logged in user.
        /// </summary>
        /// <param name="version"></param>
        /// <param name="skip"></param>
        /// <param name="limit"></param>
        /// <param name="selectUserKeys"></param>
        /// <param name="includeStatistics"></param>
        /// <returns></returns>
        public async Task <ReadOnlyCollection <LCRanking> > GetResultsAroundUser(int version = -1,
                                                                                 int skip    = 0,
                                                                                 int limit   = 10,
                                                                                 IEnumerable <string> selectUserKeys    = null,
                                                                                 IEnumerable <string> includeStatistics = null)
        {
            LCUser user = await LCUser.GetCurrent();

            return(await GetResults(user, version, skip, limit, selectUserKeys, includeStatistics));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Sends this status.
        /// </summary>
        /// <returns></returns>
        public async Task <LCStatus> Send()
        {
            LCUser user = await LCUser.GetCurrent();

            if (user == null)
            {
                throw new ArgumentNullException("current user");
            }

            Dictionary <string, object> formData = new Dictionary <string, object> {
                { InboxTypeKey, InboxType }
            };

            if (Data != null)
            {
                formData["data"] = LCEncoder.Encode(Data);
            }
            if (query != null)
            {
                Dictionary <string, object> queryData = new Dictionary <string, object> {
                    { "className", query.ClassName }
                };
                Dictionary <string, object> ps = query.BuildParams();
                if (ps.TryGetValue("where", out object whereObj) &&
                    whereObj is string where)
                {
                    queryData["where"] = JsonConvert.DeserializeObject(where);
                }
                if (ps.TryGetValue("keys", out object keys))
                {
                    queryData["keys"] = keys;
                }
                formData["query"] = queryData;
            }
            Dictionary <string, object> response = await LCCore.HttpClient.Post <Dictionary <string, object> >("statuses",
                                                                                                               data : formData);

            LCObjectData objectData = LCObjectData.Decode(response);

            Merge(objectData);

            return(this);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Resets the count of the status to be zero.
        /// </summary>
        /// <param name="inboxType"></param>
        /// <returns></returns>
        public static async Task ResetUnreadCount(string inboxType = null)
        {
            LCUser user = await LCUser.GetCurrent();

            if (user == null)
            {
                throw new ArgumentNullException("current user");
            }

            Dictionary <string, object> queryParams = new Dictionary <string, object> {
                { OwnerKey, JsonConvert.SerializeObject(LCEncoder.Encode(user)) }
            };

            if (!string.IsNullOrEmpty(inboxType))
            {
                queryParams[InboxTypeKey] = inboxType;
            }
            await LCCore.HttpClient.Post <Dictionary <string, object> >("subscribe/statuses/resetUnreadCount",
                                                                        queryParams : queryParams);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Requests to add a friend.
        /// </summary>
        /// <param name="userId">The user id to add.</param>
        /// <param name="attributes">The additional attributes for the friendship.</param>
        /// <returns></returns>
        public static async Task Request(string userId, Dictionary <string, object> attributes = null)
        {
            LCUser user = await LCUser.GetCurrent();

            if (user == null)
            {
                throw new ArgumentNullException("current user");
            }
            string   path   = "users/friendshipRequests";
            LCObject friend = LCObject.CreateWithoutData("_User", userId);
            Dictionary <string, object> data = new Dictionary <string, object> {
                { "user", LCEncoder.EncodeLCObject(user) },
                { "friend", LCEncoder.EncodeLCObject(friend) },
            };

            if (attributes != null)
            {
                data["friendship"] = attributes;
            }
            await LCCore.HttpClient.Post <Dictionary <string, object> >(path, data : data);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Retrieves a list of LCStatus that satisfy the query from the cloud.
        /// </summary>
        /// <returns></returns>
        public new async Task <ReadOnlyCollection <LCStatus> > Find()
        {
            LCUser user = await LCUser.GetCurrent();

            if (user == null)
            {
                throw new ArgumentNullException("current user");
            }

            Dictionary <string, object> queryParams = new Dictionary <string, object> {
                { LCStatus.OwnerKey, JsonConvert.SerializeObject(LCEncoder.Encode(user)) },
                { LCStatus.InboxTypeKey, InboxType },
                { "where", BuildWhere() },
                { "sinceId", SinceId },
                { "maxId", MaxId },
                { "limit", Condition.Limit }
            };
            Dictionary <string, object> response = await LCCore.HttpClient.Get <Dictionary <string, object> >("subscribe/statuses",
                                                                                                              queryParams : queryParams);

            List <object>   results  = response["results"] as List <object>;
            List <LCStatus> statuses = new List <LCStatus>();

            foreach (object item in results)
            {
                LCObjectData objectData = LCObjectData.Decode(item as IDictionary);
                LCStatus     status     = new LCStatus();
                status.Merge(objectData);
                status.MessageId = (int)objectData.CustomPropertyDict[LCStatus.MessageIdKey];
                status.Data      = objectData.CustomPropertyDict;
                status.InboxType = objectData.CustomPropertyDict[LCStatus.InboxTypeKey] as string;
                statuses.Add(status);
            }

            return(statuses.AsReadOnly());
        }