/
SearchResult.cs
135 lines (122 loc) · 2.78 KB
/
SearchResult.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Codeplex.Data;
namespace Lunar
{
/// <summary>
/// 検索結果を表します。
/// </summary>
public class SearchResult : Status
{
User user;
StatusCache statusCache;
static readonly SortedDictionary<string, object> getUserLock = new SortedDictionary<string, object>();
/// <summary>
/// Twitter クライアントと基になる JSON オブジェクトを指定し DirectMessage の新しいインスタンスを初期化します。
/// </summary>
/// <param name="client">Twitter クライアント。</param>
/// <param name="json">基になる JSON オブジェクト。</param>
public SearchResult(TwitterClient client, DynamicJson json)
: base(client, json)
{
this.statusCache = client.StatusCache;
}
/// <summary>
/// 検索結果であるかどうかを取得します。
/// </summary>
public override bool IsSearchResult
{
get
{
return true;
}
}
/// <summary>
/// ユーザ名を取得します。
/// </summary>
public override string UserName
{
get
{
return json.from_user;
}
}
/// <summary>
/// protected であるかどうかを取得します。
/// </summary>
public override bool Protected
{
get
{
return false;
}
}
/// <summary>
/// ユーザの名前を取得します。
/// </summary>
public override string FullUserName
{
get
{
var rt = GetValue(() => this.FullUserName);
if (rt == null)
Task.Factory.StartNew(() =>
{
using (new ReduceAuthenticatedQueryScope())
using (var client = new TwitterClient(this.Account, statusCache))
try
{
SetValue(() => this.FullUserName, (user ?? (user = client.Users.Get(this.UserName))).FullName);
}
catch
{
}
}, TaskCreationOptions.LongRunning);
return rt;
}
}
/// <summary>
/// ユーザ ID を取得します。
/// </summary>
public override UserID UserID
{
get
{
var rt = GetValue(() => this.UserID);
if (rt == 0)
Task.Factory.StartNew(() =>
{
using (new ReduceAuthenticatedQueryScope())
using (var client = new TwitterClient(this.Account, statusCache))
try
{
SetValue(() => this.UserID, (user ?? (user = client.Users.Get(this.UserName))).UserID);
}
catch
{
}
}, TaskCreationOptions.LongRunning);
return rt;
}
}
/// <summary>
/// ユーザ画像を取得します。
/// </summary>
public override Uri ProfileImage
{
get
{
return new Uri(json.profile_image_url);
}
}
/// <summary>
/// お気に入りしているかどうかを取得します。
/// </summary>
public override bool Favorited
{
get;
set;
}
}
}