private bool SearchFiles(
            IMemberServices service,
            TeamListViewItemModel item,
            IDumpUserContentModel model,
            IMainPresenter presenter)
        {
            bool filesAdded = false;
            try
            {
                service.ListFolderUrl = ApplicationResource.ActionListFolder;
                service.UserAgentVersion = ApplicationResource.UserAgent;
                IDataResponse response = service.ListFolders(
                    new MemberData() {
                        MemberId = item.TeamId
                    }, model.UserAccessToken);

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    if (response.Data != null)
                    {
                        string content = response.Data as string;
                        dynamic jsonDataSearch = JsonConvert.DeserializeObject<dynamic>(content);

                        int entryCount = 0;
                        if (jsonDataSearch["entries"] != null)
                        {
                            entryCount = jsonDataSearch["entries"].Count;
                        }
                        //remove existing file entries.
                        for (int i = model.MemberList.Count - 1; i >= 0; i--)
                        {
                            TeamListViewItemModel lvItem = model.MemberList[i];
                            if (lvItem.TeamId.Equals(item.TeamId))
                            {
                                model.MemberList.RemoveAt(i);
                            }
                        }

                        int total = 0;
                        for (int i = 0; i < entryCount; i++)
                        {
                            if (jsonDataSearch["entries"][i][".tag"].ToString().Equals("file"))
                            {
                                TeamListViewItemModel lvItem = new TeamListViewItemModel()
                                {
                                    Email = item.Email,
                                    TeamId = item.TeamId,
                                    FileName = jsonDataSearch["entries"][i]["name"].ToString(),
                                    FilePath = jsonDataSearch["entries"][i]["path_lower"].ToString(),
                                    FileSize = FileUtil.FormatFileSize(Convert.ToInt64(jsonDataSearch["entries"][i]["size"].ToString())),
                                    IsChecked = true
                                };
                                model.MemberList.Add(lvItem);
                                SyncContext.Post(delegate
                                {
                                    presenter.UpdateProgressInfo(string.Format("Searching Files For : {0} File Count: {1}", item.Email, (++total)));
                                }, null);
                            }
                        }
                        if (entryCount > 0)
                        {
                            filesAdded = true;
                        }                        
                    }
                }
            } catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }
            return filesAdded;
        }
        private void SearchItems(
            IMemberServices service,
            TeamListViewItemModel owner,
            IDataMigrationModel model,
            IMainPresenter presenter)
        {
            bool SuppressStatus = ApplicationResource.SuppressFilenamesInStatus;
            bool complete       = false;

            //remove when done debugging
            exceptionCount = 0;
            try
            {
                while (!complete)
                {
                    service.ListFolderUrl    = ApplicationResource.ActionListFolder;
                    service.UserAgentVersion = ApplicationResource.UserAgent;
                    IDataResponse response = service.ListFolders(
                        new MemberData()
                    {
                        MemberId = owner.TeamId
                    }, model.AccessToken);
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        if (response.Data != null)
                        {
                            string  content        = response.Data as string;
                            dynamic jsonDataSearch = JsonConvert.DeserializeObject <dynamic>(content);
                            IDictionary <string, long> folderMap = new Dictionary <string, long>();
                            int entryCount = jsonDataSearch["entries"].Count;
                            int foundTotal = 0;
                            for (int i = 0; i < entryCount; i++)
                            {
                                dynamic entry = jsonDataSearch["entries"][i];
                                string  type  = entry[".tag"].ToString();
                                ContentDisplayListViewItemModel lvItem = null;
                                if (type.Equals("folder"))
                                {
                                    lvItem = new ContentDisplayListViewItemModel()
                                    {
                                        ItemType        = type,
                                        Email           = owner.Email,
                                        MemberId        = owner.TeamId,
                                        FirstName       = owner.FirstName,
                                        LastName        = owner.LastName,
                                        ItemName        = entry["name"].ToString(),
                                        ItemPath        = entry["path_lower"].ToString(),
                                        ItemPathDisplay = entry["path_display"].ToString(),
                                        ItemSizeByte    = 0
                                    };
                                }
                                else
                                {
                                    string serverModified     = entry["server_modified"].ToString();
                                    string serverModifiedDate = string.Empty;
                                    if (!string.IsNullOrEmpty(serverModified))
                                    {
                                        DateTime lastModified = DateTime.SpecifyKind(
                                            DateTime.Parse(serverModified),
                                            DateTimeKind.Utc
                                            );
                                        serverModifiedDate = lastModified.ToString("dd MMM yyyy");
                                    }
                                    string fileSizeStr = jsonDataSearch["entries"][i]["size"].ToString();
                                    long   fileSize    = 0;
                                    long.TryParse(fileSizeStr, out fileSize);
                                    lvItem = new ContentDisplayListViewItemModel()
                                    {
                                        ItemType        = type,
                                        Email           = owner.Email,
                                        MemberId        = owner.TeamId,
                                        FirstName       = owner.FirstName,
                                        LastName        = owner.LastName,
                                        ItemName        = entry["name"].ToString(),
                                        ItemPath        = entry["path_lower"].ToString(),
                                        ItemPathDisplay = entry["path_display"].ToString(),
                                        ItemSize        = FileUtil.FormatFileSize(fileSize),
                                        ItemSizeByte    = fileSize,
                                        LastModified    = serverModifiedDate,
                                        Uploaded        = serverModifiedDate,
                                        Created         = serverModifiedDate
                                    };
                                }
                                lock (insertLock)
                                {
                                    model.Contents.Add(lvItem);
                                }
                                if (SyncContext != null)
                                {
                                    SyncContext.Post(delegate
                                    {
                                        if (!SuppressStatus)
                                        {
                                            presenter.UpdateProgressInfo(string.Format("Owner: [{0}] Item: [{1}] {2}/{3}", lvItem.Email, lvItem.ItemName, (++foundTotal), entryCount));
                                        }
                                        else
                                        {
                                            presenter.UpdateProgressInfo(string.Format("Owner: [{0}] Item: [{1}] {2}/{3}", lvItem.Email, "Suppressing filename status", (++foundTotal), entryCount));
                                        }
                                    }, null);
                                }
                            }
                            bool   hasMore = jsonDataSearch["has_more"];
                            string cursor  = jsonDataSearch["cursor"];

                            while (hasMore)
                            {
                                service.ListFolderUrl = ApplicationResource.ActionListFolderContinuation;
                                IDataResponse responseCont = service.ListFolders(
                                    new MemberData()
                                {
                                    MemberId = owner.TeamId,
                                    Cursor   = cursor
                                }, model.AccessToken);

                                string  contentCont        = responseCont.Data as string;
                                dynamic jsonDataSearchCont = JsonConvert.DeserializeObject <dynamic>(contentCont);
                                IDictionary <string, long> folderMapCont = new Dictionary <string, long>();
                                int entryCountCont = jsonDataSearchCont["entries"].Count;
                                int foundTotalCont = 0;
                                for (int i = 0; i < entryCountCont; i++)
                                {
                                    dynamic entry = jsonDataSearchCont["entries"][i];
                                    string  type  = entry[".tag"].ToString();
                                    ContentDisplayListViewItemModel lvItem = null;
                                    if (type.Equals("folder"))
                                    {
                                        lvItem = new ContentDisplayListViewItemModel()
                                        {
                                            ItemType        = type,
                                            Email           = owner.Email,
                                            MemberId        = owner.TeamId,
                                            FirstName       = owner.FirstName,
                                            LastName        = owner.LastName,
                                            ItemName        = entry["name"].ToString(),
                                            ItemPath        = entry["path_lower"].ToString(),
                                            ItemPathDisplay = entry["path_display"].ToString(),
                                            ItemSizeByte    = 0
                                        };
                                    }
                                    else
                                    {
                                        string serverModified     = entry["server_modified"].ToString();
                                        string serverModifiedDate = string.Empty;
                                        if (!string.IsNullOrEmpty(serverModified))
                                        {
                                            DateTime lastModified = DateTime.SpecifyKind(
                                                DateTime.Parse(serverModified),
                                                DateTimeKind.Utc
                                                );
                                            serverModifiedDate = lastModified.ToString("dd MMM yyyy");
                                        }
                                        string fileSizeStr = jsonDataSearchCont["entries"][i]["size"].ToString();
                                        long   fileSize    = 0;
                                        long.TryParse(fileSizeStr, out fileSize);
                                        lvItem = new ContentDisplayListViewItemModel()
                                        {
                                            ItemType        = type,
                                            Email           = owner.Email,
                                            MemberId        = owner.TeamId,
                                            FirstName       = owner.FirstName,
                                            LastName        = owner.LastName,
                                            ItemName        = entry["name"].ToString(),
                                            ItemPath        = entry["path_lower"].ToString(),
                                            ItemPathDisplay = entry["path_display"].ToString(),
                                            ItemSize        = FileUtil.FormatFileSize(fileSize),
                                            ItemSizeByte    = fileSize,
                                            LastModified    = serverModifiedDate,
                                            Uploaded        = serverModifiedDate,
                                            Created         = serverModifiedDate
                                        };
                                    }
                                    lock (insertLock)
                                    {
                                        model.Contents.Add(lvItem);
                                    }
                                    if (SyncContext != null)
                                    {
                                        SyncContext.Post(delegate
                                        {
                                            if (!SuppressStatus)
                                            {
                                                presenter.UpdateProgressInfo(string.Format("Owner: [{0}] Item: [{1}] {2}/{3}", lvItem.Email, lvItem.ItemName, (++foundTotalCont), entryCountCont));
                                            }
                                            else
                                            {
                                                presenter.UpdateProgressInfo(string.Format("Owner: [{0}] Item: [{1}] {2}/{3}", lvItem.Email, "Suppressing filename status", (++foundTotalCont), entryCountCont));
                                            }
                                        }, null);
                                    }
                                }
                                hasMore = jsonDataSearchCont["has_more"];
                                cursor  = jsonDataSearchCont["cursor"];
                            }
                        }
                        complete = true;
                    }
                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        //error from API
                        if (response.Data != null)
                        {
                            string  data     = response.Data.ToString();
                            dynamic jsonData = JsonConvert.DeserializeObject <dynamic>(data);
                            if (data == "")
                            {
                                complete = false;
                                retryCount++;
                            }
                        }
                        else
                        {
                            //response.Data is null so let's retry
                            complete = false;
                            retryCount++;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                exceptionCount++;
                Console.WriteLine(ex.Message);
            }
        }
        private bool SearchFiles(
            IMemberServices service,
            TeamListViewItemModel item,
            IDumpUserContentModel model,
            IMainPresenter presenter)
        {
            bool filesAdded = false;

            try
            {
                service.ListFolderUrl    = ApplicationResource.ActionListFolder;
                service.UserAgentVersion = ApplicationResource.UserAgent;
                IDataResponse response = service.ListFolders(
                    new MemberData()
                {
                    MemberId = item.TeamId
                }, model.UserAccessToken);

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    if (response.Data != null)
                    {
                        string  content        = response.Data as string;
                        dynamic jsonDataSearch = JsonConvert.DeserializeObject <dynamic>(content);
                        int     entryCount     = 0;
                        if (jsonDataSearch["entries"] != null)
                        {
                            entryCount = jsonDataSearch["entries"].Count;
                        }
                        //remove existing file entries.
                        for (int i = model.MemberList.Count - 1; i >= 0; i--)
                        {
                            TeamListViewItemModel lvItem = model.MemberList[i];
                            if (lvItem.TeamId.Equals(item.TeamId))
                            {
                                model.MemberList.RemoveAt(i);
                            }
                        }
                        int total = 0;
                        for (int i = 0; i < entryCount; i++)
                        {
                            TeamListViewItemModel lvItem = null;
                            if (jsonDataSearch["entries"][i][".tag"].ToString().Equals("file"))
                            {
                                lvItem = new TeamListViewItemModel()
                                {
                                    Email     = item.Email,
                                    TeamId    = item.TeamId,
                                    FileName  = jsonDataSearch["entries"][i]["name"].ToString(),
                                    FilePath  = jsonDataSearch["entries"][i]["path_lower"].ToString(),
                                    FileSize  = FileUtil.FormatFileSize(Convert.ToInt64(jsonDataSearch["entries"][i]["size"].ToString())),
                                    IsChecked = true
                                };
                                lock (insertLock)
                                {
                                    model.MemberList.Add(lvItem);
                                }
                                SyncContext.Post(delegate
                                {
                                    presenter.UpdateProgressInfo(string.Format("Searching Files For : {0} File Count: {1}", item.Email, (++total)));
                                }, null);
                            }
                        }
                        if (entryCount > 0)
                        {
                            filesAdded = true;
                        }
                        bool   hasMore = jsonDataSearch["has_more"];
                        string cursor  = jsonDataSearch["cursor"];

                        while (hasMore)
                        {
                            service.ListFolderUrl    = ApplicationResource.ActionListFolderContinuation;
                            service.UserAgentVersion = ApplicationResource.UserAgent;
                            IDataResponse responseCont = service.ListFolders(
                                new MemberData()
                            {
                                MemberId = item.TeamId,
                                Cursor   = cursor
                            }, model.UserAccessToken);

                            string  contentCont        = responseCont.Data as string;
                            dynamic jsonDataSearchCont = JsonConvert.DeserializeObject <dynamic>(contentCont);

                            int entryCountCont = 0;
                            if (jsonDataSearchCont["entries"] != null)
                            {
                                entryCountCont = jsonDataSearchCont["entries"].Count;
                            }

                            int totalCont = 0;
                            for (int i = 0; i < entryCountCont; i++)
                            {
                                TeamListViewItemModel lvItem = null;
                                if (jsonDataSearchCont["entries"][i][".tag"].ToString().Equals("file"))
                                {
                                    lvItem = new TeamListViewItemModel()
                                    {
                                        Email     = item.Email,
                                        TeamId    = item.TeamId,
                                        FileName  = jsonDataSearchCont["entries"][i]["name"].ToString(),
                                        FilePath  = jsonDataSearchCont["entries"][i]["path_lower"].ToString(),
                                        FileSize  = FileUtil.FormatFileSize(Convert.ToInt64(jsonDataSearchCont["entries"][i]["size"].ToString())),
                                        IsChecked = true
                                    };
                                    lock (insertLock)
                                    {
                                        model.MemberList.Add(lvItem);
                                    }

                                    SyncContext.Post(delegate
                                    {
                                        presenter.UpdateProgressInfo(string.Format("Searching Files For : {0} File Count: {1}", item.Email, (++totalCont)));
                                    }, null);
                                }
                            }
                            if (entryCountCont > 0)
                            {
                                filesAdded = true;
                            }
                            hasMore = jsonDataSearchCont["has_more"];
                            cursor  = jsonDataSearchCont["cursor"];
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            return(filesAdded);
        }
        private void SearchItems(
            IMemberServices service,
            TeamListViewItemModel owner,
            IDataMigrationModel model,
            IMainPresenter presenter) {
            bool SuppressStatus = ApplicationResource.SuppressFilenamesInStatus;
            try {
                service.ListFolderUrl = ApplicationResource.ActionListFolder;
                service.UserAgentVersion = ApplicationResource.UserAgent;
                IDataResponse response = service.ListFolders(
                   new MemberData() {
                       MemberId = owner.TeamId
                   }, model.AccessToken);
                if (response.StatusCode == HttpStatusCode.OK) {
                    if (response.Data != null) {
                        string content = response.Data as string;
                        dynamic jsonDataSearch = JsonConvert.DeserializeObject<dynamic>(content);
                        IDictionary<string, long> folderMap = new Dictionary<string, long>();
                        int entryCount = jsonDataSearch["entries"].Count;
                        int foundTotal = 0;
                        for (int i = 0; i < entryCount; i++)
                        {
                            dynamic entry = jsonDataSearch["entries"][i];
                            string type = entry[".tag"].ToString();
                            ContentDisplayListViewItemModel lvItem = null;
                            if (type.Equals("folder"))
                            {
                                lvItem = new ContentDisplayListViewItemModel()
                                {
                                    ItemType = type,
                                    Email = owner.Email,
                                    MemberId = owner.TeamId,
                                    FirstName = owner.FirstName,
                                    LastName = owner.LastName,
                                    ItemName = entry["name"].ToString(),
                                    ItemPath = entry["path_lower"].ToString(),
                                    ItemPathDisplay = entry["path_display"].ToString(),
                                    ItemSizeByte = 0
                                };
                            }
                            else {
                                string serverModified = entry["server_modified"].ToString();
                                string serverModifiedDate = string.Empty;
                                if (!string.IsNullOrEmpty(serverModified))
                                {
                                    DateTime lastModified = DateTime.SpecifyKind(
                                        DateTime.Parse(serverModified),
                                        DateTimeKind.Utc
                                    );
                                    serverModifiedDate = lastModified.ToString("dd MMM yyyy");
                                }
                                string fileSizeStr = jsonDataSearch["entries"][i]["size"].ToString();
                                long fileSize = 0;
                                long.TryParse(fileSizeStr, out fileSize);
                                lvItem = new ContentDisplayListViewItemModel()
                                {
                                    ItemType = type,
                                    Email = owner.Email,
                                    MemberId = owner.TeamId,
                                    FirstName = owner.FirstName,
                                    LastName = owner.LastName,
                                    ItemName = entry["name"].ToString(),
                                    ItemPath = entry["path_lower"].ToString(),
                                    ItemPathDisplay = entry["path_display"].ToString(),
                                    ItemSize = FileUtil.FormatFileSize(fileSize),
                                    ItemSizeByte = fileSize,
                                    LastModified = serverModifiedDate,
                                    Uploaded = serverModifiedDate,
                                    Created = serverModifiedDate
                                };
                            }
                            lock (insertLock)
                            {
                                model.Contents.Add(lvItem);
                            }
                            if (SyncContext != null)
                            {
                                SyncContext.Post(delegate
                                {
                                    if (!SuppressStatus)
                                    {
                                        presenter.UpdateProgressInfo(string.Format("Owner: [{0}] Item: [{1}] {2}/{3}", lvItem.Email, lvItem.ItemName, (++foundTotal), entryCount));
                                    }
                                    else
                                    {
                                        presenter.UpdateProgressInfo(string.Format("Owner: [{0}] Item: [{1}] {2}/{3}", lvItem.Email, "Suppressing filename status", (++foundTotal), entryCount));
                                    }
                                    
                                }, null);
                            }
                        }
                        bool hasMore = jsonDataSearch["has_more"];
                        string cursor = jsonDataSearch["cursor"];

                        while (hasMore)
                        {
                            service.ListFolderUrl = ApplicationResource.ActionListFolderContinuation;
                            IDataResponse responseCont = service.ListFolders(
                            new MemberData()
                            {
                                MemberId = owner.TeamId,
                                Cursor = cursor
                            }, model.AccessToken);

                            string contentCont = responseCont.Data as string;
                            dynamic jsonDataSearchCont = JsonConvert.DeserializeObject<dynamic>(contentCont);
                            IDictionary<string, long> folderMapCont = new Dictionary<string, long>();
                            int entryCountCont = jsonDataSearchCont["entries"].Count;
                            int foundTotalCont = 0;
                            for (int i = 0; i < entryCountCont; i++)
                            {
                                dynamic entry = jsonDataSearchCont["entries"][i];
                                string type = entry[".tag"].ToString();
                                ContentDisplayListViewItemModel lvItem = null;
                                if (type.Equals("folder"))
                                {
                                    lvItem = new ContentDisplayListViewItemModel()
                                    {
                                        ItemType = type,
                                        Email = owner.Email,
                                        MemberId = owner.TeamId,
                                        FirstName = owner.FirstName,
                                        LastName = owner.LastName,
                                        ItemName = entry["name"].ToString(),
                                        ItemPath = entry["path_lower"].ToString(),
                                        ItemPathDisplay = entry["path_display"].ToString(),
                                        ItemSizeByte = 0
                                    };
                                }
                                else {
                                    string serverModified = entry["server_modified"].ToString();
                                    string serverModifiedDate = string.Empty;
                                    if (!string.IsNullOrEmpty(serverModified))
                                    {
                                        DateTime lastModified = DateTime.SpecifyKind(
                                            DateTime.Parse(serverModified),
                                            DateTimeKind.Utc
                                        );
                                        serverModifiedDate = lastModified.ToString("dd MMM yyyy");
                                    }
                                    string fileSizeStr = jsonDataSearchCont["entries"][i]["size"].ToString();
                                    long fileSize = 0;
                                    long.TryParse(fileSizeStr, out fileSize);
                                    lvItem = new ContentDisplayListViewItemModel()
                                    {
                                        ItemType = type,
                                        Email = owner.Email,
                                        MemberId = owner.TeamId,
                                        FirstName = owner.FirstName,
                                        LastName = owner.LastName,
                                        ItemName = entry["name"].ToString(),
                                        ItemPath = entry["path_lower"].ToString(),
                                        ItemPathDisplay = entry["path_display"].ToString(),
                                        ItemSize = FileUtil.FormatFileSize(fileSize),
                                        ItemSizeByte = fileSize,
                                        LastModified = serverModifiedDate,
                                        Uploaded = serverModifiedDate,
                                        Created = serverModifiedDate
                                    };
                                }
                                lock (insertLock)
                                {
                                    model.Contents.Add(lvItem);
                                }
                                if (SyncContext != null)
                                {
                                    SyncContext.Post(delegate
                                    {
                                        if (!SuppressStatus)
                                        {
                                            presenter.UpdateProgressInfo(string.Format("Owner: [{0}] Item: [{1}] {2}/{3}", lvItem.Email, lvItem.ItemName, (++foundTotalCont), entryCountCont));
                                        }
                                        else
                                        {
                                            presenter.UpdateProgressInfo(string.Format("Owner: [{0}] Item: [{1}] {2}/{3}", lvItem.Email, "Suppressing filename status", (++foundTotalCont), entryCountCont));
                                        }
                                        
                                    }, null);
                                }
                            }
                            hasMore = jsonDataSearchCont["has_more"];
                            cursor = jsonDataSearchCont["cursor"];     
                        }
                    }
                }
            } catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }
        }