Esempio n. 1
0
        private void AddWeb(SEActivities activities, SEActivities.Thread thread, DataRow tr)
        {
            bool found = activities.webs.Any(w => w.id == thread.webId);

            if (found)
            {
                return;
            }

            lock (_locker)
            {
                found = activities.webs.Any(w => w.id == thread.webId);
                if (found)
                {
                    return;
                }

                activities.webs.Add(new SEActivities.Web
                {
                    id    = thread.webId,
                    title = (string)tr["WebTitle"],
                    url   = (string)tr["WebUrl"]
                });
            }
        }
Esempio n. 2
0
        private void BuildActivities(IEnumerable <DataRow> activityRows, SEActivities activities,
                                     SEActivities.Thread thread)
        {
            Parallel.ForEach(activityRows, r =>
            {
                foreach (string column in _activityDateTimeColumns)
                {
                    SetLocalDateTime(r, column, _utcTimeDict, _regionalSettings);
                }

                SEActivities.Thread.Activity activity = BuildActivity(r, activities);
                thread.activities.Add(activity);
            });
        }
Esempio n. 3
0
        // Private Methods (17) 

        private void AddList(SEActivities.Thread thread, SEActivities activities, DataRow tr)
        {
            if (!thread.listId.HasValue)
            {
                return;
            }

            bool found = activities.lists.Any(list => list.id == thread.listId.Value);

            if (found)
            {
                return;
            }

            lock (_locker)
            {
                found = activities.lists.Any(list => list.id == thread.listId.Value);
                if (found)
                {
                    return;
                }

                string url = string.Format("{0}/{1}?action=gotolist&webid={2}&listid={3}&nodlg=true",
                                           GetSafeWebUrl(tr["WebUrl"]), PROXY_URL, thread.webId, thread.listId);

                if (((ObjectKind)tr["ThreadKind"]) == ObjectKind.List)
                {
                    tr["ListName"] = tr["ThreadTitle"];
                }

                activities.lists.Add(new SEActivities.ItemList
                {
                    id   = thread.listId.Value,
                    name = tr["ListName"] as string,
                    icon = tr["ListIcon"] as string,
                    url  = url
                });
            }
        }
Esempio n. 4
0
        private SEActivities.Thread BuildThread(DataRow tr, DBConnectionManager manager, int userId, int activityLimit,
                                                int commentLimit, SEActivities activities, DateTime?offset, string kind = null)
        {
            foreach (string column in _threadDateTimeColumns)
            {
                SetLocalDateTime(tr, column, _utcTimeDict, _regionalSettings);
            }

            var activityRows = new List <DataRow>();
            var commentRows  = new List <DataRow>();

            var totalComments = (int)tr["TotalComments"];

            var  threadKind   = (ObjectKind)tr["ThreadKind"];
            bool ignoreAccess = threadKind == ObjectKind.StatusUpdate;

            if (!string.IsNullOrEmpty(kind))
            {
                kind = kind.ToLower();

                if (kind.Equals("activities"))
                {
                    activityRows =
                        GetThreadActivities(manager, userId, 0, 3, activityLimit, tr, offset, ignoreAccess)
                        .AsEnumerable()
                        .ToList();
                }
                else if (kind.Equals("comments"))
                {
                    commentRows =
                        GetThreadActivities(manager, userId, 4, 4, commentLimit, tr, offset, ignoreAccess)
                        .AsEnumerable()
                        .ToList();
                }
            }
            else
            {
                activityRows =
                    GetThreadActivities(manager, userId, 0, 3, activityLimit, tr, null, ignoreAccess)
                    .AsEnumerable()
                    .ToList();

                if (totalComments > 0)
                {
                    commentRows =
                        GetThreadActivities(manager, userId, 4, 4, commentLimit, tr, null, ignoreAccess)
                        .AsEnumerable()
                        .ToList();
                }
            }

            int totalActivities = activityRows.Count;

            var webId  = (Guid)tr["WebId"];
            var listId = tr["ListId"] as Guid?;
            var itemId = tr["ItemId"] as int?;

            var url = tr["ThreadUrl"] as string;

            if (listId.HasValue && itemId.HasValue)
            {
                url = string.Format("{0}/{1}?action=view&webid={2}&listid={3}&id={4}",
                                    GetSafeWebUrl(tr["WebUrl"]), PROXY_URL, webId, listId.Value, itemId.Value);
            }

            var thread = new SEActivities.Thread
            {
                id              = (Guid)tr["ThreadId"],
                title           = HttpUtility.HtmlDecode(HttpUtility.HtmlDecode((string)tr["ThreadTitle"])),
                url             = url,
                kind            = ((ObjectKind)tr["ThreadKind"]).ToString(),
                lastActivityOn  = ((DateTime)tr["ThreadLastActivityOn"]).ToString(DATE_FORMAT),
                firstActivityOn = ((DateTime)tr["ThreadFirstActivityOn"]).ToString(DATE_FORMAT),
                webId           = webId,
                listId          = listId,
                itemId          = itemId,
                totalActivities = totalActivities,
                totalComments   = totalComments
            };

            var threadTasks = new[]
            {
                Task.Factory.StartNew(() => BuildActivities(activityRows, activities, thread)),
                Task.Factory.StartNew(() => BuildComments(commentRows, activities, thread)),
                Task.Factory.StartNew(() => AddWeb(activities, thread, tr)),
                Task.Factory.StartNew(() => AddList(thread, activities, tr))
            };

            Task.WaitAll(threadTasks);

            thread.activities = thread.activities.Distinct().ToList();
            thread.comments   = thread.comments.Distinct().ToList();

            return(thread);
        }