Files
RedditRandomNumberGiveawayH…/RedditSharp/Wiki.cs
Gardient 9583c1afb2 First actual commit
added sources to repository
2015-08-28 21:49:50 +03:00

168 lines
6.2 KiB
C#

using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Linq;
using RedditSharp.Things;
namespace RedditSharp
{
using System;
public class Wiki
{
private Reddit Reddit { get; set; }
private Subreddit Subreddit { get; set; }
private IWebAgent WebAgent { get; set; }
private const string GetWikiPageUrl = "/r/{0}/wiki/{1}.json?v={2}";
private const string GetWikiPagesUrl = "/r/{0}/wiki/pages.json";
private const string WikiPageEditUrl = "/r/{0}/api/wiki/edit";
private const string HideWikiPageUrl = "/r/{0}/api/wiki/hide";
private const string RevertWikiPageUrl = "/r/{0}/api/wiki/revert";
private const string WikiPageAllowEditorAddUrl = "/r/{0}/api/wiki/alloweditor/add";
private const string WikiPageAllowEditorDelUrl = "/r/{0}/api/wiki/alloweditor/del";
private const string WikiPageSettingsUrl = "/r/{0}/wiki/settings/{1}.json";
private const string WikiRevisionsUrl = "/r/{0}/wiki/revisions.json";
private const string WikiPageRevisionsUrl = "/r/{0}/wiki/revisions/{1}.json";
private const string WikiPageDiscussionsUrl = "/r/{0}/wiki/discussions/{1}.json";
public IEnumerable<string> PageNames
{
get
{
var request = WebAgent.CreateGet(string.Format(GetWikiPagesUrl, Subreddit.Name));
var response = request.GetResponse();
string json = WebAgent.GetResponseString(response.GetResponseStream());
return JObject.Parse(json)["data"].Values<string>();
}
}
public Listing<WikiPageRevision> Revisions
{
get
{
return new Listing<WikiPageRevision>(Reddit, string.Format(WikiRevisionsUrl, Subreddit.Name), WebAgent);
}
}
protected internal Wiki(Reddit reddit, Subreddit subreddit, IWebAgent webAgent)
{
Reddit = reddit;
Subreddit = subreddit;
WebAgent = webAgent;
}
public WikiPage GetPage(string page, string version = null)
{
var request = WebAgent.CreateGet(string.Format(GetWikiPageUrl, Subreddit.Name, page, version));
var response = request.GetResponse();
var json = JObject.Parse(WebAgent.GetResponseString(response.GetResponseStream()));
var result = new WikiPage(Reddit, json["data"], WebAgent);
return result;
}
#region Settings
public WikiPageSettings GetPageSettings(string name)
{
var request = WebAgent.CreateGet(string.Format(WikiPageSettingsUrl, Subreddit.Name, name));
var response = request.GetResponse();
var json = JObject.Parse(WebAgent.GetResponseString(response.GetResponseStream()));
var result = new WikiPageSettings(Reddit, json["data"], WebAgent);
return result;
}
public void SetPageSettings(string name, WikiPageSettings settings)
{
var request = WebAgent.CreatePost(string.Format(WikiPageSettingsUrl, Subreddit.Name, name));
WebAgent.WritePostBody(request.GetRequestStream(), new
{
page = name,
permlevel = settings.PermLevel,
listed = settings.Listed,
uh = Reddit.User.Modhash
});
var response = request.GetResponse();
}
#endregion
#region Revisions
public Listing<WikiPageRevision> GetPageRevisions(string page)
{
return new Listing<WikiPageRevision>(Reddit, string.Format(WikiPageRevisionsUrl, Subreddit.Name, page), WebAgent);
}
#endregion
#region Discussions
public Listing<Post> GetPageDiscussions(string page)
{
return new Listing<Post>(Reddit, string.Format(WikiPageDiscussionsUrl, Subreddit.Name, page), WebAgent);
}
#endregion
public void EditPage(string page, string content, string previous = null, string reason = null)
{
var request = WebAgent.CreatePost(string.Format(WikiPageEditUrl, Subreddit.Name));
WebAgent.WritePostBody(request.GetRequestStream(), new
{
content = content,
previous = previous,
reason = reason,
page = page,
uh = Reddit.User.Modhash
});
var response = request.GetResponse();
}
public void HidePage(string page, string revision)
{
var request = WebAgent.CreatePost(string.Format(HideWikiPageUrl, Subreddit.Name));
WebAgent.WritePostBody(request.GetRequestStream(), new
{
page = page,
revision = revision,
uh = Reddit.User.Modhash
});
var response = request.GetResponse();
}
public void RevertPage(string page, string revision)
{
var request = WebAgent.CreatePost(string.Format(RevertWikiPageUrl, Subreddit.Name));
WebAgent.WritePostBody(request.GetRequestStream(), new
{
page = page,
revision = revision,
uh = Reddit.User.Modhash
});
var response = request.GetResponse();
}
public void SetPageEditor(string page, string username, bool allow)
{
var request = WebAgent.CreatePost(string.Format(allow ? WikiPageAllowEditorAddUrl : WikiPageAllowEditorDelUrl, Subreddit.Name));
WebAgent.WritePostBody(request.GetRequestStream(), new
{
page = page,
username = username,
uh = Reddit.User.Modhash
});
var response = request.GetResponse();
}
#region Obsolete Getter Methods
[Obsolete("Use PageNames property instead")]
public IEnumerable<string> GetPageNames()
{
return PageNames;
}
[Obsolete("Use Revisions property instead")]
public Listing<WikiPageRevision> GetRevisions()
{
return Revisions;
}
#endregion Obsolete Getter Methods
}
}