10
10
11
11
namespace SubDBSharp
12
12
{
13
- public class SubDBApi
13
+ public class SubDBApi : IDisposable
14
14
{
15
15
public static readonly Uri SubDBApiUrl = new Uri ( "http://api.thesubdb.com/" , UriKind . Absolute ) ;
16
16
private readonly HttpClient _httpClient ;
@@ -39,7 +39,7 @@ public SubDBApi(ProductHeaderValue productInformation, Uri baseAddress)
39
39
{
40
40
AutomaticDecompression = DecompressionMethods . GZip | DecompressionMethods . Deflate
41
41
} ;
42
- _httpClient = new HttpClient ( _httpClientHandler ) ;
42
+ _httpClient = new HttpClient ( _httpClientHandler , true ) ;
43
43
44
44
// we can't go with this logic because the User-Agent must contain implementor url (information)
45
45
//_httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(productInformation));
@@ -50,10 +50,8 @@ public SubDBApi(ProductHeaderValue productInformation, Uri baseAddress)
50
50
public Task < Response > GetAvailableLanguagesAsync ( )
51
51
{
52
52
var uriBuilder = new UriBuilder ( BaseAddress ) { Query = "action=languages" } ;
53
- using ( HttpRequestMessage requestMessage = BuildRequestMessage ( uriBuilder . Uri , HttpMethod . Get , null ) )
54
- {
55
- return SendDataAsync ( requestMessage ) ;
56
- }
53
+ Request request = BuildRequest ( uriBuilder . Uri , HttpMethod . Get , null ) ;
54
+ return SendDataAsync ( request ) ;
57
55
}
58
56
59
57
/// <summary>
@@ -65,10 +63,8 @@ public Task<Response> GetAvailableLanguagesAsync()
65
63
public Task < Response > SearchSubtitle ( string hash , bool getVersions = false )
66
64
{
67
65
var fullUrl = SubDBApiUrl . ApplySearchSubtitleParameters ( hash , getVersions ) ;
68
- using ( HttpRequestMessage requestMessage = BuildRequestMessage ( fullUrl , HttpMethod . Get , null ) )
69
- {
70
- return SendDataAsync ( requestMessage ) ;
71
- }
66
+ Request request = BuildRequest ( fullUrl , HttpMethod . Get , null ) ;
67
+ return SendDataAsync ( request ) ;
72
68
}
73
69
74
70
/// <summary>
@@ -81,10 +77,8 @@ public Task<Response> SearchSubtitle(string hash, bool getVersions = false)
81
77
public Task < Response > DownloadSubtitle ( string hash , params string [ ] languages )
82
78
{
83
79
var fullUrl = SubDBApiUrl . ApplyDownloadSubtitleParameters ( hash , languages ) ;
84
- using ( var requestMessage = BuildRequestMessage ( fullUrl , HttpMethod . Get , null ) )
85
- {
86
- return SendDataAsync ( requestMessage ) ;
87
- }
80
+ Request request = BuildRequest ( fullUrl , HttpMethod . Get , null ) ;
81
+ return SendDataAsync ( request ) ;
88
82
}
89
83
90
84
/// <summary>
@@ -95,29 +89,27 @@ public Task<Response> DownloadSubtitle(string hash, params string[] languages)
95
89
public Task < Response > UploadSubtitle ( string subtitle , string movie )
96
90
{
97
91
var uriBuilder = new UriBuilder ( BaseAddress ) { Query = "action=upload" } ;
98
- using ( HttpContent httpContent = CreateFormContent ( subtitle , movie ) )
99
- using ( HttpRequestMessage httpRequestMessage = BuildRequestMessage ( uriBuilder . Uri , HttpMethod . Post , httpContent ) )
100
- {
101
- return SendDataAsync ( httpRequestMessage ) ;
102
- }
92
+ Request request = BuildRequest ( uriBuilder . Uri , HttpMethod . Post , CreateFormContent ( subtitle , movie ) ) ;
93
+ return SendDataAsync ( request ) ;
103
94
}
104
95
105
- // ALL THE METHOD MUST GO THROUGH THIS!!!
106
- private async Task < Response > SendDataAsync ( HttpRequestMessage requestMessage )
96
+ // ALL THE REQUEST MUST TO THROUGH THIS METHOD !!!
97
+ private async Task < Response > SendDataAsync ( Request request )
107
98
{
99
+ using ( HttpRequestMessage requestMessage = BuildRequestMessage ( request ) )
108
100
using ( HttpResponseMessage responseMessage = await _httpClient . SendAsync ( requestMessage , HttpCompletionOption . ResponseContentRead ) . ConfigureAwait ( false ) )
109
101
{
110
102
return await BuildResponse ( responseMessage ) ;
111
103
}
112
104
}
113
105
114
- protected virtual HttpRequestMessage BuildRequestMessage ( Uri endPoint , HttpMethod httpMethod , HttpContent content )
106
+ protected virtual HttpRequestMessage BuildRequestMessage ( Request request )
115
107
{
116
108
return new HttpRequestMessage ( )
117
109
{
118
- RequestUri = endPoint ,
119
- Method = httpMethod ,
120
- Content = content
110
+ RequestUri = request . EndPoint ,
111
+ Method = request . Method ,
112
+ Content = request . Body
121
113
} ;
122
114
}
123
115
@@ -137,9 +129,15 @@ protected virtual async Task<Response> BuildResponse(HttpResponseMessage respons
137
129
responseMessage . Headers . ToDictionary ( h => h . Key , h => h . Value . First ( ) ) ) ;
138
130
}
139
131
132
+ protected virtual Request BuildRequest ( Uri endPoint , HttpMethod method , HttpContent body )
133
+ {
134
+ return new Request ( endPoint , method , body ) ;
135
+ }
136
+
140
137
private static HttpContent CreateFormContent ( string subtitle , string movie )
141
138
{
142
139
const string dispositionType = "form-data" ;
140
+
143
141
var content = new MultipartFormDataContent ( "xYzZY" ) ;
144
142
145
143
// hash info
@@ -166,5 +164,12 @@ private static HttpContent CreateFormContent(string subtitle, string movie)
166
164
167
165
return content ;
168
166
}
167
+
168
+ public void Dispose ( )
169
+ {
170
+ // will dispose _handler aswell (mentioned in contructor)
171
+ _httpClient . Dispose ( ) ;
172
+ //_httpClientHandler.Dispose();
173
+ }
169
174
}
170
175
}
0 commit comments