}
[Fact]
- public async Task DirectMessagesRecv_Test()
- {
- using (var twitterApi = new TwitterApi())
- {
- var mock = new Mock<IApiConnection>();
- mock.Setup(x =>
- x.GetAsync<TwitterDirectMessage[]>(
- new Uri("direct_messages.json", UriKind.Relative),
- new Dictionary<string, string> {
- { "full_text", "true" },
- { "include_entities", "true" },
- { "include_ext_alt_text", "true" },
- { "count", "200" },
- { "max_id", "900" },
- { "since_id", "100" },
- },
- "/direct_messages")
- )
- .ReturnsAsync(new TwitterDirectMessage[0]);
-
- twitterApi.apiConnection = mock.Object;
-
- await twitterApi.DirectMessagesRecv(count: 200, maxId: 900L, sinceId: 100L)
- .ConfigureAwait(false);
-
- mock.VerifyAll();
- }
- }
-
- [Fact]
- public async Task DirectMessagesSent_Test()
- {
- using (var twitterApi = new TwitterApi())
- {
- var mock = new Mock<IApiConnection>();
- mock.Setup(x =>
- x.GetAsync<TwitterDirectMessage[]>(
- new Uri("direct_messages/sent.json", UriKind.Relative),
- new Dictionary<string, string> {
- { "full_text", "true" },
- { "include_entities", "true" },
- { "include_ext_alt_text", "true" },
- { "count", "200" },
- { "max_id", "900" },
- { "since_id", "100" },
- },
- "/direct_messages/sent")
- )
- .ReturnsAsync(new TwitterDirectMessage[0]);
-
- twitterApi.apiConnection = mock.Object;
-
- await twitterApi.DirectMessagesSent(count: 200, maxId: 900L, sinceId: 100L)
- .ConfigureAwait(false);
-
- mock.VerifyAll();
- }
- }
-
- [Fact]
public async Task DirectMessagesEventsList_Test()
{
using (var twitterApi = new TwitterApi())
var timeline = SettingManager.Common.CountApi;
var reply = SettingManager.Common.CountApiReply;
- var dm = 20; // DMは固定値
var more = SettingManager.Common.MoreCountApi;
var startup = SettingManager.Common.FirstCountApi;
var favorite = SettingManager.Common.FavoritesCountApi;
Assert.Equal(timeline, Twitter.GetApiResultCount(MyCommon.WORKERTYPE.Timeline, false, false));
Assert.Equal(reply, Twitter.GetApiResultCount(MyCommon.WORKERTYPE.Reply, false, false));
- // DM
- Assert.Equal(dm, Twitter.GetApiResultCount(MyCommon.WORKERTYPE.DirectMessegeRcv, false, false));
- Assert.Equal(dm, Twitter.GetApiResultCount(MyCommon.WORKERTYPE.DirectMessegeSnt, false, false));
-
// その他はTimelineと同値になる
Assert.Equal(timeline, Twitter.GetApiResultCount(MyCommon.WORKERTYPE.Favorites, false, false));
Assert.Equal(timeline, Twitter.GetApiResultCount(MyCommon.WORKERTYPE.List, false, false));
return this.apiConnection.PostLazyAsync<TwitterUser>(endpoint, param);
}
- public Task<TwitterDirectMessage[]> DirectMessagesRecv(int? count = null, long? maxId = null, long? sinceId = null)
- {
- var endpoint = new Uri("direct_messages.json", UriKind.Relative);
- var param = new Dictionary<string, string>
- {
- ["full_text"] = "true",
- ["include_entities"] = "true",
- ["include_ext_alt_text"] = "true",
- };
-
- if (count != null)
- param["count"] = count.ToString();
- if (maxId != null)
- param["max_id"] = maxId.ToString();
- if (sinceId != null)
- param["since_id"] = sinceId.ToString();
-
- return this.apiConnection.GetAsync<TwitterDirectMessage[]>(endpoint, param, "/direct_messages");
- }
-
- public Task<TwitterDirectMessage[]> DirectMessagesSent(int? count = null, long? maxId = null, long? sinceId = null)
- {
- var endpoint = new Uri("direct_messages/sent.json", UriKind.Relative);
- var param = new Dictionary<string, string>
- {
- ["full_text"] = "true",
- ["include_entities"] = "true",
- ["include_ext_alt_text"] = "true",
- };
-
- if (count != null)
- param["count"] = count.ToString();
- if (maxId != null)
- param["max_id"] = maxId.ToString();
- if (sinceId != null)
- param["since_id"] = sinceId.ToString();
-
- return this.apiConnection.GetAsync<TwitterDirectMessage[]>(endpoint, param, "/direct_messages/sent");
- }
-
public Task<TwitterMessageEventList> DirectMessagesEventsList(int? count = null, string cursor = null)
{
var endpoint = new Uri("direct_messages/events/list.json", UriKind.Relative);
await tw.GetDirectMessageEvents(read, backward)
.ConfigureAwait(false);
- await tw.GetDirectMessageApi(read, MyCommon.WORKERTYPE.DirectMessegeRcv, backward)
- .ConfigureAwait(false);
- await tw.GetDirectMessageApi(read, MyCommon.WORKERTYPE.DirectMessegeSnt, backward)
- .ConfigureAwait(false);
-
TabInformations.GetInstance().DistributePosts();
progress.Report(Properties.Resources.GetTimelineWorker_RunWorkerCompletedText11);
==== Ver 2.1.2-dev(2018/xx/xx)
* CHG: 投稿時取得の設定がオフでも、投稿した内容を即時タイムラインに反映させるようにしました
* CHG: APIのレートリミットに達した場合、リセットされるまでは手動で更新してもリクエストを送らないように変更しました
+ * CHG: Directタブの更新時に旧DM APIへのアクセスを行わないよう変更しました (旧API廃止のため)
* FIX: 起動時に取得したDMが1件も表示されない場合がある不具合を修正 (thx @brianhartgen!)
* FIX: 起動直後からレートリミット規制中であった場合に解除までの時間がステータスバーに表示されない不具合を修正
//プロパティからアクセスされる共通情報
private List<string> _hashList = new List<string>();
- //max_idで古い発言を取得するために保持(lists分は個別タブで管理)
- private long minDirectmessage = long.MaxValue;
- private long minDirectmessageSent = long.MaxValue;
private string nextCursorDirectMessage = null;
private long previousStatusId = -1L;
case MyCommon.WORKERTYPE.Reply:
case MyCommon.WORKERTYPE.UserTimeline:
case MyCommon.WORKERTYPE.Favorites:
- case MyCommon.WORKERTYPE.DirectMessegeRcv:
- case MyCommon.WORKERTYPE.DirectMessegeSnt:
case MyCommon.WORKERTYPE.List: // 不明
return 200;
/// </summary>
public static int GetApiResultCount(MyCommon.WORKERTYPE type, bool more, bool startup)
{
- if (type == MyCommon.WORKERTYPE.DirectMessegeRcv ||
- type == MyCommon.WORKERTYPE.DirectMessegeSnt)
- {
- return 20;
- }
-
if (SettingManager.Common.UseAdditionalCount)
{
switch (type)
try
{
post.StatusId = message.Id;
- if (gType != MyCommon.WORKERTYPE.UserStream)
- {
- if (gType == MyCommon.WORKERTYPE.DirectMessegeRcv)
- {
- if (minDirectmessage > post.StatusId) minDirectmessage = post.StatusId;
- }
- else
- {
- if (minDirectmessageSent > post.StatusId) minDirectmessageSent = post.StatusId;
- }
- }
//二重取得回避
lock (LockObj)
}
}
- public async Task GetDirectMessageApi(bool read, MyCommon.WORKERTYPE gType, bool more)
- {
- this.CheckAccountState();
- this.CheckAccessLevel(TwitterApiAccessLevel.ReadWriteAndDirectMessage);
-
- var count = GetApiResultCount(gType, more, false);
-
- TwitterDirectMessage[] messages;
- if (gType == MyCommon.WORKERTYPE.DirectMessegeRcv)
- {
- if (more)
- {
- messages = await this.Api.DirectMessagesRecv(count, maxId: this.minDirectmessage)
- .ConfigureAwait(false);
- }
- else
- {
- messages = await this.Api.DirectMessagesRecv(count)
- .ConfigureAwait(false);
- }
- }
- else
- {
- if (more)
- {
- messages = await this.Api.DirectMessagesSent(count, maxId: this.minDirectmessageSent)
- .ConfigureAwait(false);
- }
- else
- {
- messages = await this.Api.DirectMessagesSent(count)
- .ConfigureAwait(false);
- }
- }
-
- CreateDirectMessagesFromJson(messages, gType, read);
- }
-
public async Task GetDirectMessageEvents(bool read, bool backward)
{
this.CheckAccountState();