public async Task Add(Media media)
        {
            DataManager  dataManager = DataManager.Instance;
            MemoryStream stream      = null;

            DataObjects.Media dataMedia       = null;
            FileImageSource   fileImageSource = null;

            fileImageSource = media.Image as FileImageSource;

            Stream downsampleStream = null;

            // If this is still from a file downsample it to be stored in the database
            if (fileImageSource != null)
            {
                downsampleStream = await ImageService.Instance.LoadFile(fileImageSource.File).DownSample(width: 300).AsJPGStreamAsync();
            }
            else
            {
                StreamImageSource streamsource = media.Image as StreamImageSource;

                if (streamsource != null)
                {
                    downsampleStream = await ImageService.Instance.LoadStream(
                        sct => {
                        return(((IStreamImageSource)streamsource).GetStreamAsync());
                    }).DownSample(width: 300).AsJPGStreamAsync();
                }
            }

            if (downsampleStream != null)
            {
                stream = new MemoryStream();
                await downsampleStream.CopyToAsync(stream);

                if (Device.RuntimePlatform == Device.iOS)
                {
                    // Lets use the downsample one rather the big-size image selected by user to lower the app memory usage
                    // (Actually we are using the downsample one from datamanger when the app starts)
                    stream.Seek(0, SeekOrigin.Begin);
                    media.Image = ImageSource.FromStream(() => stream);
                }
            }

            if (stream != null)
            {
                // Add to the Data Manager
                dataMedia = new DataObjects.Media()
                {
                    Id   = Guid.NewGuid().ToString(),
                    Type = (byte)MediaType.Image,
                    Data = stream.ToArray()
                };

                await dataManager.AddMedia(dataMedia);

                media.Id = dataMedia.Id;
                _media.Add(media);
            }
        }
 /// <summary>
 /// Deletes Pump From Local Tables the Syncs Changes with mobile api
 /// </summary>
 /// <param name="pump">DataObjects.Pump row to delete</param>
 /// <returns></returns>
 public async Task RemoveMedia(DataObjects.Media media)
 {
     try
     {
         await mediaTable.DeleteAsync(media);
         await SyncMedia();
     }
     catch (Exception ex)
     {
         System.Diagnostics.Debug.WriteLine("Error removing media: " + ex.Message);
     }
 }
        public async Task Remove(string id)
        {
            DataManager dataManager = DataManager.Instance;

            DataObjects.Media dataMedia;

            if (id != Guid.Empty.ToString())
            {
                // Remove media from Data Manager
                dataMedia = new DataObjects.Media()
                {
                    Id = id,
                };

                await dataManager.RemoveMedia(dataMedia);
            }
        }
        /// <summary>
        /// Adds or Updates a Child and Syncs with mobile API values
        /// </summary>
        /// <param name="child">DataObjects.HistoricalSession row to add or update</param>
        /// <returns>System.Threading.Tasks.Task</returns>
        public async Task AddMedia(DataObjects.Media media)
        {
            // Make sure the user is logged in so UserId and ProfileId are valid
            if (_isLoggedIn)
            {
                media.ProfileId = _currentProfileId;

                if (null == await mediaTable.LookupAsync(media.Id))
                {
                    await mediaTable.InsertAsync(media);
                }
                else
                {
                    await mediaTable.UpdateAsync(media);
                }
                await SyncMedia();
            }
        }
        public async Task Update(Media media)
        {
            DataManager  dataManager = DataManager.Instance;
            MemoryStream stream      = null;

            DataObjects.Media dataMedia       = null;
            FileImageSource   fileImageSource = null;

            fileImageSource = media.Image as FileImageSource;

            // If this is still from a file downsample it to be stored in the database
            if (fileImageSource != null)
            {
                stream = new MemoryStream();
                var output = await ImageService.Instance.LoadFile(fileImageSource.File).DownSample(width: 300).AsJPGStreamAsync();

                await output.CopyToAsync(stream);
            }
            else
            {
                StreamImageSource streamsource = media.Image as StreamImageSource;

                if (streamsource?.Stream != null)
                {
                    stream = (await((IStreamImageSource)streamsource).GetStreamAsync()) as MemoryStream;
                }
            }

            if (stream != null)
            {
                // Add to the Data Manager
                dataMedia = new DataObjects.Media()
                {
                    Id   = media.Id,
                    Type = (byte)media.Type,
                    Data = stream.ToArray()
                };

                await dataManager.AddMedia(dataMedia);
            }
        }