**update** faced some issues while updating linkding bookmarks, changed the httpclient call.

This commit is contained in:
Aytac Kirmizi 2023-03-15 20:43:36 +01:00
parent 8ef4963a9b
commit 207f5ef58c
9 changed files with 87 additions and 62 deletions

View File

@ -13,8 +13,7 @@ namespace Linkding.Client
Task AddBookmarkAsync(BookmarkCreatePayload bookmark); Task AddBookmarkAsync(BookmarkCreatePayload bookmark);
Task UpdateBookmarkCollectionAsync(IEnumerable<Bookmark> bookmarks); Task UpdateBookmarkCollectionAsync(IEnumerable<Bookmark> bookmarks);
Task UpdateBookmarkCollectionAsync(IEnumerable<BookmarkUpdatePayload> bookmarks); Task UpdateBookmarkAsync(int id, BookmarkUpdatePayload bookmark);
Task UpdateBookmarkAsync(BookmarkUpdatePayload bookmark);
Task<BookmarksResult> GetBookmarkResultsAsync(int limit = 100, int offset = 0); Task<BookmarksResult> GetBookmarkResultsAsync(int limit = 100, int offset = 0);
Task<BookmarksResult> GetBookmarkResultsAsync(string url); Task<BookmarksResult> GetBookmarkResultsAsync(string url);
} }

View File

@ -4,7 +4,7 @@ namespace Core.Entities.Linkding
{ {
public class BookmarkUpdatePayload : BookmarkBase public class BookmarkUpdatePayload : BookmarkBase
{ {
[JsonPropertyName("id")] // [JsonPropertyName("id")]
public int Id { get; set; } // public int Id { get; set; }
} }
} }

View File

@ -14,7 +14,7 @@ public class UpdateTargetLinkdingHandler : ILinkdingSyncTaskHandler
{ {
var linkdingBookmarks = await linkdingService.GetAllBookmarksAsync(); var linkdingBookmarks = await linkdingService.GetAllBookmarksAsync();
var addedBookmarks = new List<BookmarkCreatePayload>(); var addedBookmarks = new List<BookmarkCreatePayload>();
var updatedBookmarks = new List<BookmarkUpdatePayload>(); var updatedBookmarks = new List<Bookmark>();
if (linkdingBookmarks.Count() > 0) if (linkdingBookmarks.Count() > 0)
{ {
@ -37,7 +37,7 @@ public class UpdateTargetLinkdingHandler : ILinkdingSyncTaskHandler
!linkdingBookmark.Description.Equals(bookmark.Description.Trim(), StringComparison.OrdinalIgnoreCase) || !linkdingBookmark.Description.Equals(bookmark.Description.Trim(), StringComparison.OrdinalIgnoreCase) ||
linkdingBookmark.TagNames.Count() != bookmark.TagNames.Count())) linkdingBookmark.TagNames.Count() != bookmark.TagNames.Count()))
{ {
updatedBookmarks.Add(bookmark.MapToUpdatePayload()); updatedBookmarks.Add(bookmark);
} }
else else
{ {
@ -46,7 +46,7 @@ public class UpdateTargetLinkdingHandler : ILinkdingSyncTaskHandler
if (difference.Count() > 0) if (difference.Count() > 0)
{ {
updatedBookmarks.Add(bookmark.MapToUpdatePayload()); updatedBookmarks.Add(bookmark);
} }
} }
} }

View File

@ -22,4 +22,10 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Services\Linkding.Client\Linkding.Client.csproj" /> <ProjectReference Include="..\Services\Linkding.Client\Linkding.Client.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Update="data\config.yml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project> </Project>

View File

@ -1,39 +0,0 @@
urlTagMapping:
- name: microsoft_azure
url: https://github.com/azure
- name: microsoft_azuread
url: https://github.com/AzureAD
- name: microsoft_dotnet
url: https://github.com/dotnet-architecture
taggingRule:
- name: reddit
pattern: https://(?:www\.)?(reddit)\.com(?:/r/)?([ a-zA-Z0-9\-\+_ ]+)?(?:/.*)?
replace: $1,$2
- name: microsoft
pattern: https://([ a-zA-Z0-9 ]+)?[ \. ]?(microsoft)\.com(?:/.*)?
replace: $1,$2
- name: microsoft_docs
pattern: "https://(?:docs)\.(?:microsoft)\.com[ / ]?(?: [ a-zA-Z0-9\-\+_ ]+)(?:/)?([ a-zA-Z0-9\-\+_ ]+)?(?:/)?([ a-zA-Z0-9\-\+_ ]+)?(?:/.*)?"
replace: $1,$2
- name: youtube
pattern: https://[ [ a-zA-Z0-9 ]+\. ]?(youtube)\.com(?:/.*)?
replace: $1
- name: ebay
pattern: https://[ [ a-zA-Z0-9 ]+\. ]?(ebay)\.(com|de|fr)(?:/.*)?
replace: $1
- name: amazon
pattern: https://[ [ a-zA-Z0-9 ]+\. ]?(amazon)\.(com|de|fr)(?:/.*)?
replace: $1
- name: docker
pattern: https://([ a-zA-Z0-9 ]+)?[ \. ]?(docker)\.com(?:/.*)?
replace: $1,$2
- name: xbox
pattern: https://[ [ a-zA-Z0-9 ]+\. ]?(xbox)\.com(?:/.*)?
replace: $1
- name: github
pattern: https://([ a-zA-Z0-9 ]+)?[ \. ]?(github)\.com[ / ]?([ a-zA-Z0-9\-\+_ ]+)(?:/)?([ a-zA-Z0-9\-\+_ ]+)?(?:/.*)?
replace: $2,$3,$4
- name: github.io
pattern: https://([ a-zA-Z0-9 ]+)\.(github)\.io[ / ]?([ a-zA-Z0-9\-\+_ ]+)(?:/)?([ a-zA-Z0-9\-\+_ ]+)?(?:/.*)?
replace: $2,$3,$4

View File

@ -0,0 +1,39 @@
urlTagMapping:
- name: microsoft
url: https://github.com/azure
- name: microsoft
url: https://github.com/AzureAD
- name: microsoft
url: https://github.com/dotnet-architecture
taggingRule:
- name: reddit
pattern: https://(?:www\.)?(reddit)\.com(?:/r/)?([a-zA-Z0-9\-\+_]+)?(?:/.*)?
replace: $1,$2
- name: microsoft
pattern: https://([a-zA-Z0-9]+)?[\.]?(microsoft)\.com(?:/.*)?
replace: $1,$2
- name: microsoft_docs
pattern: 'https://(?:docs)\.(?:microsoft)\.com[/]?(?: [a-zA-Z0-9\-\+_]+)(?:/)?([a-zA-Z0-9\-\+_]+)?(?:/)?([a-zA-Z0-9\-\+_]+)?(?:/.*)?'
replace: $1,$2
- name: youtube
pattern: https://[[a-zA-Z0-9]+\.]?(youtube)\.com(?:/.*)?
replace: $1
- name: ebay
pattern: https://[[a-zA-Z0-9]+\.]?(ebay)\.(com|de|fr)(?:/.*)?
replace: $1
- name: amazon
pattern: https://[[a-zA-Z0-9]+\.]?(amazon)\.(com|de|fr)(?:/.*)?
replace: $1
- name: docker
pattern: https://([a-zA-Z0-9]+)?[\.]?(docker)\.com(?:/.*)?
replace: $1,$2
- name: xbox
pattern: https://[[a-zA-Z0-9]+\.]?(xbox)\.com(?:/.*)?
replace: $1
- name: github
pattern: https://([ a-zA-Z0-9 ]+)?[ \. ]?(github)\.com[ / ]?([ a-zA-Z0-9\-\+_ ]+)(?:/)?([ a-zA-Z0-9\-\+_ ]+)?(?:/.*)?
replace: $2,$3,$4
- name: github.io
pattern: https://([ a-zA-Z0-9 ]+)\.(github)\.io[ / ]?([ a-zA-Z0-9\-\+_ ]+)(?:/)?([ a-zA-Z0-9\-\+_ ]+)?(?:/.*)?
replace: $1,$2,$3

View File

@ -1,5 +1,7 @@
using System.Net.Http.Headers; using System.Net.Http.Headers;
using System.Net.Http.Json; using System.Net.Http.Json;
using System.Text;
using System.Text.Json;
using AutoMapper; using AutoMapper;
using Core.Entities.Linkding; using Core.Entities.Linkding;
using Linkding.Client.Options; using Linkding.Client.Options;
@ -89,6 +91,21 @@ public class LinkdingService : ILinkdingService
public async Task AddBookmarkAsync(BookmarkCreatePayload bookmark) public async Task AddBookmarkAsync(BookmarkCreatePayload bookmark)
{ {
var content = JsonSerializer.Serialize(bookmark);
var requestContent = new StringContent(content, Encoding.UTF8, "application/json");
var uri = $"/api/bookmarks/";
try
{
var response = await _client.PostAsync(uri, requestContent);
response.EnsureSuccessStatusCode();
}
catch (Exception e)
{
Console.WriteLine(e);
// throw;
}
var result = await _client.PostAsJsonAsync($"/api/bookmarks/", bookmark); var result = await _client.PostAsJsonAsync($"/api/bookmarks/", bookmark);
if (result.IsSuccessStatusCode) if (result.IsSuccessStatusCode)
{ {
@ -107,7 +124,7 @@ public class LinkdingService : ILinkdingService
try try
{ {
var payload = _mapper.Map<Bookmark, BookmarkUpdatePayload>(bookmark); var payload = _mapper.Map<Bookmark, BookmarkUpdatePayload>(bookmark);
await UpdateBookmarkAsync(payload); await UpdateBookmarkAsync(bookmark.Id, payload);
} }
catch (Exception e) catch (Exception e)
{ {
@ -117,24 +134,21 @@ public class LinkdingService : ILinkdingService
} }
} }
public async Task UpdateBookmarkCollectionAsync(IEnumerable<BookmarkUpdatePayload> bookmarks) public async Task UpdateBookmarkAsync(int id, BookmarkUpdatePayload bookmark)
{ {
foreach (var bookmark in bookmarks) var content = JsonSerializer.Serialize(bookmark);
{ var requestContent = new StringContent(content, Encoding.UTF8, "application/json");
await UpdateBookmarkAsync(bookmark); var uri = $"/api/bookmarks/{id}/";// Path.Combine("api/bookmarks", $"{id}");
}
}
public async Task UpdateBookmarkAsync(BookmarkUpdatePayload bookmark) try
{ {
var result = await _client.PutAsJsonAsync($"/api/bookmarks/{bookmark.Id}/", bookmark); var response = await _client.PutAsync(uri, requestContent);
if (result.IsSuccessStatusCode) response.EnsureSuccessStatusCode();
{
} }
else catch (Exception e)
{ {
Console.WriteLine(e);
// throw;
} }
} }

View File

@ -27,4 +27,10 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Update="data\config.yml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project> </Project>