Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions Appwrite/Appwrite.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net462</TargetFrameworks>
<PackageId>Appwrite</PackageId>
<Version>8.2.0</Version>
<Version>9.0.0</Version>
<Authors>Appwrite Team</Authors>
<Company>Appwrite Team</Company>
<Description>
Expand All @@ -20,7 +20,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="System.Text.Json" Version="9.0.19" />
<PackageReference Include="System.Text.Json" Version="9.0.20" />
<PackageReference Include="System.Net.Http" Version="4.3.4" />
<None Include="..\icon.png" Pack="true" PackagePath="$(PackageIcon)"/>
<None Include="..\README.md" Pack="true" PackagePath="$(PackageReadmeFile)"/>
Expand Down
72 changes: 43 additions & 29 deletions Appwrite/Client.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,12 @@ public Client(
_headers = new Dictionary<string, string>()
{
{ "content-type", "application/json" },
{ "user-agent", $"AppwriteDotNetSDK/8.2.0 ({Environment.OSVersion.Platform}; {Environment.OSVersion.VersionString})"},
{ "user-agent", $"AppwriteDotNetSDK/9.0.0 ({Environment.OSVersion.Platform}; {Environment.OSVersion.VersionString})"},
{ "x-sdk-name", ".NET" },
{ "x-sdk-platform", "server" },
{ "x-sdk-language", "dotnet" },
{ "x-sdk-version", "8.2.0"},
{ "X-Appwrite-Response-Format", "2.0.0" }
{ "x-sdk-version", "9.0.0"},
{ "X-Appwrite-Response-Format", "2.4.0" }
};

_config = new Dictionary<string, string>();
Expand Down Expand Up @@ -188,15 +188,6 @@ public Client SetForwardedUserAgent(string value)
return this;
}

/// <summary>Your secret dev API key</summary>
public Client SetDevKey(string value)
{
_config["devKey"] = value;
AddHeader("X-Appwrite-Dev-Key", value);

return this;
}

/// <summary>The user cookie to authenticate with. Used by SDKs that forward an incoming Cookie header in server-side runtimes.</summary>
public Client SetCookie(string value)
{
Expand Down Expand Up @@ -269,13 +260,13 @@ private HttpRequestMessage PrepareRequest(
foreach (var parameter in parameters)
{
if (parameter.Value == null) continue;
if (parameter.Key == "file")
if (parameter.Value is MultipartFormDataContent fileContent)
{
var fileContent = parameters["file"] as MultipartFormDataContent;
if (fileContent != null)
{
form.Add(fileContent.First()!);
}
form.Add(fileContent.First()!);
}
else if (parameter.Value is System.Collections.IDictionary)
{
form.Add(new StringContent(JsonSerializer.Serialize(parameter.Value, SerializerOptions)), parameter.Key);
}
else if (parameter.Value is IEnumerable<object> enumerable)
{
Expand Down Expand Up @@ -471,6 +462,10 @@ public async Task<T> Call<T>(

return (dict as T)!;
}
else if (typeof(T) == typeof(string))
{
return ((await response.Content.ReadAsStringAsync()) as T)!;
}
else
{
return ((await response.Content.ReadAsByteArrayAsync()) as T)!;
Expand All @@ -481,18 +476,27 @@ public async Task<T> ChunkedUpload<T>(
string path,
Dictionary<string, string> headers,
Dictionary<string, object?> parameters,
Func<Dictionary<string, object>, T> converter,
Func<Dictionary<string, object>, T>? converter,
string paramName,
string? idParamName = null,
Action<UploadProgress>? onProgress = null) where T : class
Action<UploadProgress>? onProgress = null,
string method = "POST") where T : class
{
if (string.IsNullOrEmpty(paramName))
throw new ArgumentException("Parameter name cannot be null or empty", nameof(paramName));

if (!parameters.ContainsKey(paramName))
throw new ArgumentException($"Parameter {paramName} not found", nameof(paramName));
if (!parameters.TryGetValue(paramName, out var value) || value == null)
{
return await Call(
method: method,
path,
headers,
parameters,
converter
);
}

var input = parameters[paramName] as InputFile;
var input = value as InputFile;
if (input == null)
throw new ArgumentException($"Parameter {paramName} must be an InputFile", nameof(paramName));

Expand All @@ -518,11 +522,11 @@ public async Task<T> ChunkedUpload<T>(
}

var offset = 0L;
var buffer = new byte[Math.Min(size, ChunkSize)];
var result = new Dictionary<string, object?>();

if (size < ChunkSize)
if (size <= ChunkSize || typeof(T) == typeof(string))
{
byte[] buffer;
switch (input.SourceType)
{
case "path":
Expand All @@ -532,14 +536,24 @@ public async Task<T> ChunkedUpload<T>(
var dataStream = input.Data as Stream;
if (dataStream == null)
throw new InvalidOperationException("Stream data is null");
await dataStream.ReadAsync(buffer, 0, (int)size);
buffer = new byte[size];
var bytesRead = 0;
while (bytesRead < size)
{
var count = await dataStream.ReadAsync(buffer, bytesRead, (int)size - bytesRead);
if (count == 0)
break;
bytesRead += count;
}
break;
case "bytes":
var dataBytes = input.Data as byte[];
if (dataBytes == null)
throw new InvalidOperationException("Byte array data is null");
buffer = dataBytes;
break;
default:
throw new InvalidOperationException($"Unsupported source type: {input.SourceType}");
}

var content = new MultipartFormDataContent {
Expand All @@ -549,7 +563,7 @@ public async Task<T> ChunkedUpload<T>(
parameters[paramName] = content;

return await Call(
method: "POST",
method: method,
path,
headers,
parameters,
Expand Down Expand Up @@ -656,7 +670,7 @@ async Task<byte[]> ReadChunkAsync(long start, long end)
};

var chunkResult = await Call<Dictionary<string, object?>>(
method: "POST",
method: method,
path,
chunkHeaders,
chunkParameters
Expand Down Expand Up @@ -773,7 +787,7 @@ bool IsUploadComplete(Dictionary<string, object?> chunkResult)
var nonNullableResult = result.Where(kvp => kvp.Value != null)
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value!);

return converter(nonNullableResult);
return converter != null ? converter(nonNullableResult) : (nonNullableResult as T)!;
}
}
}
3 changes: 2 additions & 1 deletion Appwrite/Enums/BillingPlanGroup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ public BillingPlanGroup(string value)
Value = value;
}

public static BillingPlanGroup Starter => new BillingPlanGroup("starter");
public static BillingPlanGroup Free => new BillingPlanGroup("free");
public static BillingPlanGroup Start => new BillingPlanGroup("start");
public static BillingPlanGroup Pro => new BillingPlanGroup("pro");
public static BillingPlanGroup Scale => new BillingPlanGroup("scale");
}
Expand Down
2 changes: 2 additions & 0 deletions Appwrite/Enums/BuildRuntime.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ public BuildRuntime(string value)
public static BuildRuntime Dart310 => new BuildRuntime("dart-3.10");
public static BuildRuntime Dart311 => new BuildRuntime("dart-3.11");
public static BuildRuntime Dart312 => new BuildRuntime("dart-3.12");
public static BuildRuntime Dart313 => new BuildRuntime("dart-3.13");
public static BuildRuntime Dotnet60 => new BuildRuntime("dotnet-6.0");
public static BuildRuntime Dotnet70 => new BuildRuntime("dotnet-7.0");
public static BuildRuntime Dotnet80 => new BuildRuntime("dotnet-8.0");
Expand Down Expand Up @@ -104,5 +105,6 @@ public BuildRuntime(string value)
public static BuildRuntime Flutter338 => new BuildRuntime("flutter-3.38");
public static BuildRuntime Flutter341 => new BuildRuntime("flutter-3.41");
public static BuildRuntime Flutter344 => new BuildRuntime("flutter-3.44");
public static BuildRuntime Flutter347 => new BuildRuntime("flutter-3.47");
}
}
19 changes: 19 additions & 0 deletions Appwrite/Enums/DomainRegistrationType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using System;

namespace Appwrite.Enums
{
public class DomainRegistrationType : IEnum
{
public string Value { get; private set; }

public DomainRegistrationType(string value)
{
Value = value;
}

public static DomainRegistrationType New => new DomainRegistrationType("new");
public static DomainRegistrationType Transfer => new DomainRegistrationType("transfer");
public static DomainRegistrationType Renewal => new DomainRegistrationType("renewal");
public static DomainRegistrationType Trade => new DomainRegistrationType("trade");
}
}
23 changes: 23 additions & 0 deletions Appwrite/Enums/DomainTransferStatusEnum.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using System;

namespace Appwrite.Enums
{
public class DomainTransferStatusEnum : IEnum
{
public string Value { get; private set; }

public DomainTransferStatusEnum(string value)
{
Value = value;
}

public static DomainTransferStatusEnum Transferrable => new DomainTransferStatusEnum("transferrable");
public static DomainTransferStatusEnum NotTransferrable => new DomainTransferStatusEnum("not_transferrable");
public static DomainTransferStatusEnum PendingOwner => new DomainTransferStatusEnum("pending_owner");
public static DomainTransferStatusEnum PendingAdmin => new DomainTransferStatusEnum("pending_admin");
public static DomainTransferStatusEnum PendingRegistry => new DomainTransferStatusEnum("pending_registry");
public static DomainTransferStatusEnum Completed => new DomainTransferStatusEnum("completed");
public static DomainTransferStatusEnum Cancelled => new DomainTransferStatusEnum("cancelled");
public static DomainTransferStatusEnum ServiceUnavailable => new DomainTransferStatusEnum("service_unavailable");
}
}
1 change: 1 addition & 0 deletions Appwrite/Enums/Framework.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public Framework(string value)
public static Framework Remix => new Framework("remix");
public static Framework Lynx => new Framework("lynx");
public static Framework Flutter => new Framework("flutter");
public static Framework Jaspr => new Framework("jaspr");
public static Framework ReactNative => new Framework("react-native");
public static Framework Vite => new Framework("vite");
public static Framework Other => new Framework("other");
Expand Down
17 changes: 17 additions & 0 deletions Appwrite/Enums/IdTokenProvider.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System;

namespace Appwrite.Enums
{
public class IdTokenProvider : IEnum
{
public string Value { get; private set; }

public IdTokenProvider(string value)
{
Value = value;
}

public static IdTokenProvider Apple => new IdTokenProvider("apple");
public static IdTokenProvider Google => new IdTokenProvider("google");
}
}
1 change: 1 addition & 0 deletions Appwrite/Enums/ImageGravity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public ImageGravity(string value)
Value = value;
}

public static ImageGravity Auto => new ImageGravity("auto");
public static ImageGravity Center => new ImageGravity("center");
public static ImageGravity TopLeft => new ImageGravity("top-left");
public static ImageGravity Top => new ImageGravity("top");
Expand Down
18 changes: 18 additions & 0 deletions Appwrite/Enums/OAuth2Auth0Prompt.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System;

namespace Appwrite.Enums
{
public class OAuth2Auth0Prompt : IEnum
{
public string Value { get; private set; }

public OAuth2Auth0Prompt(string value)
{
Value = value;
}

public static OAuth2Auth0Prompt None => new OAuth2Auth0Prompt("none");
public static OAuth2Auth0Prompt Login => new OAuth2Auth0Prompt("login");
public static OAuth2Auth0Prompt Consent => new OAuth2Auth0Prompt("consent");
}
}
17 changes: 17 additions & 0 deletions Appwrite/Enums/OAuth2DiscordPrompt.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System;

namespace Appwrite.Enums
{
public class OAuth2DiscordPrompt : IEnum
{
public string Value { get; private set; }

public OAuth2DiscordPrompt(string value)
{
Value = value;
}

public static OAuth2DiscordPrompt None => new OAuth2DiscordPrompt("none");
public static OAuth2DiscordPrompt Consent => new OAuth2DiscordPrompt("consent");
}
}
16 changes: 16 additions & 0 deletions Appwrite/Enums/OAuth2GithubPrompt.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System;

namespace Appwrite.Enums
{
public class OAuth2GithubPrompt : IEnum
{
public string Value { get; private set; }

public OAuth2GithubPrompt(string value)
{
Value = value;
}

public static OAuth2GithubPrompt SelectAccount => new OAuth2GithubPrompt("select_account");
}
}
19 changes: 19 additions & 0 deletions Appwrite/Enums/OAuth2KakaoPrompt.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using System;

namespace Appwrite.Enums
{
public class OAuth2KakaoPrompt : IEnum
{
public string Value { get; private set; }

public OAuth2KakaoPrompt(string value)
{
Value = value;
}

public static OAuth2KakaoPrompt None => new OAuth2KakaoPrompt("none");
public static OAuth2KakaoPrompt Login => new OAuth2KakaoPrompt("login");
public static OAuth2KakaoPrompt Create => new OAuth2KakaoPrompt("create");
public static OAuth2KakaoPrompt SelectAccount => new OAuth2KakaoPrompt("select_account");
}
}
19 changes: 19 additions & 0 deletions Appwrite/Enums/OAuth2MicrosoftPrompt.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using System;

namespace Appwrite.Enums
{
public class OAuth2MicrosoftPrompt : IEnum
{
public string Value { get; private set; }

public OAuth2MicrosoftPrompt(string value)
{
Value = value;
}

public static OAuth2MicrosoftPrompt None => new OAuth2MicrosoftPrompt("none");
public static OAuth2MicrosoftPrompt Login => new OAuth2MicrosoftPrompt("login");
public static OAuth2MicrosoftPrompt Consent => new OAuth2MicrosoftPrompt("consent");
public static OAuth2MicrosoftPrompt SelectAccount => new OAuth2MicrosoftPrompt("select_account");
}
}
18 changes: 18 additions & 0 deletions Appwrite/Enums/OAuth2OktaPrompt.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System;

namespace Appwrite.Enums
{
public class OAuth2OktaPrompt : IEnum
{
public string Value { get; private set; }

public OAuth2OktaPrompt(string value)
{
Value = value;
}

public static OAuth2OktaPrompt None => new OAuth2OktaPrompt("none");
public static OAuth2OktaPrompt Login => new OAuth2OktaPrompt("login");
public static OAuth2OktaPrompt Consent => new OAuth2OktaPrompt("consent");
}
}
Loading
Loading