Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
Art1xFX committed Jul 6, 2017
1 parent caa1535 commit 981d0c3
Show file tree
Hide file tree
Showing 23 changed files with 2,815 additions and 0 deletions.
22 changes: 22 additions & 0 deletions YandexDiskSharp.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26430.15
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YandexDiskSharp", "YandexDiskSharp\YandexDiskSharp.csproj", "{FE0B453D-1E3B-4AB6-BBAD-F6F973356897}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{FE0B453D-1E3B-4AB6-BBAD-F6F973356897}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FE0B453D-1E3B-4AB6-BBAD-F6F973356897}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FE0B453D-1E3B-4AB6-BBAD-F6F973356897}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FE0B453D-1E3B-4AB6-BBAD-F6F973356897}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
27 changes: 27 additions & 0 deletions YandexDiskSharp/DiskException.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using System.Net;

namespace YandexDiskSharp
{
public class DiskException : WebException
{
public DiskException(Models.Exception exception, System.Exception innerException, WebExceptionStatus status, WebResponse response) : base(exception?.Message, innerException, status, response)
{
Description = exception.Description;
Error = exception.Error;
}

#region ~Properties~

/// <summary>
/// Техническое описание ошибки.
/// </summary>
public string Description { get; }

/// <summary>
/// Уникальный код ошибки.
/// </summary>
public string Error { get; }

#endregion
}
}
102 changes: 102 additions & 0 deletions YandexDiskSharp/MediaTypes.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
namespace YandexDiskSharp
{
public static class MediaTypes
{
/// <summary>
/// Аудио-файлы.
/// </summary>
private const string Audio = "audio";

/// <summary>
/// Файлы резервных и временных копий.
/// </summary>
public const string Backup = "backup";

/// <summary>
/// Электронные книги.
/// </summary>
public const string Book = "book";

/// <summary>
/// Сжатые и архивированные файлы.
/// </summary>
public const string Compressed = "compressed";

/// <summary>
/// Файлы с базами данных.
/// </summary>
public const string Data = "data";

/// <summary>
/// Файлы с кодом (C++, C#, XML и т. п.), а также служебные файлы IDE.
/// </summary>
public const string Development = "development";

/// <summary>
/// Образы носителей информации в различных форматах и сопутствующие файлы (например, CUE).
/// </summary>
public const string DiskImage = "diskimage";

/// <summary>
/// Документы офисных форматов (Word, OpenOffice и т. п.).
/// </summary>
public const string Document = "document";

/// <summary>
/// зашифрованные файлы.
/// </summary>
public const string Encoded = "encoded";

/// <summary>
/// Исполняемые файлы.
/// </summary>
public const string Executable = "executable";

/// <summary>
/// Файлы с флэш-видео или анимацией.
/// </summary>
public const string Flash = "flash";

/// <summary>
/// Файлы шрифтов.
/// </summary>
public const string Font = "font";

/// <summary>
/// Изображения.
/// </summary>
public const string Image = "image";

/// <summary>
/// Файлы настроек для различных программ.
/// </summary>
public const string Settings = "settings";

/// <summary>
/// Файлы офисных таблиц (Numbers, Lotus).
/// </summary>
public const string Spreadsheet = "spreadsheet";

/// <summary>
/// Текстовые файлы.
/// </summary>
public const string Text = "text";

/// <summary>
/// Неизвестный тип.
/// </summary>
public const string Unknown = "unknown";

/// <summary>
/// Видео-файлы.
/// </summary>
public const string Video = "video";

/// <summary>
/// Различные файлы, используемые браузерами и сайтами (CSS, сертификаты, файлы закладок).
/// </summary>
public const string Web = "web";


}
}
93 changes: 93 additions & 0 deletions YandexDiskSharp/Models/CommentIds.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
using Newtonsoft.Json;
using System.IO;

namespace YandexDiskSharp.Models
{
/// <summary>
/// Идентификаторы комментариев.
/// </summary>
public class CommentIds
{
#region ~Constructor~

internal CommentIds(JsonTextReader jsonReader)
{
int depth = jsonReader.Depth;
while (jsonReader.Read())
{
switch (jsonReader.TokenType)
{
case JsonToken.PropertyName:
switch (jsonReader.Value.ToString())
{
case "private_resource":
PrivateResource = jsonReader.ReadAsString();
break;
case "public_resource":
PublicResource = jsonReader.ReadAsString();
break;
}
break;
case JsonToken.EndObject:
if (jsonReader.Depth == depth)
return;
break;
}
}
}

#endregion

#region ~Methods~

/// <summary>
/// Преобразует строковое представление json ответа в эквивалентный ему класс <see cref="CommentIds"/>.
/// </summary>
/// <param name="s">Строка, содержащая преобразуемый json ответ.</param>
/// <returns>Класс <see cref="CommentIds"/>, эквивалентный json ответу, содержащемуся в параметре s.</returns>
public static CommentIds Parse(string s)
{
using (var stringReader = new StringReader(s))
using (var jsonReader = new JsonTextReader(stringReader))
{
return new CommentIds(jsonReader);
}
}

/// <summary>
/// Преобразует строковое представление json ответа в эквивалентный ему класс <see cref="CommentIds"/>. Возвращает значение, указывающее, успешно ли выполнено преобразование.
/// </summary>
/// <param name="s">Строка, содержащая преобразуемый json ответ.</param>
/// <param name="result">При возвращении этим методом содержиткласс <see cref="CommentIds"/>, эквивалентный json ответу, содержащемуся в параметре s, если преобразование выполнено успешно, или null, если оно завершилось сбоем. Преобразование завершается сбоем, если параметр s равен null или <see cref="System.String.Empty"/> или не находится в правильном формате. Этот параметр передается неинициализированным; любое значение, первоначально предоставленное в объекте result, будет перезаписано.</param>
/// <returns>Значение true, если параметр s успешно преобразован; в противном случае — значение false.</returns>
public static bool TryParse(string s, out CommentIds result)
{
try
{
result = Parse(s);
return true;
}
catch
{
result = null;
return false;
}
}

#endregion

#region ~Properties~

/// <summary>
/// Идентификатор комментариев для приватных ресурсов.
/// </summary>
public string PrivateResource { get; }

/// <summary>
/// Идентификатор комментариев для публичных ресурсов.
/// </summary>
public string PublicResource { get; }

#endregion
}
}
131 changes: 131 additions & 0 deletions YandexDiskSharp/Models/Disk.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
using Newtonsoft.Json;
using System.IO;

namespace YandexDiskSharp.Models
{
/// <summary>
/// Данные о свободном и занятом пространстве на Диске.
/// </summary>
public class Disk
{
#region ~Constructor~

internal Disk(JsonTextReader jsonReader)
{
int depth = jsonReader.Depth;
while (jsonReader.Read())
switch (jsonReader.TokenType)
{
case JsonToken.PropertyName:
switch (jsonReader.Value.ToString())
{
case "max_file_size":
MaxFileSize = long.Parse(jsonReader.ReadAsString());
break;
case "total_space":
TotalSpace = long.Parse(jsonReader.ReadAsString());
break;
case "trash_size":
TrashSize = long.Parse(jsonReader.ReadAsString());
break;
case "is_paid":
IsPaid = jsonReader.ReadAsBoolean().Value;
break;
case "used_space":
UsedSpace = long.Parse(jsonReader.ReadAsString());
break;
case "system_folders":
SystemFolders = new SystemFolders(jsonReader);
break;
case "revision":
Revision = long.Parse(jsonReader.ReadAsString());
break;
}
break;
case JsonToken.EndObject:
if (jsonReader.Depth == depth)
return;
break;
}
}

#endregion

#region ~Methods~

/// <summary>
/// Преобразует строковое представление json ответа в эквивалентный ему класс <see cref="Disk"/>.
/// </summary>
/// <param name="s">Строка, содержащая преобразуемый json ответ.</param>
/// <returns>Класс <see cref="Disk"/>, эквивалентный json ответу, содержащемуся в параметре s.</returns>
public static Disk Parse(string s)
{
using (var stringReader = new StringReader(s))
using (var jsonReader = new JsonTextReader(stringReader))
{
return new Disk(jsonReader);
}
}

/// <summary>
/// Преобразует строковое представление json ответа в эквивалентный ему класс <see cref="Disk"/>. Возвращает значение, указывающее, успешно ли выполнено преобразование.
/// </summary>
/// <param name="s">Строка, содержащая преобразуемый json ответ.</param>
/// <param name="result">При возвращении этим методом содержиткласс <see cref="Disk"/>, эквивалентный json ответу, содержащемуся в параметре s, если преобразование выполнено успешно, или null, если оно завершилось сбоем. Преобразование завершается сбоем, если параметр s равен null или <see cref="System.String.Empty"/> или не находится в правильном формате. Этот параметр передается неинициализированным; любое значение, первоначально предоставленное в объекте result, будет перезаписано.</param>
/// <returns>Значение true, если параметр s успешно преобразован; в противном случае — значение false.</returns>
public static bool TryParse(string s, out Disk result)
{
try
{
result = Parse(s);
return true;
}
catch
{
result = null;
return false;
}
}

#endregion

#region ~Properties~

/// <summary>
/// Максимальный поддерживаемый размер файла.
/// </summary>
public long MaxFileSize { get; }

/// <summary>
/// Общий объем диска (байт).
/// </summary>
public long TotalSpace { get; }

/// <summary>
/// Общий размер файлов в Корзине (байт). Входит в <see cref="UsedSpace"/>.
/// </summary>
public long TrashSize { get; }

/// <summary>
/// Признак наличия купленного места.
/// </summary>
public bool IsPaid { get; }

/// <summary>
/// Используемый объем диска (байт).
/// </summary>
public long UsedSpace { get; }

/// <summary>
/// Адреса системных папок в Диске пользователя.
/// </summary>
public SystemFolders SystemFolders { get; }

/// <summary>
/// Текущая ревизия Диска.
/// </summary>
public long Revision { get; }

#endregion
}
}
Loading

0 comments on commit 981d0c3

Please sign in to comment.