Browse Source

Even less newtonsoft.

pull/335/head
Sebastian Stehle 7 years ago
parent
commit
dbc80adc45
  1. 12
      extensions/Squidex.Extensions/Actions/ElasticSearch/ElasticSearchActionHandler.cs
  2. 51
      extensions/Squidex.Extensions/Actions/Medium/MediumActionHandler.cs
  3. 6
      src/Squidex.Infrastructure/Json/Objects/JsonNumber.cs

12
extensions/Squidex.Extensions/Actions/ElasticSearch/ElasticSearchActionHandler.cs

@ -8,7 +8,6 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using Elasticsearch.Net; using Elasticsearch.Net;
using Newtonsoft.Json.Linq;
using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.HandleRules;
using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents; using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents;
@ -62,8 +61,7 @@ namespace Squidex.Extensions.Actions.ElasticSearch
var json = ToJson(contentEvent); var json = ToJson(contentEvent);
ruleJob.Content = JObject.Parse(json); ruleJob.Content = $"{{ \"objectId\": \"{contentId}\", {json.Substring(1)}";
ruleJob.Content["objectID"] = contentId;
} }
ruleJob.Username = action.Username; ruleJob.Username = action.Username;
@ -88,9 +86,7 @@ namespace Squidex.Extensions.Actions.ElasticSearch
{ {
if (job.Content != null) if (job.Content != null)
{ {
var doc = job.Content.ToString(); var response = await client.IndexAsync<StringResponse>(job.IndexName, job.IndexType, job.ContentId, job.Content);
var response = await client.IndexAsync<StringResponse>(job.IndexName, job.IndexType, job.ContentId, doc);
return (response.Body, response.OriginalException); return (response.Body, response.OriginalException);
} }
@ -118,10 +114,10 @@ namespace Squidex.Extensions.Actions.ElasticSearch
public string ContentId { get; set; } public string ContentId { get; set; }
public string Content { get; set; }
public string IndexName { get; set; } public string IndexName { get; set; }
public string IndexType { get; set; } public string IndexType { get; set; }
public JObject Content { get; set; }
} }
} }

51
extensions/Squidex.Extensions/Actions/Medium/MediumActionHandler.cs

@ -9,11 +9,10 @@ using System;
using System.Net.Http; using System.Net.Http;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.HandleRules;
using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents; using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents;
using Squidex.Infrastructure.Http; using Squidex.Infrastructure.Http;
using Squidex.Infrastructure.Json;
namespace Squidex.Extensions.Actions.Medium namespace Squidex.Extensions.Actions.Medium
{ {
@ -22,53 +21,61 @@ namespace Squidex.Extensions.Actions.Medium
private const string Description = "Post to medium"; private const string Description = "Post to medium";
private readonly IHttpClientFactory httpClientFactory; private readonly IHttpClientFactory httpClientFactory;
private readonly IJsonSerializer serializer;
public MediumActionHandler(RuleEventFormatter formatter, IHttpClientFactory httpClientFactory) private sealed class UserResponse
{
public UserResponseData Data { get; set; }
}
private sealed class UserResponseData
{
public string Id { get; set; }
}
public MediumActionHandler(RuleEventFormatter formatter, IHttpClientFactory httpClientFactory, IJsonSerializer serializer)
: base(formatter) : base(formatter)
{ {
this.httpClientFactory = httpClientFactory; this.httpClientFactory = httpClientFactory;
this.serializer = serializer;
} }
protected override (string Description, MediumJob Data) CreateJob(EnrichedEvent @event, MediumAction action) protected override (string Description, MediumJob Data) CreateJob(EnrichedEvent @event, MediumAction action)
{ {
var requestBody = var ruleJob = new MediumJob { AccessToken = action.AccessToken, PublicationId = action.PublicationId };
new JObject(
new JProperty("title", Format(action.Title, @event)),
new JProperty("contentFormat", action.IsHtml ? "html" : "markdown"),
new JProperty("content", Format(action.Content, @event)),
new JProperty("canonicalUrl", Format(action.CanonicalUrl, @event)),
new JProperty("tags", ParseTags(@event, action)));
var ruleJob = new MediumJob var requestBody = new
{ {
AccessToken = action.AccessToken, title = Format(action.Title, @event),
PublicationId = action.PublicationId, contentFormat = action.IsHtml ? "html" : "markdown",
RequestBody = requestBody.ToString(Formatting.Indented) content = Format(action.Content, @event),
canonicalUrl = Format(action.CanonicalUrl, @event),
tags = ParseTags(@event, action)
}; };
ruleJob.RequestBody = ToJson(requestBody);
return (Description, ruleJob); return (Description, ruleJob);
} }
private JArray ParseTags(EnrichedEvent @event, MediumAction action) private string[] ParseTags(EnrichedEvent @event, MediumAction action)
{ {
if (string.IsNullOrWhiteSpace(action.Tags)) if (string.IsNullOrWhiteSpace(action.Tags))
{ {
return null; return null;
} }
string[] tags;
try try
{ {
var jsonTags = Format(action.Tags, @event); var jsonTags = Format(action.Tags, @event);
tags = JsonConvert.DeserializeObject<string[]>(jsonTags); return serializer.Deserialize<string[]>(jsonTags);
} }
catch catch
{ {
tags = action.Tags.Split(','); return action.Tags.Split(',');
} }
return new JArray(tags);
} }
protected override async Task<(string Dump, Exception Exception)> ExecuteJobAsync(MediumJob job) protected override async Task<(string Dump, Exception Exception)> ExecuteJobAsync(MediumJob job)
@ -96,9 +103,9 @@ namespace Squidex.Extensions.Actions.Medium
response = await httpClient.SendAsync(meRequest); response = await httpClient.SendAsync(meRequest);
var responseString = await response.Content.ReadAsStringAsync(); var responseString = await response.Content.ReadAsStringAsync();
var responseJson = JToken.Parse(responseString); var responseJson = serializer.Deserialize<UserResponse>(responseString);
var id = responseJson["data"]["id"].ToString(); var id = responseJson.Data?.Id;
path = $"v1/users/{id}/posts"; path = $"v1/users/{id}/posts";
} }

6
src/Squidex.Infrastructure/Json/Objects/JsonNumber.cs

@ -5,6 +5,8 @@
// All rights reserved. Licensed under the MIT license. // All rights reserved. Licensed under the MIT license.
// ========================================================================== // ==========================================================================
using System.Globalization;
namespace Squidex.Infrastructure.Json.Objects namespace Squidex.Infrastructure.Json.Objects
{ {
public sealed class JsonNumber : JsonScalar<double> public sealed class JsonNumber : JsonScalar<double>
@ -19,9 +21,9 @@ namespace Squidex.Infrastructure.Json.Objects
{ {
} }
public override string ToJsonString() public override string ToString()
{ {
return $"{Value}"; return Value.ToString(CultureInfo.InvariantCulture);
} }
} }
} }

Loading…
Cancel
Save