public void OnComplete(DatabaseError error, bool committed, DataSnapshot currentData)
 {
     onCompletion?.OnComplete(error == null);
     if (error != null)
     {
         onCompletion?.OnError(new FirebaseException(error));
     }
 }
 public void Update <T>(T data, FirebasePromise <bool> onCompletion = null)
 {
     databaseReference.UpdateChildValues(DataConverter.ToDictionary(data), (error, reference) =>
     {
         if (onCompletion != null)
         {
             onCompletion.OnComplete(error == null);
             if (error != null)
             {
                 onCompletion.OnError(new FirebaseException(error));
             }
         }
     });
 }
        public void Remove(FirebasePromise <bool> onCompletion = null)
        {
            var rootNode = databaseReference;

            rootNode.RemoveValue((error, reference) =>
            {
                if (onCompletion != null)
                {
                    onCompletion.OnComplete(error == null);
                    if (error != null)
                    {
                        onCompletion.OnError(new FirebaseException(error));
                    }
                }
            });
        }
        public string Put <T>(T data, FirebasePromise <bool> onCompletion = null)
        {
            var nativeData = DataConverter.ToNative(data);

            databaseReference.SetValue(nativeData, (error, reference) =>
            {
                if (onCompletion != null)
                {
                    onCompletion.OnComplete(error == null);
                    if (error != null)
                    {
                        onCompletion.OnError(new FirebaseException(error));
                    }
                }
            });
            return(databaseReference.Key);
        }
        public string Push <T>(T data, FirebasePromise <bool> onCompletion = null)
        {
            var rootNode = databaseReference;

            rootNode = rootNode.GetChildByAutoId();
            rootNode.SetValue(DataConverter.ToNative(data), (error, reference) =>
            {
                if (onCompletion != null)
                {
                    onCompletion.OnComplete(error == null);
                    if (error != null)
                    {
                        onCompletion.OnError(new FirebaseException(error));
                    }
                }
            });
            return(rootNode.Key);
        }
        public void PutFile(string path, string uri, FirebasePromise <FirebaseFileResult> onCompleted)
        {
            var uploadReference = storage.GetRootReference().GetChild(path);

            uploadReference.PutFile(NSUrl.FromFilename(uri), null, async(metadata, error) =>
            {
                try
                {
                    var downloadUrl = await uploadReference.GetDownloadUrlAsync();
                    onCompleted?.OnComplete(new FirebaseFileResult()
                    {
                        IsSuccess   = error == null,
                        DownloadUrl = downloadUrl.AbsoluteString
                    });
                }
                catch (Exception ex)
                {
                    onCompleted?.OnError(new FirebaseException(ex));
                }
            });
        }
        public void Transaction <T>(Action <FirebaseMutableData <T> > transaction, FirebasePromise <bool> onCompletion = null)
        {
            var rootNode = databaseReference;

            rootNode.RunTransaction((currentData) =>
            {
                if (transaction != null)
                {
                    transaction.Invoke(new IosMutableData <T>(currentData));
                }
                return(TransactionResult.Success(currentData));
            }, (error, commited, snapshot) =>
            {
                if (onCompletion != null)
                {
                    onCompletion.OnComplete(commited);
                    if (error != null)
                    {
                        onCompletion.OnError(new FirebaseException(error));
                    }
                }
            });
        }