/
githubmirror
/
Files
Обзор
Документация
Войти
/
githubmirror
/
Files
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Files.App/Utils/Storage/Helpers/FtpHelpers.cs
81 строка
2 KB
Kris Vandermotten
Code Quality: Search for chars instead of single-char strings where possible (#18096)
01 фев 2026, 18:28
Не верифицирован
01 фев 2026, 18:28
6a9f925
Код
Авторство
О чём код?
// Copyright (c) Files Community // Licensed under the MIT License. using FluentFTP; namespace Files.App.Utils.Storage { public static class FtpHelpers { public static async Task<bool> EnsureConnectedAsync(this AsyncFtpClient ftpClient) { if (!ftpClient.IsConnected) { await ftpClient.Connect(); } return true; } public static bool IsFtpPath(string path) { if (!string.IsNullOrEmpty(path)) { return path.StartsWith("ftp://", StringComparison.OrdinalIgnoreCase) || path.StartsWith("ftps://", StringComparison.OrdinalIgnoreCase) || path.StartsWith("ftpes://", StringComparison.OrdinalIgnoreCase); } return false; } public static bool VerifyFtpPath(string path) { var authority = GetFtpAuthority(path); var index = authority.IndexOf(':', StringComparison.Ordinal); return index == -1 || ushort.TryParse(authority.AsSpan(index + 1), out _); } public static string GetFtpHost(string path) { var authority = GetFtpAuthority(path); var index = authority.IndexOf(':', StringComparison.Ordinal); return index == -1 ? authority : authority.Substring(0, index); } public static ushort GetFtpPort(string path) { var authority = GetFtpAuthority(path); var index = authority.IndexOf(':', StringComparison.Ordinal); if (index == -1) return path.StartsWith("ftps://", StringComparison.OrdinalIgnoreCase) ? (ushort)990 : (ushort)21; return ushort.Parse(authority.Substring(index + 1)); } public static string GetFtpAuthority(string path) { path = path.Replace('\\', '/'); if (Uri.TryCreate(path, UriKind.Absolute, out var uri)) return uri.Authority; return string.Empty; } public static string GetFtpPath(string path) { path = path.Replace('\\', '/'); var schemaIndex = path.IndexOf("://", StringComparison.Ordinal) + 3; var hostIndex = path.IndexOf('/', schemaIndex); return hostIndex == -1 ? "/" : path.Substring(hostIndex); } public static int GetRootIndex(string path) { path = path.Replace('\\', '/'); var schemaIndex = path.IndexOf("://", StringComparison.Ordinal) + 3; return path.IndexOf('/', schemaIndex); } } }