示例#1
0
        public async Task SetRemoteRepository(IRemoteDataRepository repo)
        {
            remoteRepository = repo;

            cboMyOrg.DataSource = null;
            cboMyOrg.Items.Clear();
            var myOrgs = await remoteRepository.GetMyOrganizations();

            cboMyOrg.DataSource    = myOrgs;
            cboMyOrg.DisplayMember = "Name";
            cboMyOrg.ValueMember   = "RemoteId";
        }
        public async Task Initialize(IRemoteDataRepository repo, bool checkConnection)
        {
            remoteDataRepository = repo;
            timerControl.Enabled = true;

            if (checkConnection)
            {
                await this.checkConnection();
            }
            SetDownloadFolderLabel();
            await LoadRecentFilesAsync();
        }
 public void SetRemoteDataRepository(IRemoteDataRepository repo)
 {
     remoteDataRepository = repo;
 }
        /// <summary>
        /// This helper method handles the import of partners.
        /// </summary>
        /// <param name="results">List of partners retrieved from remote data source</param>
        /// <param name="displayMessage">Error message if any</param>
        /// <param name="remoteDataRepository">repository instance to access the remote datasource</param>
        /// <param name="addNew"></param>
        /// <returns></returns>
        public static async Task <ImportPartnerResult> ImportPartners(List <Partner> results, IRemoteDataRepository remoteDataRepository, bool addNew)
        {
            results = null;
            ImportPartnerResult result = new ImportPartnerResult();

            try
            {
                using (IUnitOfWorkDataProvider dp = AppStorage.GetUnitOfWorkDataProvider())
                {
                    var orgIds = dp.Organizations.GetAll().Select(o => o.RemoteID).ToArray();

                    //passing null for eTags results in only total file count being fetched
                    //instead of downloading files when filing the partner object tree
                    results = await remoteDataRepository.FetchAllPartners(null, (addNew)?null : orgIds);
                }
            }
            catch (Exception fetchExc)
            {
                result.Message = "An error occurred fetching partner data.";
                Logger.Log("MESSAGE", result.Message);
                Logger.Log(fetchExc);
                result.Status = ImportStatus.REMOTE_FETCH_ERROR;
                return(result);
            }

            if (results == null || results.Count() == 0)
            {
                result.Message = "No partners found.";
                result.Status  = ImportStatus.REMOTE_FETCH_ERROR;
                return(result);
            }

            using (IUnitOfWorkDataProvider dp = AppStorage.GetUnitOfWorkDataProvider())
            {
                try
                {
                    foreach (var p in dp.Organizations.GetAll())
                    {
                        if (string.IsNullOrEmpty(p.RemoteID) && !string.IsNullOrEmpty(p.PartnerLink))
                        {
                            p.RemoteID = await remoteDataRepository.GetRemoteIDFromPartnerLink(p.PartnerLink);

                            dp.Organizations.Update(p);
                        }
                    }
                    dp.SaveChanges();
                }
                catch (Exception exc)
                {
                    result.Message = "An error occurred checking status of pending partner invitations.";
                    Logger.Log("MESSAGE", result.Message);
                    Logger.Log(exc);
                    result.Status = ImportStatus.REMOTE_FETCH_ERROR;
                    return(result);
                }

                try
                {
                    foreach (var p in results)
                    {
                        Organization existingOrg = null;

                        var matches = dp.Organizations.FindMatching(x => x.RemoteID == p.Id);

                        if (matches.Count() > 0)
                        {
                            existingOrg = matches.ToArray()[0];
                        }

                        if (existingOrg == null)  //try to find a matching partnership link
                        {
                            existingOrg = dp.Organizations.FindSingle(x => x.PartnerLink == p.PartnershipLink);
                        }

                        if (existingOrg == null) //only import new partners
                        {
                            if (addNew)
                            {
                                Organization newOrg = new Organization();
                                newOrg.Name              = p.Name;
                                newOrg.Created           = DateTime.Now;
                                newOrg.DataSourceId      = 1;
                                newOrg.RemoteID          = p.Id;
                                newOrg.MyLinkedOrgId     = p.MyLinkedOrgId;
                                newOrg.SharedFiles       = p.SharedFileCount;
                                newOrg.PermissionGranted = p.PermissionGranted;
                                newOrg.FilesETag         = "";
                                newOrg.FilesETagDate     = DateTime.Now;
                                dp.Organizations.Add(newOrg);
                            }
                        }
                        else
                        {
                            existingOrg.RemoteID          = p.Id;
                            existingOrg.MyLinkedOrgId     = p.MyLinkedOrgId;
                            existingOrg.SharedFiles       = p.SharedFileCount;
                            existingOrg.PermissionGranted = p.PermissionGranted;
                            dp.Organizations.Update(existingOrg);
                        }
                    }

                    dp.SaveChanges();
                }
                catch (Exception exc)
                {
                    result.Message = "An error occurred saving partners. " + exc.Message;
                    Logger.Log("MESSAGE", result.Message);
                    Logger.Log(exc);
                    result.Status = ImportStatus.SAVE_ERROR;
                    return(result);
                }
            }
            result.Status  = ImportStatus.SUCCESS;
            result.Message = "";
            return(result);
        }