* LCHookObject.cs:
* LCApplication.cs: * LCHttpClient.cs: * LCIgnoreHookOperation.cs: * LCObject.cs: chore: ignore hook
parent
615f2aff9c
commit
1182eeaab4
|
@ -148,6 +148,11 @@ namespace LeanCloud.Storage.Internal.Http {
|
||||||
string sign = $"{hash},{timestamp}";
|
string sign = $"{hash},{timestamp}";
|
||||||
headers.Add("X-LC-Sign", sign);
|
headers.Add("X-LC-Sign", sign);
|
||||||
}
|
}
|
||||||
|
if (LCApplication.AdditionalHeaders.Count > 0) {
|
||||||
|
foreach (KeyValuePair<string, string> kv in LCApplication.AdditionalHeaders) {
|
||||||
|
headers.Add(kv.Key, kv.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
// 当前用户 Session Token
|
// 当前用户 Session Token
|
||||||
LCUser currentUser = await LCUser.GetCurrent();
|
LCUser currentUser = await LCUser.GetCurrent();
|
||||||
if (!headers.Contains("X-LC-Session") && currentUser != null) {
|
if (!headers.Contains("X-LC-Session") && currentUser != null) {
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace LeanCloud.Storage.Internal.Operation {
|
||||||
|
internal class LCIgnoreHookOperation : ILCOperation {
|
||||||
|
internal HashSet<string> ignoreHooks;
|
||||||
|
|
||||||
|
internal LCIgnoreHookOperation(IEnumerable<string> hooks) {
|
||||||
|
ignoreHooks = new HashSet<string>(hooks);
|
||||||
|
}
|
||||||
|
|
||||||
|
public object Apply(object oldValue, string key) {
|
||||||
|
HashSet<object> set = new HashSet<object>();
|
||||||
|
if (oldValue != null) {
|
||||||
|
set.UnionWith(oldValue as IEnumerable<object>);
|
||||||
|
}
|
||||||
|
set.UnionWith(ignoreHooks);
|
||||||
|
return set.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public object Encode() {
|
||||||
|
return ignoreHooks;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable GetNewObjectList() {
|
||||||
|
return ignoreHooks;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ILCOperation MergeWithPrevious(ILCOperation previousOp) {
|
||||||
|
if (previousOp is LCIgnoreHookOperation ignoreHookOp) {
|
||||||
|
ignoreHooks.UnionWith(ignoreHookOp.ignoreHooks);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
throw new ArgumentException("Operation is invalid after previous operation.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using LeanCloud.Common;
|
using LeanCloud.Common;
|
||||||
using LeanCloud.Storage;
|
using LeanCloud.Storage;
|
||||||
using LeanCloud.Storage.Internal.Http;
|
using LeanCloud.Storage.Internal.Http;
|
||||||
|
@ -42,6 +43,10 @@ namespace LeanCloud {
|
||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static Dictionary<string, string> AdditionalHeaders {
|
||||||
|
get;
|
||||||
|
} = new Dictionary<string, string>();
|
||||||
|
|
||||||
public static void Initialize(string appId,
|
public static void Initialize(string appId,
|
||||||
string appKey,
|
string appKey,
|
||||||
string server = null,
|
string server = null,
|
||||||
|
@ -68,5 +73,9 @@ namespace LeanCloud {
|
||||||
|
|
||||||
HttpClient = new LCHttpClient(appId, appKey, server, SDKVersion, APIVersion);
|
HttpClient = new LCHttpClient(appId, appKey, server, SDKVersion, APIVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void AddHeader(string key, string value) {
|
||||||
|
AdditionalHeaders.Add(key, value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using LeanCloud.Storage.Internal.Operation;
|
||||||
|
|
||||||
|
namespace LeanCloud.Storage {
|
||||||
|
public static class LCClassHook {
|
||||||
|
public const string BeforeSave = "beforeSave";
|
||||||
|
public const string AfterSave = "afterSave";
|
||||||
|
public const string BeforeUpdate = "beforeUpdate";
|
||||||
|
public const string AfterUpdate = "afterUpdate";
|
||||||
|
public const string BeforeDelete = "beforeDelete";
|
||||||
|
public const string AfterDelete = "afterDelete";
|
||||||
|
}
|
||||||
|
|
||||||
|
public partial class LCObject {
|
||||||
|
internal const string IgnoreHooksKey = "__ignore_hooks";
|
||||||
|
|
||||||
|
internal HashSet<string> ignoreHooks;
|
||||||
|
|
||||||
|
internal HashSet<string> IgnoreHooks {
|
||||||
|
get {
|
||||||
|
if (ignoreHooks == null) {
|
||||||
|
ignoreHooks = new HashSet<string>();
|
||||||
|
}
|
||||||
|
return ignoreHooks;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DisableBeforeHook() {
|
||||||
|
Ignore(
|
||||||
|
LCClassHook.BeforeSave,
|
||||||
|
LCClassHook.BeforeUpdate,
|
||||||
|
LCClassHook.BeforeDelete);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DisableAfterHook() {
|
||||||
|
Ignore(
|
||||||
|
LCClassHook.AfterSave,
|
||||||
|
LCClassHook.AfterUpdate,
|
||||||
|
LCClassHook.AfterDelete);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void IgnoreHook(string hookName) {
|
||||||
|
if (hookName != LCClassHook.BeforeSave && hookName != LCClassHook.AfterSave &&
|
||||||
|
hookName != LCClassHook.BeforeUpdate && hookName != LCClassHook.AfterUpdate &&
|
||||||
|
hookName != LCClassHook.BeforeDelete && hookName != LCClassHook.AfterDelete) {
|
||||||
|
throw new ArgumentException($"Invalid {hookName}");
|
||||||
|
}
|
||||||
|
|
||||||
|
Ignore(hookName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Ignore(params string[] hooks) {
|
||||||
|
LCIgnoreHookOperation op = new LCIgnoreHookOperation(hooks);
|
||||||
|
ApplyOperation(IgnoreHooksKey, op);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,7 +12,7 @@ namespace LeanCloud.Storage {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// LeanCloud Object
|
/// LeanCloud Object
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class LCObject {
|
public partial class LCObject {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Last synced data.
|
/// Last synced data.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
Loading…
Reference in New Issue