using var twitterApi = new TwitterApi(ApiKey.Create("fake_consumer_key"), ApiKey.Create("fake_consumer_secret"));
twitterApi.ApiConnection = mock.Object;
- await twitterApi.StatusesHomeTimeline(200, maxId: 900L, sinceId: 100L)
+ await twitterApi.StatusesHomeTimeline(200, maxId: new("900"), sinceId: new("100"))
.ConfigureAwait(false);
mock.VerifyAll();
using var twitterApi = new TwitterApi(ApiKey.Create("fake_consumer_key"), ApiKey.Create("fake_consumer_secret"));
twitterApi.ApiConnection = mock.Object;
- await twitterApi.StatusesMentionsTimeline(200, maxId: 900L, sinceId: 100L)
+ await twitterApi.StatusesMentionsTimeline(200, maxId: new("900"), sinceId: new("100"))
.ConfigureAwait(false);
mock.VerifyAll();
using var twitterApi = new TwitterApi(ApiKey.Create("fake_consumer_key"), ApiKey.Create("fake_consumer_secret"));
twitterApi.ApiConnection = mock.Object;
- await twitterApi.StatusesUserTimeline("twitterapi", count: 200, maxId: 900L, sinceId: 100L)
+ await twitterApi.StatusesUserTimeline("twitterapi", count: 200, maxId: new("900"), sinceId: new("100"))
.ConfigureAwait(false);
mock.VerifyAll();
using var twitterApi = new TwitterApi(ApiKey.Create("fake_consumer_key"), ApiKey.Create("fake_consumer_secret"));
twitterApi.ApiConnection = mock.Object;
- await twitterApi.SearchTweets("from:twitterapi", "en", count: 200, maxId: 900L, sinceId: 100L)
+ await twitterApi.SearchTweets("from:twitterapi", "en", count: 200, maxId: new("900"), sinceId: new("100"))
.ConfigureAwait(false);
mock.VerifyAll();
using var twitterApi = new TwitterApi(ApiKey.Create("fake_consumer_key"), ApiKey.Create("fake_consumer_secret"));
twitterApi.ApiConnection = mock.Object;
- await twitterApi.ListsStatuses(12345L, count: 200, maxId: 900L, sinceId: 100L, includeRTs: true)
+ await twitterApi.ListsStatuses(12345L, count: 200, maxId: new("900"), sinceId: new("100"), includeRTs: true)
.ConfigureAwait(false);
mock.VerifyAll();
var request = new GetTimelineRequest(userId: 100L)
{
MaxResults = 200,
- SinceId = "100",
- UntilId = "900",
+ SinceId = new("100"),
+ UntilId = new("900"),
};
await request.Send(mock.Object).ConfigureAwait(false);
this.CurrentScreenName = screenName;
}
- public Task<TwitterStatus[]> StatusesHomeTimeline(int? count = null, long? maxId = null, long? sinceId = null)
+ public Task<TwitterStatus[]> StatusesHomeTimeline(int? count = null, TwitterStatusId? maxId = null, TwitterStatusId? sinceId = null)
{
var endpoint = new Uri("statuses/home_timeline.json", UriKind.Relative);
var param = new Dictionary<string, string>
if (count != null)
param["count"] = count.ToString();
if (maxId != null)
- param["max_id"] = maxId.ToString();
+ param["max_id"] = maxId.Id;
if (sinceId != null)
- param["since_id"] = sinceId.ToString();
+ param["since_id"] = sinceId.Id;
return this.Connection.GetAsync<TwitterStatus[]>(endpoint, param, "/statuses/home_timeline");
}
- public Task<TwitterStatus[]> StatusesMentionsTimeline(int? count = null, long? maxId = null, long? sinceId = null)
+ public Task<TwitterStatus[]> StatusesMentionsTimeline(int? count = null, TwitterStatusId? maxId = null, TwitterStatusId? sinceId = null)
{
var endpoint = new Uri("statuses/mentions_timeline.json", UriKind.Relative);
var param = new Dictionary<string, string>
if (count != null)
param["count"] = count.ToString();
if (maxId != null)
- param["max_id"] = maxId.ToString();
+ param["max_id"] = maxId.Id;
if (sinceId != null)
- param["since_id"] = sinceId.ToString();
+ param["since_id"] = sinceId.Id;
return this.Connection.GetAsync<TwitterStatus[]>(endpoint, param, "/statuses/mentions_timeline");
}
- public Task<TwitterStatus[]> StatusesUserTimeline(string screenName, int? count = null, long? maxId = null, long? sinceId = null)
+ public Task<TwitterStatus[]> StatusesUserTimeline(string screenName, int? count = null, TwitterStatusId? maxId = null, TwitterStatusId? sinceId = null)
{
var endpoint = new Uri("statuses/user_timeline.json", UriKind.Relative);
var param = new Dictionary<string, string>
if (count != null)
param["count"] = count.ToString();
if (maxId != null)
- param["max_id"] = maxId.ToString();
+ param["max_id"] = maxId.Id;
if (sinceId != null)
- param["since_id"] = sinceId.ToString();
+ param["since_id"] = sinceId.Id;
return this.Connection.GetAsync<TwitterStatus[]>(endpoint, param, "/statuses/user_timeline");
}
return this.Connection.PostLazyAsync<TwitterStatus>(endpoint, param);
}
- public Task<TwitterSearchResult> SearchTweets(string query, string? lang = null, int? count = null, long? maxId = null, long? sinceId = null)
+ public Task<TwitterSearchResult> SearchTweets(string query, string? lang = null, int? count = null, TwitterStatusId? maxId = null, TwitterStatusId? sinceId = null)
{
var endpoint = new Uri("search/tweets.json", UriKind.Relative);
var param = new Dictionary<string, string>
if (count != null)
param["count"] = count.ToString();
if (maxId != null)
- param["max_id"] = maxId.ToString();
+ param["max_id"] = maxId.Id;
if (sinceId != null)
- param["since_id"] = sinceId.ToString();
+ param["since_id"] = sinceId.Id;
return this.Connection.GetAsync<TwitterSearchResult>(endpoint, param, "/search/tweets");
}
return this.Connection.PostLazyAsync<TwitterList>(endpoint, param);
}
- public Task<TwitterStatus[]> ListsStatuses(long listId, int? count = null, long? maxId = null, long? sinceId = null, bool? includeRTs = null)
+ public Task<TwitterStatus[]> ListsStatuses(long listId, int? count = null, TwitterStatusId? maxId = null, TwitterStatusId? sinceId = null, bool? includeRTs = null)
{
var endpoint = new Uri("lists/statuses.json", UriKind.Relative);
var param = new Dictionary<string, string>
if (count != null)
param["count"] = count.ToString();
if (maxId != null)
- param["max_id"] = maxId.ToString();
+ param["max_id"] = maxId.Id;
if (sinceId != null)
- param["since_id"] = sinceId.ToString();
+ param["since_id"] = sinceId.Id;
if (includeRTs != null)
param["include_rts"] = includeRTs.Value ? "true" : "false";
using System.Threading.Tasks;
using OpenTween.Api.DataModel;
using OpenTween.Connection;
+using OpenTween.Models;
namespace OpenTween.Api.TwitterV2
{
public int? MaxResults { get; set; }
- public string? UntilId { get; set; }
+ public TwitterStatusId? UntilId { get; set; }
- public string? SinceId { get; set; }
+ public TwitterStatusId? SinceId { get; set; }
public GetTimelineRequest(long userId)
=> this.UserId = userId;
param["max_results"] = this.MaxResults.ToString();
if (this.UntilId != null)
- param["until_id"] = this.UntilId;
+ param["until_id"] = this.UntilId.Id;
if (this.SinceId != null)
- param["since_id"] = this.SinceId;
+ param["since_id"] = this.SinceId.Id;
return param;
}
public override MyCommon.TabUsageType TabType
=> MyCommon.TabUsageType.Home;
- public long OldestId { get; set; } = long.MaxValue;
+ public PostId? OldestId { get; set; }
public int TweetsPerHour => this.tweetsPerHour;
public ListElement ListInfo { get; set; }
- public long OldestId { get; set; } = long.MaxValue;
+ public PostId? OldestId { get; set; }
public string? CursorBottom { get; set; }
public override MyCommon.TabUsageType TabType
=> MyCommon.TabUsageType.Mentions;
- public long OldestId { get; set; } = long.MaxValue;
+ public PostId? OldestId { get; set; }
public MentionsTabModel()
: this(MyCommon.DEFAULTTAB.REPLY)
public override MyCommon.TabUsageType TabType
=> MyCommon.TabUsageType.PublicSearch;
- public long OldestId { get; set; } = long.MaxValue;
+ public PostId? OldestId { get; set; }
- public long SinceId { get; set; }
+ public PostId? SinceId { get; set; }
public string? CursorBottom { get; set; }
/// </summary>
public void ResetFetchIds()
{
- this.SinceId = 0L;
- this.OldestId = long.MaxValue;
+ this.SinceId = null;
+ this.OldestId = null;
}
}
}
public string ScreenName { get; }
- public long OldestId { get; set; } = long.MaxValue;
+ public PostId? OldestId { get; set; }
public UserTimelineTabModel(string tabName, string screenName)
: base(tabName)
var request = new GetTimelineRequest(this.UserId)
{
MaxResults = count,
- UntilId = more ? tab.OldestId.ToString() : null,
+ UntilId = more ? tab.OldestId as TwitterStatusId : null,
};
var response = await request.Send(this.Api.Connection)
}
else
{
- var maxId = more ? tab.OldestId : (long?)null;
+ var maxId = more ? tab.OldestId : null;
- statuses = await this.Api.StatusesHomeTimeline(count, maxId)
+ statuses = await this.Api.StatusesHomeTimeline(count, maxId as TwitterStatusId)
.ConfigureAwait(false);
}
var minimumId = this.CreatePostsFromJson(statuses, MyCommon.WORKERTYPE.Timeline, tab, read);
if (minimumId != null)
- tab.OldestId = minimumId.Value;
+ tab.OldestId = minimumId;
}
public async Task GetMentionsTimelineApi(bool read, MentionsTabModel tab, bool more, bool startup)
TwitterStatus[] statuses;
if (more)
{
- statuses = await this.Api.StatusesMentionsTimeline(count, maxId: tab.OldestId)
+ statuses = await this.Api.StatusesMentionsTimeline(count, maxId: tab.OldestId as TwitterStatusId)
.ConfigureAwait(false);
}
else
var minimumId = this.CreatePostsFromJson(statuses, MyCommon.WORKERTYPE.Reply, tab, read);
if (minimumId != null)
- tab.OldestId = minimumId.Value;
+ tab.OldestId = minimumId;
}
public async Task GetUserTimelineApi(bool read, string userName, UserTimelineTabModel tab, bool more)
{
if (more)
{
- statuses = await this.Api.StatusesUserTimeline(userName, count, maxId: tab.OldestId)
+ statuses = await this.Api.StatusesUserTimeline(userName, count, maxId: tab.OldestId as TwitterStatusId)
.ConfigureAwait(false);
}
else
var minimumId = this.CreatePostsFromJson(statuses, MyCommon.WORKERTYPE.UserTimeline, tab, read);
if (minimumId != null)
- tab.OldestId = minimumId.Value;
+ tab.OldestId = minimumId;
}
public async Task<PostClass> GetStatusApi(bool read, TwitterStatusId id)
private PostClass CreatePostsFromStatusData(TwitterStatus status, bool favTweet)
=> this.postFactory.CreateFromStatus(status, this.UserId, this.followerId, favTweet);
- private long? CreatePostsFromJson(TwitterStatus[] items, MyCommon.WORKERTYPE gType, TabModel? tab, bool read)
+ private PostId? CreatePostsFromJson(TwitterStatus[] items, MyCommon.WORKERTYPE gType, TabModel? tab, bool read)
{
- long? minimumId = null;
+ PostId? minimumId = null;
- foreach (var status in items)
+ var posts = items.Select(x => this.CreatePostsFromStatusData(x)).ToArray();
+
+ foreach (var post in posts)
{
- if (minimumId == null || minimumId.Value > status.Id)
- minimumId = status.Id;
+ if (minimumId == null || minimumId > post.StatusId)
+ minimumId = post.StatusId;
// 二重取得回避
lock (this.lockObj)
{
- var id = new TwitterStatusId(status.IdStr);
+ var id = post.StatusId;
if (tab == null)
{
if (TabInformations.GetInstance().ContainsKey(id)) continue;
// RT禁止ユーザーによるもの
if (gType != MyCommon.WORKERTYPE.UserTimeline &&
- status.RetweetedStatus != null && this.noRTId.Contains(status.User.Id)) continue;
-
- var post = this.CreatePostsFromStatusData(status);
+ post.RetweetedByUserId != null && this.noRTId.Contains(post.RetweetedByUserId.Value)) continue;
post.IsRead = read;
if (post.IsMe && !read && this.ReadOwnPost) post.IsRead = true;
return minimumId;
}
- private long? CreatePostsFromSearchJson(TwitterStatus[] statuses, PublicSearchTabModel tab, bool read, bool more)
+ private PostId? CreatePostsFromSearchJson(TwitterStatus[] statuses, PublicSearchTabModel tab, bool read, bool more)
{
- long? minimumId = null;
+ PostId? minimumId = null;
+
+ var posts = statuses.Select(x => this.CreatePostsFromStatusData(x)).ToArray();
- foreach (var status in statuses)
+ foreach (var post in posts)
{
- if (minimumId == null || minimumId.Value > status.Id)
- minimumId = status.Id;
+ if (minimumId == null || minimumId > post.StatusId)
+ minimumId = post.StatusId;
+
+ if (!more && (tab.SinceId == null || post.StatusId > tab.SinceId))
+ tab.SinceId = post.StatusId;
- if (!more && status.Id > tab.SinceId) tab.SinceId = status.Id;
// 二重取得回避
lock (this.lockObj)
{
- if (tab.Contains(new TwitterStatusId(status.IdStr)))
+ if (tab.Contains(post.StatusId))
continue;
}
- var post = this.CreatePostsFromStatusData(status);
-
post.IsRead = read;
if ((post.IsMe && !read) && this.ReadOwnPost) post.IsRead = true;
}
else if (more)
{
- statuses = await this.Api.ListsStatuses(tab.ListInfo.Id, count, maxId: tab.OldestId, includeRTs: SettingManager.Instance.Common.IsListsIncludeRts)
+ statuses = await this.Api.ListsStatuses(tab.ListInfo.Id, count, maxId: tab.OldestId as TwitterStatusId, includeRTs: SettingManager.Instance.Common.IsListsIncludeRts)
.ConfigureAwait(false);
}
else
var minimumId = this.CreatePostsFromJson(statuses, MyCommon.WORKERTYPE.List, tab, read);
if (minimumId != null)
- tab.OldestId = minimumId.Value;
+ tab.OldestId = minimumId;
}
/// <summary>
}
else
{
- long? maxId = null;
- long? sinceId = null;
+ TwitterStatusId? maxId = null;
+ TwitterStatusId? sinceId = null;
if (more)
{
- maxId = tab.OldestId - 1;
+ maxId = tab.OldestId as TwitterStatusId;
}
else
{
- sinceId = tab.SinceId;
+ sinceId = tab.SinceId as TwitterStatusId;
}
var searchResult = await this.Api.SearchTweets(tab.SearchWords, tab.SearchLang, count, maxId, sinceId)
var minimumId = this.CreatePostsFromSearchJson(statuses, tab, read, more);
if (minimumId != null)
- tab.OldestId = minimumId.Value;
+ tab.OldestId = minimumId;
}
public async Task GetDirectMessageEvents(bool read, DirectMessagesTabModel dmTab, bool backward)