1using System.Globalization;
4using System.Text.Json.Nodes;
17 provider.m_loginProcessData =
null;
22 provider.m_loginProcessData =
null;
27 public const string m_appKey =
"1unnzwkb8igx70k";
29 public const string m_redirectUri =
"com.candyrufusgames.survivalcraft2://redirect";
30 public const string fName =
"DropboxExternalContentProvider";
67 progress.Cancelled += delegate {
71 loginProcessData.
Fail(
this,
null);
77 catch (Exception obj) {
86 public void List(
string path,
CancellableProgress progress, Action<ExternalContentEntry> success, Action<Exception> failure) {
89 Dictionary<string, string> dictionary =
new() {
90 {
"Authorization", $
"Bearer {SettingsManager.DropboxAccessToken}" }, {
"Content-Type",
"application/json" }
92 JsonObject jsonObject =
new() {
94 {
"recursive",
false },
95 {
"include_media_info",
false },
96 {
"include_deleted",
false },
97 {
"include_has_explicit_shared_members",
false }
99 MemoryStream data =
new(Encoding.UTF8.GetBytes(jsonObject.ToJsonString()));
101 "https://api.dropboxapi.com/2/files/list_folder",
106 delegate(
byte[] result) {
110 catch (Exception obj2) {
114 delegate(Exception error) { failure(error); }
117 catch (Exception obj) {
125 JsonObject jsonObject =
new() { {
"path",
NormalizePath(path) } };
126 Dictionary<string, string> dictionary =
new() {
127 {
"Authorization", $
"Bearer {SettingsManager.DropboxAccessToken}" }, {
"Dropbox-API-Arg", jsonObject.ToJsonString() }
130 "https://content.dropboxapi.com/2/files/download",
134 delegate(
byte[] result) { success(
new MemoryStream(result)); },
135 delegate(Exception error) { failure(error); }
138 catch (Exception obj) {
146 JsonObject jsonObject =
new() { {
"path",
NormalizePath(path) }, {
"mode",
"add" }, {
"autorename",
true }, {
"mute",
false } };
147 Dictionary<string, string> dictionary =
new() {
148 {
"Authorization", $
"Bearer {SettingsManager.DropboxAccessToken}" },
149 {
"Content-Type",
"application/octet-stream" },
150 {
"Dropbox-API-Arg", jsonObject.ToJsonString() }
153 "https://content.dropboxapi.com/2/files/upload",
158 delegate { success(
null); },
159 delegate(Exception error) { failure(error); }
162 catch (Exception obj) {
170 Dictionary<string, string> dictionary =
new() {
171 {
"Authorization", $
"Bearer {SettingsManager.DropboxAccessToken}" }, {
"Content-Type",
"application/json" }
173 JsonObject jsonObject =
new() { {
"path",
NormalizePath(path) }, {
"short_url",
false } };
174 MemoryStream data =
new(Encoding.UTF8.GetBytes(jsonObject.ToJsonString()));
176 "https://api.dropboxapi.com/2/sharing/create_shared_link",
181 delegate(
byte[] result) {
185 catch (Exception obj2) {
189 delegate(Exception error) { failure(error); }
192 catch (Exception obj) {
199 m_loginProcessData.IsTokenFlow =
true;
200 Dictionary<string, string> dictionary =
new() {
201 {
"response_type",
"token" },
207 catch (Exception error) {
225 "https://api.dropboxapi.com/oauth2/token",
226 new Dictionary<string, string> {
227 {
"code", s.Trim() },
230 {
"grant_type",
"authorization_code" }
235 delegate(
byte[] result) {
237 .RootElement.GetProperty(
"access_token")
239 loginProcessData.
Succeed(
this);
241 delegate(Exception error) { loginProcessData.
Fail(
this, error); }
244 catch (Exception error2) {
245 loginProcessData.
Fail(
this, error2);
249 loginProcessData.
Fail(
this,
null);
266 ||
string.IsNullOrEmpty(uri.Fragment)) {
270 if (!dictionary.ContainsKey(
"access_token")) {
271 if (dictionary.TryGetValue(
"error", out
string value)) {
272 throw new Exception(value);
277 loginProcessData.
Succeed(
this);
283 catch (Exception error) {
284 loginProcessData.
Fail(
this, error);
297 if (jsonElement.TryGetProperty(
"entries", out JsonElement entries)) {
298 foreach (JsonProperty item
in entries.EnumerateObject()) {
299 ExternalContentEntry externalContentEntry2 =
new() { Path = item.Value.GetProperty(
"path_display").GetString() };
300 externalContentEntry2.Type = item.Value.GetProperty(
".tag").GetString() ==
"folder"
304 externalContentEntry2.Time = item.Value.TryGetProperty(
"server_modified", out JsonElement server_modified)
305 ? DateTime.Parse(server_modified.GetString(), CultureInfo.InvariantCulture)
306 :
new DateTime(2000, 1, 1);
307 externalContentEntry2.Size = item.Value.TryGetProperty(
"size", out JsonElement size) ? size.GetInt64() : 0;
309 externalContentEntry.
ChildEntries.Add(externalContentEntry2);
312 return externalContentEntry;
316 if (jsonElement.TryGetProperty(
"url", out JsonElement url)) {
317 return $
"{url.GetString().Replace("www.dropbox.
", "dl.dropbox.
").Replace("?dl=0
", "")}?dl=1";
static string GetExtension(string path)
static void ShowDialog(ContainerWidget parentWidget, Dialog dialog)
Action< Exception > Failure
CancellableProgress Progress
void Succeed(DropboxExternalContentProvider provider)
void Fail(DropboxExternalContentProvider provider, Exception error)
void Upload(string path, Stream stream, CancellableProgress progress, Action< string > success, Action< Exception > failure)
static string JsonElementToLinkAddress(JsonElement jsonElement)
const string m_redirectUri
DropboxExternalContentProvider()
void Link(string path, CancellableProgress progress, Action< string > success, Action< Exception > failure)
LoginProcessData m_loginProcessData
void Login(CancellableProgress progress, Action success, Action< Exception > failure)
void LoginLaunchBrowser()
static ExternalContentEntry JsonElementToEntry(JsonElement jsonElement)
void List(string path, CancellableProgress progress, Action< ExternalContentEntry > success, Action< Exception > failure)
void Download(string path, CancellableProgress progress, Action< Stream > success, Action< Exception > failure)
static string NormalizePath(string path)
List< ExternalContentEntry > ChildEntries
static ExternalContentType ExtensionToType(string extension)
static readonly JsonDocumentOptions DefaultJsonOptions
static string Get(string className, int key)
获取在当前语言类名键对应的字符串
static Action< Uri > HandleUri
static string DropboxAccessToken
static void LaunchBrowser(string url)
static void Post(string address, Dictionary< string, string > parameters, Dictionary< string, string > headers, Stream data, CancellableProgress progress, Action< byte[]> success, Action< Exception > failure)
static bool IsInternetConnectionAvailable()
static void Get(string address, Dictionary< string, string > parameters, Dictionary< string, string > headers, CancellableProgress progress, Action< byte[]> success, Action< Exception > failure)
static Dictionary< string, string > UrlParametersFromString(string s)