Skip to content

Commit 1059bd3

Browse files
committed
Working on recent pages
1 parent dc63b59 commit 1059bd3

21 files changed

Lines changed: 304 additions & 38 deletions

src/CmdPalNotionExtension/CmdPalNotionExtensionCommandsProvider.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ internal partial class CmdPalNotionExtensionCommandsProvider : CommandProvider
1414
private readonly TokenService _tokenService;
1515
private readonly SignInPage _signInPage;
1616
private readonly SignOutPage _signOutPage;
17+
private readonly RecentPagesPage _recentPagesPage;
1718
private readonly Resources _resources;
1819
private bool _isSignedIn;
1920

@@ -28,6 +29,7 @@ public CmdPalNotionExtensionCommandsProvider(
2829
_tokenService = tokenService;
2930
_signInPage = signInPage;
3031
_signOutPage = signOutPage;
32+
_recentPagesPage = recentPagesPage;
3133

3234
DisplayName = _resources.GetResource("ExtensionTitle");
3335
Icon = NotionHelper.Icon;
@@ -76,6 +78,7 @@ public override ICommandItem[] TopLevelCommands()
7678
Subtitle = _resources.GetResource("Forms_Sign_Out_Button_Title"),
7779
Icon = NotionHelper.Icon
7880
},
81+
_recentPagesPage.ToCommandItem()
7982
};
8083

8184
return commands.ToArray();
Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,55 @@
1-
using System.Linq;
2-
using Microsoft.CommandPalette.Extensions.Toolkit;
3-
using Microsoft.CommandPalette.Extensions;
4-
5-
using CmdPalNotionExtension.Notion;
1+
using CmdPalNotionExtension.Helpers;
62
using CmdPalNotionExtension.ListItems;
3+
using CmdPalNotionExtension.Notion;
4+
using Microsoft.CommandPalette.Extensions;
5+
using Microsoft.CommandPalette.Extensions.Toolkit;
6+
using System.Collections.Generic;
7+
using System.Linq;
78

89
namespace CmdPalNotionExtension.Controls.Pages;
910

1011
internal sealed partial class RecentPagesPage : ListPage
1112
{
1213
private readonly NotionDataProvider _dataProvider;
1314
private readonly ListItemFactory _listItemFactory;
15+
private readonly Resources _resources;
16+
17+
private string? _cursor = string.Empty;
18+
private List<IListItem> _currentPages = new List<IListItem>();
1419

15-
public RecentPagesPage(NotionDataProvider dataProvider, ListItemFactory listItemFactory)
20+
public RecentPagesPage(
21+
NotionDataProvider dataProvider,
22+
ListItemFactory listItemFactory,
23+
Resources resources)
1624
{
1725
_dataProvider = dataProvider;
1826
_listItemFactory = listItemFactory;
27+
_resources = resources;
1928

20-
Title = "Recent Pages";
29+
Title = _resources.GetResource("Pages_Recent_Pages_Title");
2130
Icon = new("\uE823");
2231
}
2332

2433
public override IListItem[] GetItems()
2534
{
26-
var res = _dataProvider.GetRecentNotionPagesAsync().GetAwaiter().GetResult();
35+
var res = _dataProvider.GetRecentNotionPagesAsync(_cursor).GetAwaiter().GetResult();
36+
37+
if (res != null)
38+
{
39+
_cursor = res.NextCursor;
40+
_currentPages.AddRange(res.Results.Select(s => _listItemFactory.Create(s)));
41+
}
2742

28-
return res.Select(item => _listItemFactory.Create(item)).ToArray();
43+
return _currentPages.ToArray();
2944
}
3045

3146
public CommandItem ToCommandItem()
3247
{
3348
return new CommandItem(this)
3449
{
35-
Title = "Recent Pages",
36-
Subtitle = "Recently viewed pages",
50+
Title = _resources.GetResource("Pages_Recent_Pages_Title"),
51+
Subtitle = _resources.GetResource("Pages_Recent_Pages_SubTitle"),
52+
Icon = NotionHelper.Icon
3753
};
3854
}
3955
}

src/CmdPalNotionExtension/ListItems/ListItemFactory.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,5 +61,4 @@ internal NotionPageListItem Create(NotionPage notionPage)
6161
//contentPage.Commands = pageCommands.ToArray();
6262

6363
}
64-
6564
}

src/CmdPalNotionExtension/ListItems/NotionPageListItem.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
using Microsoft.CommandPalette.Extensions;
1+
using CmdPalNotionExtension.Notion.Models;
2+
using Microsoft.CommandPalette.Extensions;
23
using Microsoft.CommandPalette.Extensions.Toolkit;
3-
4+
using System.Linq;
45
using NotionPage = CmdPalNotionExtension.Notion.Models.Page;
56

67
namespace CmdPalNotionExtension.ListItems;
@@ -11,7 +12,16 @@ internal sealed partial class NotionPageListItem : ListItem
1112

1213
public NotionPageListItem(NotionPage notionPage, ICommand command) : base(command)
1314
{
14-
Title = "";
15+
var titleProp = notionPage.Properties?["Name"];
16+
var title = "Unknown page";
17+
18+
if (titleProp != null)
19+
{
20+
title = string.Join(" ", ((TitleProperty)titleProp).TitleDetails.SelectMany(s => s.PlainText).ToArray());
21+
}
22+
23+
24+
Title = title;
1525
//Tags = anime.Genres.Select(genre => new Tag
1626
//{
1727
// Text = genre,

src/CmdPalNotionExtension/Notion/Models/Callout.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ namespace CmdPalNotionExtension.Notion.Models;
55

66
internal sealed record Callout(
77
[property: JsonPropertyName("rich_text")] List<RichText>? RichText,
8-
[property: JsonPropertyName("icon")] Icon? Icon,
8+
[property: JsonPropertyName("icon")] ImageRef? Icon,
99
[property: JsonPropertyName("color")] string? Color
1010
);
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System.Text.Json.Serialization;
2+
3+
namespace CmdPalNotionExtension.Notion.Models;
4+
5+
internal sealed record CustomEmojiIcon(
6+
[property: JsonPropertyName("custom_emoji")] CustomEmoji? Emoji
7+
) : ImageRef;
8+
9+
internal sealed record CustomEmoji(
10+
[property: JsonPropertyName("id")] string? Id,
11+
[property: JsonPropertyName("name")] string? Name,
12+
[property: JsonPropertyName("url")] string? Url
13+
);

src/CmdPalNotionExtension/Notion/Models/EmojiIcon.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ namespace CmdPalNotionExtension.Notion.Models;
44

55
internal sealed record EmojiIcon(
66
[property: JsonPropertyName("emoji")] string? Emoji
7-
) : Icon;
7+
) : ImageRef;

src/CmdPalNotionExtension/Notion/Models/ExternalIcon.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ namespace CmdPalNotionExtension.Notion.Models;
44

55
internal sealed record ExternalIcon(
66
[property: JsonPropertyName("external")] ExternalObject? External
7-
) : Icon;
7+
) : ImageRef;

src/CmdPalNotionExtension/Notion/Models/FileIcon.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ namespace CmdPalNotionExtension.Notion.Models;
55
internal sealed record FileIcon(
66
[property: JsonPropertyName("file")]
77
FileObject? File
8-
) : Icon;
8+
) : ImageRef;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System;
2+
using System.Text.Json.Serialization;
3+
4+
namespace CmdPalNotionExtension.Notion.Models;
5+
6+
[JsonPolymorphic(TypeDiscriminatorPropertyName = "type")]
7+
[JsonDerivedType(typeof(FileObject), typeDiscriminator: "file")]
8+
[JsonDerivedType(typeof(ExternalObject), typeDiscriminator: "external")]
9+
internal sealed record FileProperty(
10+
[property: JsonPropertyName("type")] string? Type
11+
);

0 commit comments

Comments
 (0)