/// <summary>
        /// Updateds the element.
        /// </summary>
        /// <param name="element">The element.</param>
        /// <returns></returns>
        public override UPMElement UpdatedElement(UPMElement element)
        {
            UPMInBoxPage oldPage = (UPMInBoxPage)this.TopLevelElement;
            UPMInBoxPage page    = new UPMInBoxPage(StringIdentifier.IdentifierWithStringId("Inbox"))
            {
                UploadFieldGroup     = oldPage.UploadFieldGroup,
                FileNameEditField    = oldPage.FileNameEditField,
                SkipUploadIfPossible = oldPage.SkipUploadIfPossible
            };

            UPInboxFileManager manager = UPInboxFileManager.CurrentInboxFileManager();
            List <UPInboxFile> files   = manager.AllInboxFiles();

            foreach (UPInboxFile inboxFile in files)
            {
                UPMInboxFile upmInboxFile = ModelInboxFileFromInboxFile(inboxFile);
                page.AddChild(upmInboxFile);
            }

            this.TopLevelElement = page;
            this.SortFilesByDate();
            page.Invalid = false;
            this.InformAboutDidChangeTopLevelElement(page, page, null, null);
            return(element);
        }
        private static UPMInboxFile ModelInboxFileFromInboxFile(UPInboxFile inboxFile)
        {
            UPMInboxFile upmInboxFile = new UPMInboxFile(StringIdentifier.IdentifierWithStringId(inboxFile.Path))
            {
                Path = inboxFile.Path,
                URL  = inboxFile.URL
            };

#if PORTING
            upmInboxFile.Name = inboxFile.Path.LastPathComponent();
            Exception    attributesErr;
            NSDictionary fileAttributes = NSFileManager.DefaultManager().AttributesOfItemAtPathError(inboxFile.Path, attributesErr);
            if (attributesErr)
            {
                DDLogError("UPInBoxPageModelController error no fileAttributes: %@", fileAttributes);
            }

            NSNumber fileSizeNumber = fileAttributes.ObjectForKey(NSFileSize);
            upmInboxFile.Size          = fileSizeNumber.LongLongValue();
            upmInboxFile.FormattedSize = NSByteCountFormatter.StringFromByteCountCountStyle(upmInboxFile.Size, NSByteCountFormatterCountStyleFile);
            upmInboxFile.Date          = fileAttributes.ObjectForKey(NSFileCreationDate);
            // Cant use TimeZone here. Called before Login and server independent.
            upmInboxFile.FormattedDate = UPInBoxPageModelController.UpDateFormatter().StringFromDate(upmInboxFile.Date);
            UIDocumentInteractionController interactionController = UIDocumentInteractionController.InteractionControllerWithURL(inboxFile.URL);
            ArrayList icons = interactionController.Icons;
            //upmInboxFile.Icon = icons.LastObject();  // Adding largest Icon available
#endif
            upmInboxFile.MimeTye = UPInboxFileManager.MimeTypeForPath(upmInboxFile.Path);
            upmInboxFile.Color   = UPInBoxPageModelController.ColorForMimeType(upmInboxFile.MimeTye);
            return(upmInboxFile);
        }
        /// <summary>
        /// Uploads the file.
        /// </summary>
        /// <param name="file">The file.</param>
        public void UploadFile(UPMInboxFile file)
        {
            this.uploadingFile = file;
            byte[] data     = null; //NSData.DataWithContentsOfURL(file.URL);
            string fileName = file.Name;

            foreach (UPEditFieldContext changedField in this.editFieldContexts.Values)
            {
                if (changedField.FieldConfig.Function == "Filename" && !string.IsNullOrEmpty(changedField.Value))
                {
                    fileName = changedField.Value;
                    // New filename has no extension. Add original extension
                    //if (fileName.PathExtension().Length == 0)
                    //{
                    //    fileName = $"{fileName}.{file.Path.PathExtension()}";
                    //}

                    break;
                }
            }

            this.docUploadRequest = new UPOfflineUploadDocumentRequest(data, -1, fileName, file.MimeTye, this.recordIdentification, -1);
            List <UPCRMRecord> docUploadRecords = this.docUploadRequest.CreateOfflineRecords();
            string             d1RecordId       = docUploadRecords[0].RecordId;
            string             d3RecordId       = docUploadRecords[1].RecordId;
            UPCRMRecord        d1Record         = new UPCRMRecord(d1RecordId, "Update");
            UPCRMRecord        d3Record         = new UPCRMRecord(d3RecordId, "Update");

            this.editRecordRequest = new UPOfflineEditRecordRequest(UPOfflineRequestMode.OnlineConfirm, this.ViewReference);
            foreach (UPEditFieldContext changedField in this.editFieldContexts.Values)
            {
                UPCRMRecord record = changedField.FieldConfig.InfoAreaId == "D1" ? d1Record : d3Record;
                if (changedField.FieldConfig.Function == "Filename")
                {
                    continue;
                }

                UPCRMFieldValue fieldValue = record.NewValueFieldId(changedField.Value, changedField.FieldId);
                if (!string.IsNullOrEmpty(changedField.DateOriginalValue))
                {
                    fieldValue.DateOriginalValue = changedField.DateOriginalValue;
                }
                else if (!string.IsNullOrEmpty(changedField.TimeOriginalValue))
                {
                    fieldValue.TimeOriginalValue = changedField.TimeOriginalValue;
                }
            }

            this.editRecordRequest.TitleLine   = "FieldUploadFields";
            this.editRecordRequest.DetailsLine = "";
            this.multiRequest = new UPOfflineMultiRequest(this);
            this.multiRequest.AddRequest(this.docUploadRequest);
            this.multiRequest.AddRequest(this.editRecordRequest);
            this.multiRequest.Start();
        }