Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add MyWatchlistGenerator #102

Merged
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions WikiClientLibrary/Generators/MyWatchlistGenerator.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
using System.Collections.Generic;
using WikiClientLibrary.Generators.Primitive;
using WikiClientLibrary.Infrastructures;
using WikiClientLibrary.Sites;

namespace WikiClientLibrary.Generators
{
/// <summary>
/// Get all pages on the current user's watchlist.
/// </summary>
public class MyWatchlistGenerator : WikiPageGenerator
{
public MyWatchlistGenerator(WikiSite site) : base(site)
{
}

/// <summary>
/// Only list pages in the given namespaces.
/// </summary>
public IEnumerable<int>? NamespaceIds { get; set; }

/// <summary>
/// Adds timestamp of when the user was last notified about the edit.
/// </summary>
public bool ShowChangedTime { get; set; }

/// <summary>
/// Only show pages that have not been changed.
/// </summary>
public PropertyFilterOption NotChangedPagesFilter { get; set; }

/// <summary>
/// Gets/sets a value that indicates whether the links should be listed in
/// the descending order. (MediaWiki 1.19+)
/// </summary>
public bool OrderDescending { get; set; }

/// <summary>
/// Title (with namespace prefix) to begin enumerating from.
/// </summary>
public string? FromTitle { get; set; }

/// <summary>
/// Title (with namespace prefix) to stop enumerating at.
/// </summary>
public string? ToTitle { get; set; }

public override IEnumerable<KeyValuePair<string, object?>> EnumListParameters()
{
return new Dictionary<string, object?>
{
{"wrnamespace", NamespaceIds == null ? null : MediaWikiHelper.JoinValues(NamespaceIds)},
{"wrlimit", PaginationSize},
{"wrprop", ShowChangedTime ? "changed" : null},
Copy link
Owner

@CXuesong CXuesong Aug 28, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. I think you can always enable ShowChangedTime (and remove the ShowChangedTime property), if you need it. I guess it does not increase much sever cost.
  2. Since there is custom field (ChangedTime), you may want to set up a wiki list item type (like GeoSearchResultItem) and override the WikiPageGenerator<TItem>.ItemFromJson method, so that WikiPageGenerator<TItem>.EnumItemsAsync can enumerate something containing a PageStub and a ChangedTime, rather than PageStub only. You can refer to GeoSearchGenerator as an example. (Or you can just leave this work to me 😂)

Copy link
Contributor Author

@ashotjanibekyan ashotjanibekyan Aug 28, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@CXuesong. {{Done}} :)

I don't like that I hardcoded the value in FindQueryResponseItemsRoot but I couldn't find other lists that give results in a different format (I tested on Armenian Wikipedia).

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

I don't like that I hardcoded the value in FindQueryResponseItemsRoot but I couldn't find other lists that give results in a different format (I tested on Armenian Wikipedia).

I guess this is the first time I discover a query result without query JSON root node. Yeah probably we can go without any generic root-finding-function for now, and see what happens.

{"wrshow", NotChangedPagesFilter.ToString("!changed", "changed", null)},
{"wrdir", OrderDescending ? "descending" : "ascending"},
{"wrfromtitle", FromTitle},
{"wrtotitle", ToTitle},
};
}

public override string ListName => "watchlistraw";
}
}
Loading