Refactor user avatar handling: Implement Base64 avatar support, enhance image caching, and improve UI updates for avatar loading
@ -1,4 +1,4 @@
|
||||
using CORP_MAUI.Pages;
|
||||
using CORP_MAUI.Pages;
|
||||
using CORP_MAUI.Models;
|
||||
using CORP_MAUI.Services;
|
||||
using System.Diagnostics;
|
||||
|
||||
@ -4,33 +4,79 @@
|
||||
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:pages="clr-namespace:CORP_MAUI.Pages"
|
||||
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
|
||||
Shell.TabBarBackgroundColor="#0D6EFD"
|
||||
Shell.TabBarForegroundColor="White"
|
||||
Shell.TabBarTitleColor="White"
|
||||
Shell.TabBarUnselectedColor="#FFFFFF99"
|
||||
Shell.NavBarIsVisible="False">
|
||||
FlyoutBackgroundColor="#0D6EFD"
|
||||
FlyoutWidth="220"
|
||||
Shell.NavBarIsVisible="False"
|
||||
x:Name="MainShell"
|
||||
FlyoutBehavior="Flyout">
|
||||
|
||||
<!-- Flyout Header -->
|
||||
<Shell.FlyoutHeader>
|
||||
<Grid HeightRequest="100" BackgroundColor="#0A5ED7" Padding="15">
|
||||
<VerticalStackLayout VerticalOptions="Center" Spacing="8">
|
||||
<Image
|
||||
Source="logo.png"
|
||||
HeightRequest="40"
|
||||
WidthRequest="40"
|
||||
HorizontalOptions="Start"/>
|
||||
<Label
|
||||
Text="HiRo"
|
||||
TextColor="White"
|
||||
FontSize="14"
|
||||
FontAttributes="Bold"/>
|
||||
</VerticalStackLayout>
|
||||
</Grid>
|
||||
</Shell.FlyoutHeader>
|
||||
|
||||
<!-- Стили для Flyout элементов -->
|
||||
<Shell.ItemTemplate>
|
||||
<DataTemplate x:DataType="BaseShellItem">
|
||||
<Grid ColumnDefinitions="50,*" Padding="10" HeightRequest="50">
|
||||
<Image
|
||||
Grid.Column="0"
|
||||
Source="{Binding Icon}"
|
||||
HeightRequest="24"
|
||||
WidthRequest="24"
|
||||
VerticalOptions="Center"
|
||||
HorizontalOptions="Center">
|
||||
<Image.Behaviors>
|
||||
<toolkit:IconTintColorBehavior TintColor="White"/>
|
||||
</Image.Behaviors>
|
||||
</Image>
|
||||
<Label
|
||||
Grid.Column="1"
|
||||
Text="{Binding Title}"
|
||||
TextColor="White"
|
||||
FontSize="15"
|
||||
VerticalOptions="Center"/>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</Shell.ItemTemplate>
|
||||
|
||||
<TabBar>
|
||||
<ShellContent
|
||||
Title="Новости"
|
||||
Icon="feed.png"
|
||||
ContentTemplate="{DataTemplate pages:PostsPage}" />
|
||||
<ShellContent
|
||||
Title="Сотрудники"
|
||||
Icon="employees.png"
|
||||
ContentTemplate="{DataTemplate pages:EmployeesPage}" />
|
||||
<ShellContent
|
||||
Title="Отделы"
|
||||
Icon="department.png"
|
||||
ContentTemplate="{DataTemplate pages:DepartmentsPage}" />
|
||||
<ShellContent
|
||||
Title="Заявления"
|
||||
Icon="statements.png"
|
||||
ContentTemplate="{DataTemplate pages:RequestsPage}" />
|
||||
<ShellContent
|
||||
Title="Профиль"
|
||||
Icon="profile.png"
|
||||
ContentTemplate="{DataTemplate pages:ProfilePage}" />
|
||||
</TabBar>
|
||||
<!-- FlyoutItems с Shell.TabBarIsVisible для контроля TabBar -->
|
||||
<FlyoutItem Title="Новости" Icon="feed.png" FlyoutDisplayOptions="AsSingleItem">
|
||||
<ShellContent ContentTemplate="{DataTemplate pages:PostsPage}" />
|
||||
</FlyoutItem>
|
||||
|
||||
<FlyoutItem Title="Сотрудники" Icon="employees.png" FlyoutDisplayOptions="AsSingleItem">
|
||||
<ShellContent ContentTemplate="{DataTemplate pages:EmployeesPage}" />
|
||||
</FlyoutItem>
|
||||
|
||||
<FlyoutItem Title="Отделы" Icon="department.png" FlyoutDisplayOptions="AsSingleItem">
|
||||
<ShellContent ContentTemplate="{DataTemplate pages:DepartmentsPage}" />
|
||||
</FlyoutItem>
|
||||
|
||||
<FlyoutItem Title="Заявления" Icon="statements.png" FlyoutDisplayOptions="AsSingleItem">
|
||||
<ShellContent ContentTemplate="{DataTemplate pages:RequestsPage}" />
|
||||
</FlyoutItem>
|
||||
|
||||
<FlyoutItem Title="Профиль" Icon="profile.png" FlyoutDisplayOptions="AsSingleItem">
|
||||
<ShellContent ContentTemplate="{DataTemplate pages:ProfilePage}" />
|
||||
</FlyoutItem>
|
||||
|
||||
</Shell>
|
||||
|
||||
@ -5,6 +5,9 @@ namespace CORP_MAUI;
|
||||
|
||||
public partial class AppShell : Shell
|
||||
{
|
||||
// Порог ширины для переключения на вертикальное меню (в пикселях)
|
||||
private const double WideScreenThreshold = 768;
|
||||
|
||||
public AppShell()
|
||||
{
|
||||
try
|
||||
@ -25,6 +28,9 @@ public partial class AppShell : Shell
|
||||
Trace.WriteLine("[AppShell] ✅ AppShell инициализирован");
|
||||
Trace.WriteLine("=== APPSHELL CONSTRUCTOR END ===");
|
||||
|
||||
// Устанавливаем начальный режим меню
|
||||
UpdateFlyoutBehavior();
|
||||
|
||||
// Инициализация без ожидания (так await нельзя из синхронного конструктора)
|
||||
_ = InitializeAsync();
|
||||
}
|
||||
@ -46,7 +52,7 @@ public partial class AppShell : Shell
|
||||
await Task.Delay(100);
|
||||
await MainThread.InvokeOnMainThreadAsync(async () =>
|
||||
{
|
||||
Page? mainPage = Application.Current?.Windows[0]?.Page;
|
||||
Page? mainPage = Application.Current?.Windows.FirstOrDefault()?.Page;
|
||||
if (mainPage != null)
|
||||
{
|
||||
await mainPage.DisplayAlert("Ошибка AppShell",
|
||||
@ -106,6 +112,55 @@ public partial class AppShell : Shell
|
||||
await DisplayAlert("Ошибка", $"Ошибка инициализации: {ex.Message}", "OK");
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnSizeAllocated(double width, double height)
|
||||
{
|
||||
base.OnSizeAllocated(width, height);
|
||||
UpdateFlyoutBehavior(width);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обновляет режим меню в зависимости от ширины экрана
|
||||
/// </summary>
|
||||
private void UpdateFlyoutBehavior(double? width = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Получаем текущую ширину окна
|
||||
double currentWidth = width ?? (Application.Current?.Windows.FirstOrDefault()?.Width ?? 0);
|
||||
|
||||
if (currentWidth <= 0)
|
||||
{
|
||||
// Если ширина не определена, используем DeviceDisplay
|
||||
currentWidth = DeviceDisplay.MainDisplayInfo.Width / DeviceDisplay.MainDisplayInfo.Density;
|
||||
}
|
||||
|
||||
Trace.WriteLine($"[AppShell] UpdateFlyoutBehavior: width={currentWidth}, threshold={WideScreenThreshold}");
|
||||
|
||||
if (currentWidth >= WideScreenThreshold)
|
||||
{
|
||||
// Широкий экран - Flyout всегда открыт (Locked)
|
||||
if (FlyoutBehavior != FlyoutBehavior.Locked)
|
||||
{
|
||||
FlyoutBehavior = FlyoutBehavior.Locked;
|
||||
FlyoutIsPresented = true;
|
||||
Trace.WriteLine("[AppShell] ✅ Режим: Locked (вертикальное меню слева)");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Узкий экран - Flyout выдвигается по кнопке/свайпу
|
||||
if (FlyoutBehavior != FlyoutBehavior.Flyout)
|
||||
{
|
||||
FlyoutBehavior = FlyoutBehavior.Flyout;
|
||||
FlyoutIsPresented = false;
|
||||
Trace.WriteLine("[AppShell] ✅ Режим: Flyout (выдвижное меню)");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Trace.WriteLine($"[AppShell] ⚠️ Ошибка UpdateFlyoutBehavior: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -53,7 +53,6 @@
|
||||
<MauiIcon Include="Resources\AppIcon\appicon.svg" ForegroundFile="Resources\AppIcon\appiconfg.svg" Color="#512BD4" />
|
||||
|
||||
<!-- Splash Screen -->
|
||||
<MauiSplashScreen Include="Resources\Splash\splash.svg" Color="#512BD4" BaseSize="128,128" />
|
||||
|
||||
<!-- Images -->
|
||||
<MauiImage Include="Resources\Images\*" />
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Diagnostics;
|
||||
using System.ComponentModel;
|
||||
using System.Runtime.CompilerServices;
|
||||
using Microsoft.Maui.Controls;
|
||||
|
||||
namespace CORP_MAUI.Models;
|
||||
|
||||
public class User
|
||||
public class User : INotifyPropertyChanged
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Username { get; set; } = string.Empty;
|
||||
@ -40,10 +42,47 @@ public class User
|
||||
[JsonPropertyName("avatar")]
|
||||
public string? Avatar { get; set; }
|
||||
|
||||
// INotifyPropertyChanged implementation
|
||||
public event PropertyChangedEventHandler? PropertyChanged;
|
||||
|
||||
protected void OnPropertyChanged([CallerMemberName] string? propertyName = null)
|
||||
{
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
|
||||
// Вспомогательные свойства для удобства
|
||||
[JsonIgnore]
|
||||
public string FullName => $"{FirstName} {LastName}".Trim();
|
||||
|
||||
/// <summary>
|
||||
/// Проверяет, является ли аватар Base64 строкой
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public bool IsAvatarBase64 => !string.IsNullOrEmpty(Avatar) && Avatar.StartsWith("data:image");
|
||||
|
||||
/// <summary>
|
||||
/// Получить байты изображения из Base64 строки
|
||||
/// </summary>
|
||||
public byte[]? GetAvatarBytesFromBase64()
|
||||
{
|
||||
if (!IsAvatarBase64) return null;
|
||||
|
||||
try
|
||||
{
|
||||
// Формат: data:image/jpeg;base64,<base64_data>
|
||||
int commaIndex = Avatar!.IndexOf(',');
|
||||
if (commaIndex < 0) return null;
|
||||
|
||||
string base64Data = Avatar.Substring(commaIndex + 1);
|
||||
return Convert.FromBase64String(base64Data);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Trace.WriteLine($"[User] Ошибка декодирования Base64 аватара: {ex.Message}");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public string? DisplayAvatarUrl
|
||||
{
|
||||
@ -52,7 +91,7 @@ public class User
|
||||
// Сначала проверяем Avatar (может содержать полный URL или data:image)
|
||||
if (!string.IsNullOrEmpty(Avatar))
|
||||
{
|
||||
// Если это data:image - не возвращаем как URL
|
||||
// Если это data:image - не возвращаем как URL (будет обработано отдельно)
|
||||
if (Avatar.StartsWith("data:image"))
|
||||
return null;
|
||||
|
||||
@ -105,9 +144,20 @@ public class User
|
||||
/// </summary>
|
||||
public void SetCachedAvatarFilePath(string filePath)
|
||||
{
|
||||
Trace.WriteLine($"[User.SetCachedAvatarFilePath] {FullName}: Setting path to {filePath}");
|
||||
|
||||
CachedAvatarFilePath = filePath;
|
||||
_cachedImageSource = ImageSource.FromFile(filePath);
|
||||
IsAvatarLoaded = true;
|
||||
|
||||
Trace.WriteLine($"[User.SetCachedAvatarFilePath] {FullName}: ImageSource created, notifying UI...");
|
||||
|
||||
// Уведомляем UI об изменении аватара
|
||||
MainThread.BeginInvokeOnMainThread(() =>
|
||||
{
|
||||
Trace.WriteLine($"[User.SetCachedAvatarFilePath] {FullName}: OnPropertyChanged(DisplayAvatarSource)");
|
||||
OnPropertyChanged(nameof(DisplayAvatarSource));
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -118,6 +168,7 @@ public class User
|
||||
_cachedImageSource = null;
|
||||
IsAvatarLoaded = false;
|
||||
CachedAvatarFilePath = null;
|
||||
OnPropertyChanged(nameof(DisplayAvatarSource));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -128,15 +179,19 @@ public class User
|
||||
{
|
||||
get
|
||||
{
|
||||
Trace.WriteLine($"[User.DisplayAvatarSource] {FullName}: IsAvatarLoaded={IsAvatarLoaded}, CachedPath={CachedAvatarFilePath}");
|
||||
|
||||
// Если аватар уже загружен - возвращаем кэшированный
|
||||
if (IsAvatarLoaded && _cachedImageSource != null)
|
||||
{
|
||||
Trace.WriteLine($"[User.DisplayAvatarSource] {FullName}: Returning cached ImageSource");
|
||||
return _cachedImageSource;
|
||||
}
|
||||
|
||||
// Проверяем путь к файлу
|
||||
if (!string.IsNullOrEmpty(CachedAvatarFilePath) && File.Exists(CachedAvatarFilePath))
|
||||
{
|
||||
Trace.WriteLine($"[User.DisplayAvatarSource] {FullName}: Loading from file: {CachedAvatarFilePath}");
|
||||
_cachedImageSource = ImageSource.FromFile(CachedAvatarFilePath);
|
||||
IsAvatarLoaded = true;
|
||||
return _cachedImageSource;
|
||||
@ -151,19 +206,16 @@ public class User
|
||||
string? cachedPath = Services.ImageCacheService.Instance.GetCachedFilePath(url);
|
||||
if (!string.IsNullOrEmpty(cachedPath) && File.Exists(cachedPath))
|
||||
{
|
||||
Trace.WriteLine($"[User.DisplayAvatarSource] {FullName}: Found in global cache: {cachedPath}");
|
||||
CachedAvatarFilePath = cachedPath;
|
||||
_cachedImageSource = ImageSource.FromFile(cachedPath);
|
||||
IsAvatarLoaded = true;
|
||||
return _cachedImageSource;
|
||||
}
|
||||
|
||||
// Если нет в кэше - используем UriImageSource
|
||||
return new UriImageSource
|
||||
{
|
||||
Uri = new Uri(url),
|
||||
CachingEnabled = true,
|
||||
CacheValidity = TimeSpan.FromDays(7)
|
||||
};
|
||||
// Если нет в кэше - возвращаем placeholder
|
||||
// Аватар будет загружен асинхронно через LoadUserAvatarAsync
|
||||
Trace.WriteLine($"[User.DisplayAvatarSource] {FullName}: Not in cache, returning placeholder");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Diagnostics;
|
||||
using CORP_MAUI.Models;
|
||||
namespace CORP_MAUI.Pages;
|
||||
@ -11,17 +11,17 @@ public partial class DepartmentDetailsPage : ContentPage
|
||||
{
|
||||
try
|
||||
{
|
||||
Trace.WriteLine($"=== DEPARTMENTDETAILSPAGE CONSTRUCTOR START (ID: {departmentId}) ===");
|
||||
Trace.WriteLine($"=== DEPARTMENT DETAILS PAGE CONSTRUCTOR START (ID: {departmentId}) ===");
|
||||
InitializeComponent();
|
||||
_departmentId = departmentId;
|
||||
_teamMembers = new ObservableCollection<User>();
|
||||
TeamCollectionView.ItemsSource = _teamMembers;
|
||||
_ = LoadDepartmentDataAsync();
|
||||
Trace.WriteLine("=== DEPARTMENTDETAILSPAGE CONSTRUCTOR END ===");
|
||||
Trace.WriteLine("=== DEPARTMENT DETAILS PAGE CONSTRUCTOR END ===");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Trace.WriteLine("=== DEPARTMENTDETAILSPAGE CONSTRUCTOR ERROR ===");
|
||||
Trace.WriteLine("=== DEPARTMENT DETAILS PAGE CONSTRUCTOR ERROR ===");
|
||||
Trace.WriteLine($"[DepartmentDetailsPage] ❌ Тип ошибки: {ex.GetType().FullName}");
|
||||
Trace.WriteLine($"[DepartmentDetailsPage] ❌ Сообщение: {ex.Message}");
|
||||
Trace.WriteLine($"[DepartmentDetailsPage] ❌ StackTrace: {ex.StackTrace}");
|
||||
@ -75,14 +75,20 @@ public partial class DepartmentDetailsPage : ContentPage
|
||||
HeadPositionLabel.Text = _department.Head.PositionName ?? "Должность не указана";
|
||||
|
||||
// Загружаем аватар руководителя
|
||||
Trace.WriteLine($"[DepartmentDetailsPage] >>> Загрузка аватара руководителя...");
|
||||
await ServiceProvider.ApiService.LoadUserAvatarAsync(_department.Head);
|
||||
HeadAvatarImage.Source = _department.Head.DisplayAvatarSource;
|
||||
Trace.WriteLine($"[DepartmentDetailsPage] >>> IsAvatarLoaded: {_department.Head.IsAvatarLoaded}");
|
||||
Trace.WriteLine($"[DepartmentDetailsPage] >>> CachedAvatarFilePath: {_department.Head.CachedAvatarFilePath}");
|
||||
|
||||
var avatarSource = _department.Head.DisplayAvatarSource;
|
||||
Trace.WriteLine($"[DepartmentDetailsPage] >>> AvatarSource type: {avatarSource?.GetType().Name ?? "null"}");
|
||||
HeadAvatarImage.Source = avatarSource;
|
||||
}
|
||||
Trace.WriteLine($"[DepartmentDetailsPage] >>> Вызов GetDepartmentEmployeesAsync({_departmentId})");
|
||||
var employees = await ServiceProvider.ApiService.GetDepartmentEmployeesAsync(_departmentId);
|
||||
Trace.WriteLine($"[DepartmentDetailsPage] >>> Получено сотрудников: {employees.Count}");
|
||||
_teamMembers.Clear();
|
||||
if (_department.Head != null && !employees.Any(e => e.Id == _department.Head.Id))
|
||||
if (_department.Head != null && employees.All(e => e.Id != _department.Head.Id))
|
||||
{
|
||||
_teamMembers.Add(_department.Head);
|
||||
Trace.WriteLine($"[DepartmentDetailsPage] >>> Руководитель добавлен в команду");
|
||||
@ -172,21 +178,9 @@ public partial class DepartmentDetailsPage : ContentPage
|
||||
await ServiceProvider.ApiService.LoadUserAvatarAsync(_department.Head);
|
||||
}
|
||||
|
||||
// Загружаем аватары команды
|
||||
// Загружаем аватары команды - UI обновится автоматически через INotifyPropertyChanged
|
||||
await ServiceProvider.ApiService.PreloadUserAvatarsAsync(_teamMembers);
|
||||
|
||||
// Обновляем UI
|
||||
await MainThread.InvokeOnMainThreadAsync(() =>
|
||||
{
|
||||
TeamCollectionView.ItemsSource = null;
|
||||
TeamCollectionView.ItemsSource = _teamMembers;
|
||||
|
||||
if (_department?.Head != null)
|
||||
{
|
||||
HeadAvatarImage.Source = _department.Head.DisplayAvatarSource;
|
||||
}
|
||||
});
|
||||
|
||||
Trace.WriteLine("[DepartmentDetailsPage] ✅ Аватары предзагружены");
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@ -82,12 +82,15 @@ public partial class EmployeeProfilePage : ContentPage
|
||||
Trace.WriteLine($"[EmployeeProfilePage] ✅ Профиль загружен: {_user.FullName}");
|
||||
|
||||
// Предзагружаем аватар пользователя
|
||||
Trace.WriteLine($"[EmployeeProfilePage] >>> Загрузка аватара, URL: {_user.DisplayAvatarUrl}");
|
||||
await ServiceProvider.ApiService.LoadUserAvatarAsync(_user);
|
||||
Trace.WriteLine($"[EmployeeProfilePage] IsAvatarLoaded: {_user.IsAvatarLoaded}, CachedPath: {_user.CachedAvatarFilePath}");
|
||||
|
||||
// Заполняем основную информацию
|
||||
FullNameLabel.Text = _user.FullName;
|
||||
PositionLabel.Text = _user.PositionName ?? "Должность не указана";
|
||||
AvatarImage.Source = _user.DisplayAvatarSource;
|
||||
Trace.WriteLine($"[EmployeeProfilePage] ✅ Аватар установлен");
|
||||
OnlineIndicator.IsVisible = _user.IsOnline;
|
||||
|
||||
// Email
|
||||
|
||||
@ -208,15 +208,6 @@ public partial class EmployeesPage : ContentPage
|
||||
{
|
||||
Trace.WriteLine("[EmployeesPage] >>> Начинаем предзагрузку аватаров...");
|
||||
await ServiceProvider.ApiService.PreloadUserAvatarsAsync(_allEmployees);
|
||||
|
||||
// Обновляем UI - уведомляем об изменении коллекции
|
||||
await MainThread.InvokeOnMainThreadAsync(() =>
|
||||
{
|
||||
// CollectionView автоматически обновится, т.к. ImageSource уже установлен в объектах
|
||||
EmployeesCollectionView.ItemsSource = null;
|
||||
EmployeesCollectionView.ItemsSource = _employees;
|
||||
});
|
||||
|
||||
Trace.WriteLine("[EmployeesPage] ✅ Аватары предзагружены");
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
|
||||
<!-- Заголовок -->
|
||||
<Label
|
||||
Text="Корпоративный портал"
|
||||
Text="HiRo"
|
||||
FontSize="28"
|
||||
FontAttributes="Bold"
|
||||
HorizontalOptions="Center"
|
||||
|
||||
@ -42,8 +42,18 @@ public partial class PostsPage
|
||||
var user = await ServiceProvider.ApiService.GetCurrentUserAsync();
|
||||
if (user != null)
|
||||
{
|
||||
Trace.WriteLine($"[PostsPage] >>> Загрузка аватара для {user.FullName}, URL: {user.DisplayAvatarUrl}");
|
||||
|
||||
await ServiceProvider.ApiService.LoadUserAvatarAsync(user);
|
||||
UserAvatarImage.Source = user.DisplayAvatarSource;
|
||||
|
||||
Trace.WriteLine($"[PostsPage] IsAvatarLoaded: {user.IsAvatarLoaded}, CachedPath: {user.CachedAvatarFilePath}");
|
||||
|
||||
// Обновляем на главном потоке
|
||||
await MainThread.InvokeOnMainThreadAsync(() =>
|
||||
{
|
||||
UserAvatarImage.Source = user.DisplayAvatarSource;
|
||||
Trace.WriteLine($"[PostsPage] ✅ Аватар установлен");
|
||||
});
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@ -250,13 +260,7 @@ public partial class PostsPage
|
||||
if (authors.Count > 0)
|
||||
{
|
||||
await ServiceProvider.ApiService.PreloadUserAvatarsAsync(authors);
|
||||
|
||||
// Обновляем UI - переустанавливаем ItemsSource
|
||||
await MainThread.InvokeOnMainThreadAsync(() =>
|
||||
{
|
||||
PostsCollectionView.ItemsSource = null;
|
||||
PostsCollectionView.ItemsSource = _posts;
|
||||
});
|
||||
// UI обновится автоматически через INotifyPropertyChanged
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@ -70,6 +70,7 @@
|
||||
<!-- Аватар -->
|
||||
<Border Style="{StaticResource AvatarXLarge}">
|
||||
<Image
|
||||
x:Name="ProfileAvatarImage"
|
||||
Source="{Binding DisplayImageSource}"
|
||||
Aspect="AspectFill"/>
|
||||
</Border>
|
||||
|
||||
@ -1,18 +1,32 @@
|
||||
using System.Diagnostics;
|
||||
using CORP_MAUI.ViewModels;
|
||||
|
||||
namespace CORP_MAUI.Pages;
|
||||
|
||||
public partial class ProfilePage : ContentPage
|
||||
{
|
||||
private ProfileViewModel _viewModel;
|
||||
private readonly ProfileViewModel _viewModel;
|
||||
|
||||
public ProfilePage()
|
||||
{
|
||||
InitializeComponent();
|
||||
_viewModel = new ProfileViewModel();
|
||||
_viewModel.PropertyChanged += OnViewModelPropertyChanged;
|
||||
BindingContext = _viewModel;
|
||||
}
|
||||
|
||||
private void OnViewModelPropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName == nameof(ProfileViewModel.DisplayImageSource))
|
||||
{
|
||||
MainThread.BeginInvokeOnMainThread(() =>
|
||||
{
|
||||
Trace.WriteLine($"[ProfilePage] >>> Обновление аватара через PropertyChanged");
|
||||
ProfileAvatarImage.Source = _viewModel.DisplayImageSource;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnAppearing()
|
||||
{
|
||||
base.OnAppearing();
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="456" height="456" viewBox="0 0 456 456" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="0" y="0" width="456" height="456" fill="#512BD4" />
|
||||
<rect x="0" y="0" width="456" height="456" fill="#0D6EFD" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 228 B After Width: | Height: | Size: 228 B |
@ -1,8 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="456" height="456" viewBox="0 0 456 456" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<path d="m 105.50037,281.60863 c -2.70293,0 -5.00091,-0.90042 -6.893127,-2.70209 -1.892214,-1.84778 -2.837901,-4.04181 -2.837901,-6.58209 0,-2.58722 0.945687,-4.80389 2.837901,-6.65167 1.892217,-1.84778 4.190197,-2.77167 6.893127,-2.77167 2.74819,0 5.06798,0.92389 6.96019,2.77167 1.93749,1.84778 2.90581,4.06445 2.90581,6.65167 0,2.54028 -0.96832,4.73431 -2.90581,6.58209 -1.89221,1.80167 -4.212,2.70209 -6.96019,2.70209 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" />
|
||||
<path d="M 213.56111,280.08446 H 195.99044 L 149.69953,207.0544 c -1.17121,-1.84778 -2.14037,-3.76515 -2.90581,-5.75126 h -0.40578 c 0.36051,2.12528 0.54076,6.67515 0.54076,13.6496 v 65.13172 h -15.54349 v -99.36009 h 18.71925 l 44.7374,71.29798 c 1.89222,2.95695 3.1087,4.98917 3.64945,6.09751 h 0.26996 c -0.45021,-2.6325 -0.67573,-7.09015 -0.67573,-13.37293 v -64.02256 h 15.47557 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" />
|
||||
<path d="m 289.25134,280.08446 h -54.40052 v -99.36009 h 52.23835 v 13.99669 h -36.15411 v 28.13085 h 33.31621 v 13.9271 h -33.31621 v 29.37835 h 38.31628 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" />
|
||||
<path d="M 366.56466,194.72106 H 338.7222 v 85.3634 h -16.08423 v -85.3634 h -27.77455 v -13.99669 h 71.70124 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" />
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="_Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="0 0 102.7 81.4" style="enable-background:new 0 0 102.7 81.4;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M20.4,23.3V5.6c0-1.2,1-2.2,2.2-2.2h56.9c1.2,0,2.2,1,2.2,2.2v17.7h3.7V2.2l-0.1-0.1l-1.9-1.9H18.8l-1.9,1.9
|
||||
l-0.1,0.1v21.1C16.8,23.3,20.4,23.3,20.4,23.3z"/>
|
||||
<path class="st0" d="M81.8,52.6V76c0,1.2-1,2.2-2.2,2.2h-57c-1.2,0-2.2-1-2.2-2.2V53l0,0v-0.5h-3.6V53l0,0v26.3l0.1,0.1l1.9,1.9
|
||||
h64.6l1.9-1.9l0.1-0.1V52.6H81.8L81.8,52.6z M17.2,79.2L17.2,79.2L17.2,79.2L17.2,79.2z"/>
|
||||
</g>
|
||||
<path class="st0" d="M76.2,50.6V29c0-1.3,0.3-2.3,1.1-3s1.7-1.1,3-1.1h14.5c2.8,0,4.7,0.7,5.8,2.1s1.6,3.6,1.6,6.6
|
||||
c0,6.1-1.9,9.1-5.7,9.1h-1.1v0.2l7.3,7.7h-10l-4.9-6.7c-0.1-0.1-0.2-0.3-0.5-0.6s-0.4-0.5-0.5-0.7s-0.2-0.3-0.4-0.6
|
||||
c-0.2-0.3-0.2-0.5-0.3-0.8C86,40.9,86,40.7,86,40.4v-0.5c0-1.9,1.2-2.9,3.7-2.9h1.2c1.1,0,1.9-0.2,2.3-0.6c0.4-0.4,0.6-1.2,0.6-2.3
|
||||
s-0.2-1.8-0.6-2.2s-1.2-0.6-2.3-0.6h-4.7c-1.1,0-1.6,0.5-1.6,1.6v17.7L76.2,50.6L76.2,50.6z"/>
|
||||
<path class="st0" d="M0,50.6V29c0-1.3,0.3-2.3,1.1-3s1.7-1.1,3-1.1h14.5c2.8,0,4.7,0.7,5.8,2.1s1.6,3.6,1.6,6.6
|
||||
c0,6.1-1.9,9.1-5.7,9.1H19v0.2l7.3,7.7h-10l-4.9-6.7c-0.1-0.1-0.2-0.3-0.5-0.6s-0.4-0.5-0.5-0.7S10.2,42.3,10,42
|
||||
c-0.1-0.3-0.2-0.5-0.3-0.8s-0.1-0.5-0.1-0.8v-0.5c0-1.9,1.2-2.9,3.7-2.9h1.2c1.1,0,1.9-0.2,2.3-0.6c0.4-0.4,0.6-1.2,0.6-2.3
|
||||
s-0.2-1.8-0.6-2.2s-1.2-0.6-2.3-0.6H9.9c-1.1,0-1.6,0.5-1.6,1.6v17.7L0,50.6L0,50.6z"/>
|
||||
<path class="st0" d="M74.2,52.2V30.8c0-2.9-2.3-5.2-5.2-5.2h-3.6v-7.3h2.1v3h4.2v-8.8h-4.2v2.7h-2.1V9.8l-0.3-0.1
|
||||
C55.8,7.4,46.4,7,37,9.7l-0.3,0.1v5.4h-2.1v-2.7h-4.2v8.8h4.2v-3h2.1v7.3h-3.6c-2.9,0-5.2,2.3-5.2,5.2v21.4h-2.1v6.5h6.7v4.4h-3.2
|
||||
c-0.8,0-1.4,0.6-1.4,1.4V73h22.5v-8.5c0-0.8-0.6-1.4-1.4-1.4h-3.2v-4.4h10.6v4.4h-3.2c-0.8,0-1.4,0.6-1.4,1.4V73h22.5v-8.5
|
||||
c0-0.8-0.6-1.4-1.4-1.4h-3.2v-4.4h6.7v-6.5L74.2,52.2L74.2,52.2z M57,14.6c1.7,0,3,1.4,3,3c0,0.4-0.1,0.8-0.2,1.2h-0.9
|
||||
c0.1-0.2,0.2-0.5,0.2-0.8c0-1.1-0.9-2-2-2s-2,0.9-2,2c0,0.3,0.1,0.5,0.2,0.8h-0.9C54.1,18.4,54,18,54,17.6
|
||||
C54,15.9,55.3,14.6,57,14.6z M45.2,14.6c1.7,0,3,1.4,3,3c0,0.4-0.1,0.8-0.2,1.2h-1c0.1-0.2,0.2-0.5,0.2-0.8c0-1.1-0.9-2-2-2
|
||||
s-2,0.9-2,2c0,0.3,0.1,0.5,0.2,0.8h-0.9c-0.2-0.4-0.2-0.8-0.2-1.2C42.2,15.9,43.5,14.6,45.2,14.6z M55.3,43h-0.4v0.4l-0.2,3.1
|
||||
l-18.5-6.4l10.5,0.2h0.4v-0.4l0.3-2.7l18.9,5.6L55.3,43L55.3,43z"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.5 KiB |
30
CORP-MAUI/Resources/Splash/Logo black.svg
Normal file
@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="_Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="0 0 102.7 81.4" style="enable-background:new 0 0 102.7 81.4;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#161619;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M20.4,23.3V5.6c0-1.2,1-2.2,2.2-2.2h56.9c1.2,0,2.2,1,2.2,2.2v17.7h3.7V2.2l-0.1-0.1l-1.9-1.9H18.8l-1.9,1.9
|
||||
l-0.1,0.1v21.1C16.8,23.3,20.4,23.3,20.4,23.3z"/>
|
||||
<path class="st0" d="M81.8,52.6V76c0,1.2-1,2.2-2.2,2.2h-57c-1.2,0-2.2-1-2.2-2.2V53l0,0v-0.5h-3.6V53l0,0v26.3l0.1,0.1l1.9,1.9
|
||||
h64.6l1.9-1.9l0.1-0.1V52.6H81.8L81.8,52.6z M17.2,79.2L17.2,79.2L17.2,79.2L17.2,79.2z"/>
|
||||
</g>
|
||||
<path class="st0" d="M76.2,50.6V29c0-1.3,0.3-2.3,1.1-3s1.7-1.1,3-1.1h14.5c2.8,0,4.7,0.7,5.8,2.1s1.6,3.6,1.6,6.6
|
||||
c0,6.1-1.9,9.1-5.7,9.1h-1.1v0.2l7.3,7.7h-10l-4.9-6.7c-0.1-0.1-0.2-0.3-0.5-0.6s-0.4-0.5-0.5-0.7s-0.2-0.3-0.4-0.6
|
||||
c-0.2-0.3-0.2-0.5-0.3-0.8C86,40.9,86,40.7,86,40.4v-0.5c0-1.9,1.2-2.9,3.7-2.9h1.2c1.1,0,1.9-0.2,2.3-0.6c0.4-0.4,0.6-1.2,0.6-2.3
|
||||
s-0.2-1.8-0.6-2.2s-1.2-0.6-2.3-0.6h-4.7c-1.1,0-1.6,0.5-1.6,1.6v17.7L76.2,50.6L76.2,50.6z"/>
|
||||
<path class="st0" d="M0,50.6V29c0-1.3,0.3-2.3,1.1-3s1.7-1.1,3-1.1h14.5c2.8,0,4.7,0.7,5.8,2.1s1.6,3.6,1.6,6.6
|
||||
c0,6.1-1.9,9.1-5.7,9.1H19v0.2l7.3,7.7h-10l-4.9-6.7c-0.1-0.1-0.2-0.3-0.5-0.6s-0.4-0.5-0.5-0.7S10.2,42.3,10,42
|
||||
c-0.1-0.3-0.2-0.5-0.3-0.8s-0.1-0.5-0.1-0.8v-0.5c0-1.9,1.2-2.9,3.7-2.9h1.2c1.1,0,1.9-0.2,2.3-0.6c0.4-0.4,0.6-1.2,0.6-2.3
|
||||
s-0.2-1.8-0.6-2.2s-1.2-0.6-2.3-0.6H9.9c-1.1,0-1.6,0.5-1.6,1.6v17.7L0,50.6L0,50.6z"/>
|
||||
<path class="st0" d="M74.2,52.2V30.8c0-2.9-2.3-5.2-5.2-5.2h-3.6v-7.3h2.1v3h4.2v-8.8h-4.2v2.7h-2.1V9.8l-0.3-0.1
|
||||
C55.8,7.4,46.4,7,37,9.7l-0.3,0.1v5.4h-2.1v-2.7h-4.2v8.8h4.2v-3h2.1v7.3h-3.6c-2.9,0-5.2,2.3-5.2,5.2v21.4h-2.1v6.5h6.7v4.4h-3.2
|
||||
c-0.8,0-1.4,0.6-1.4,1.4V73h22.5v-8.5c0-0.8-0.6-1.4-1.4-1.4h-3.2v-4.4h10.6v4.4h-3.2c-0.8,0-1.4,0.6-1.4,1.4V73h22.5v-8.5
|
||||
c0-0.8-0.6-1.4-1.4-1.4h-3.2v-4.4h6.7v-6.5L74.2,52.2L74.2,52.2z M57,14.6c1.7,0,3,1.4,3,3c0,0.4-0.1,0.8-0.2,1.2h-0.9
|
||||
c0.1-0.2,0.2-0.5,0.2-0.8c0-1.1-0.9-2-2-2s-2,0.9-2,2c0,0.3,0.1,0.5,0.2,0.8h-0.9C54.1,18.4,54,18,54,17.6
|
||||
C54,15.9,55.3,14.6,57,14.6z M45.2,14.6c1.7,0,3,1.4,3,3c0,0.4-0.1,0.8-0.2,1.2h-1c0.1-0.2,0.2-0.5,0.2-0.8c0-1.1-0.9-2-2-2
|
||||
s-2,0.9-2,2c0,0.3,0.1,0.5,0.2,0.8h-0.9c-0.2-0.4-0.2-0.8-0.2-1.2C42.2,15.9,43.5,14.6,45.2,14.6z M55.3,43h-0.4v0.4l-0.2,3.1
|
||||
l-18.5-6.4l10.5,0.2h0.4v-0.4l0.3-2.7l18.9,5.6L55.3,43L55.3,43z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
78
CORP-MAUI/Resources/Splash/Logo full black.svg
Normal file
@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="_Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="0 0 327.5 81.4" style="enable-background:new 0 0 327.5 81.4;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#161619;}
|
||||
</style>
|
||||
<path class="st0" d="M281.5,49h-5.8c-7,0-10.5-3.1-10.5-9.4V26.9h-4v-6.1h4v-9.1h8.3v9.1h8v6.1h-8v9.7c0,2.2,0.5,3.8,1.5,4.8
|
||||
c1,1,2.7,1.5,4.9,1.5h1.5L281.5,49L281.5,49z"/>
|
||||
<path class="st0" d="M296.6,17.8h-8.3v-6.1h8.3V17.8z M288.3,49V20.7h8.3V49H288.3z"/>
|
||||
<path class="st0" d="M327.5,49h-14.1c-4.5,0-7.6-1.2-9.3-3.6s-2.6-5.9-2.6-10.6s0.9-8.2,2.6-10.6c1.7-2.4,4.8-3.6,9.3-3.6H327v6.1
|
||||
h-10.3c-2.5,0-4.2,0.7-5.2,2s-1.4,3.3-1.4,6s0.5,4.7,1.4,6c0.9,1.3,2.6,2,5.2,2h10.9V49z"/>
|
||||
<path class="st0" d="M123.7,49V17.4c0-3.8,1.9-5.8,5.7-5.8h19.9c3.7,0,6.3,1,7.8,3c1.5,2,2.2,5.1,2.2,9.2c0,8.6-2.8,12.9-8.5,12.9
|
||||
h-2.7v0.3L160,49h-11.8l-8.4-9.7c-0.1-0.2-0.4-0.5-0.9-0.9c-0.4-0.4-0.8-0.8-1-1s-0.5-0.6-0.8-1c-0.3-0.4-0.5-0.8-0.6-1.2
|
||||
s-0.2-0.8-0.2-1.2v-0.8c0-1.3,0.4-2.2,1.3-2.6s2.3-0.7,4.2-0.7h3.1c1.7,0,2.9-0.4,3.5-1.3c0.6-0.9,0.9-2.3,0.9-4.3s-0.3-3.2-1-4
|
||||
c-0.7-0.8-1.9-1.1-3.7-1.1h-8.9c-0.9,0-1.6,0.2-1.9,0.6c-0.4,0.4-0.6,1-0.6,2V49L123.7,49L123.7,49z"/>
|
||||
<path class="st0" d="M165.3,23.5c2.4-2,6.4-3.1,12.1-3.1s9.7,1,12.1,3.1c2.4,2,3.6,5.8,3.6,11.4s-1.2,9.4-3.6,11.4s-6.4,3-12.1,3
|
||||
s-9.7-1-12.1-3c-2.4-2-3.6-5.8-3.6-11.4S162.9,25.5,165.3,23.5z M171.8,28.5c-1,1.3-1.6,3.4-1.6,6.3s0.5,5,1.6,6.3
|
||||
c1,1.3,2.9,2,5.6,2s4.6-0.7,5.6-2s1.6-3.4,1.6-6.3s-0.5-5-1.6-6.3s-2.9-2-5.6-2S172.9,27.2,171.8,28.5z"/>
|
||||
<path class="st0" d="M213,49h-11.1c-3.6,0-5.3-1.8-5.3-5.3v-32h8.3v9.1h8.2c4.3,0,7.3,1.2,9,3.6c1.7,2.4,2.6,5.9,2.6,10.5
|
||||
s-0.9,8.1-2.6,10.5C220.3,47.8,217.3,49,213,49L213,49z M204.8,26.9v13.9c0,0.8,0.2,1.4,0.5,1.7c0.3,0.3,0.9,0.5,1.6,0.5h3.6
|
||||
c2.2,0,3.7-0.7,4.4-2c0.7-1.3,1.1-3.3,1.1-6c0-1.2-0.1-2.2-0.2-3c-0.1-0.8-0.3-1.6-0.7-2.5c-0.4-0.8-0.9-1.5-1.6-1.9
|
||||
c-0.8-0.4-1.7-0.6-2.9-0.6L204.8,26.9L204.8,26.9z"/>
|
||||
<path class="st0" d="M230.8,23.5c2.4-2,6.4-3.1,12.1-3.1s9.7,1,12.1,3.1c2.4,2,3.6,5.8,3.6,11.4s-1.2,9.4-3.6,11.4s-6.4,3-12.1,3
|
||||
s-9.7-1-12.1-3c-2.4-2-3.6-5.8-3.6-11.4S228.4,25.5,230.8,23.5z M237.3,28.5c-1,1.3-1.6,3.4-1.6,6.3s0.5,5,1.6,6.3
|
||||
c1,1.3,2.9,2,5.6,2s4.6-0.7,5.6-2s1.6-3.4,1.6-6.3s-0.5-5-1.6-6.3s-2.9-2-5.6-2S238.4,27.2,237.3,28.5z"/>
|
||||
<g>
|
||||
<path class="st0" d="M20.4,23.3V5.6c0-1.2,1-2.2,2.2-2.2h56.9c1.2,0,2.2,1,2.2,2.2v17.7h3.7V2.2l-0.1-0.1l-1.9-1.9H18.8l-1.9,1.9
|
||||
l-0.1,0.1v21.1H20.4z"/>
|
||||
<path class="st0" d="M81.8,52.6V76c0,1.2-1,2.2-2.2,2.2H22.6c-1.2,0-2.2-1-2.2-2.2v-23l0,0v-0.5h-3.6v0.5l0,0v26.3l0.1,0.1l1.9,1.9
|
||||
h64.6l1.9-1.9l0.1-0.1V52.6L81.8,52.6L81.8,52.6z M17.2,79.2L17.2,79.2L17.2,79.2L17.2,79.2z"/>
|
||||
</g>
|
||||
<path class="st0" d="M76.2,50.6V29c0-1.3,0.3-2.3,1.1-3s1.7-1.1,3-1.1h14.5c2.8,0,4.7,0.7,5.8,2.1s1.6,3.6,1.6,6.6
|
||||
c0,6.1-1.9,9.1-5.7,9.1h-1.1v0.2l7.3,7.7h-10l-4.9-6.7c-0.1-0.1-0.2-0.3-0.5-0.6s-0.4-0.5-0.5-0.7c-0.1-0.2-0.2-0.3-0.4-0.6
|
||||
c-0.2-0.3-0.2-0.5-0.3-0.8c-0.1-0.3-0.1-0.5-0.1-0.8v-0.5c0-1.9,1.2-2.9,3.7-2.9h1.2c1.1,0,1.9-0.2,2.3-0.6c0.4-0.4,0.6-1.2,0.6-2.3
|
||||
s-0.2-1.8-0.6-2.2s-1.2-0.6-2.3-0.6h-4.7c-1.1,0-1.6,0.5-1.6,1.6v17.7L76.2,50.6L76.2,50.6z"/>
|
||||
<path class="st0" d="M0,50.6V29c0-1.3,0.3-2.3,1.1-3s1.7-1.1,3-1.1h14.5c2.8,0,4.7,0.7,5.8,2.1s1.6,3.6,1.6,6.6
|
||||
c0,6.1-1.9,9.1-5.7,9.1H19v0.2l7.3,7.7h-10l-4.9-6.7c-0.1-0.1-0.2-0.3-0.5-0.6s-0.4-0.5-0.5-0.7c-0.1-0.2-0.2-0.3-0.4-0.6
|
||||
c-0.1-0.3-0.2-0.5-0.3-0.8c-0.1-0.3-0.1-0.5-0.1-0.8v-0.5c0-1.9,1.2-2.9,3.7-2.9h1.2c1.1,0,1.9-0.2,2.3-0.6c0.4-0.4,0.6-1.2,0.6-2.3
|
||||
s-0.2-1.8-0.6-2.2s-1.2-0.6-2.3-0.6H9.9c-1.1,0-1.6,0.5-1.6,1.6v17.7L0,50.6L0,50.6z"/>
|
||||
<path class="st0" d="M74.2,52.2V30.8c0-2.9-2.3-5.2-5.2-5.2h-3.6v-7.3h2.1v3h4.2v-8.8h-4.2v2.7h-2.1V9.8l-0.3-0.1
|
||||
C55.8,7.4,46.4,7,37,9.7l-0.3,0.1v5.4h-2.1v-2.7h-4.2v8.8h4.2v-3h2.1v7.3h-3.6c-2.9,0-5.2,2.3-5.2,5.2v21.4h-2.1v6.5h6.7v4.4h-3.2
|
||||
c-0.8,0-1.4,0.6-1.4,1.4v8.5h22.5v-8.5c0-0.8-0.6-1.4-1.4-1.4h-3.2v-4.4h10.6v4.4h-3.2c-0.8,0-1.4,0.6-1.4,1.4v8.5h22.5v-8.5
|
||||
c0-0.8-0.6-1.4-1.4-1.4h-3.2v-4.4h6.7v-6.5H74.2L74.2,52.2z M57,14.6c1.7,0,3,1.4,3,3c0,0.4-0.1,0.8-0.2,1.2h-0.9
|
||||
c0.1-0.2,0.2-0.5,0.2-0.8c0-1.1-0.9-2-2-2s-2,0.9-2,2c0,0.3,0.1,0.5,0.2,0.8h-0.9C54.1,18.4,54,18,54,17.6
|
||||
C54,15.9,55.3,14.6,57,14.6z M45.2,14.6c1.7,0,3,1.4,3,3c0,0.4-0.1,0.8-0.2,1.2H47c0.1-0.2,0.2-0.5,0.2-0.8c0-1.1-0.9-2-2-2
|
||||
s-2,0.9-2,2c0,0.3,0.1,0.5,0.2,0.8h-0.9c-0.2-0.4-0.2-0.8-0.2-1.2C42.2,15.9,43.5,14.6,45.2,14.6z M55.3,43h-0.4l0,0.4l-0.2,3.1
|
||||
l-18.5-6.4l10.5,0.2h0.4l0-0.4l0.3-2.7l18.9,5.6L55.3,43L55.3,43z"/>
|
||||
<g>
|
||||
<path class="st0" d="M130.8,61.7c0.4-0.3,0.7-0.7,0.9-1.1c0.2-0.4,0.3-0.9,0.3-1.5c0-0.7-0.2-1.4-0.5-1.9s-0.8-0.9-1.4-1.2
|
||||
c-0.6-0.3-1.4-0.4-2.2-0.4h-4.1V67h2.1v-4.3h2l2.2,4.3h2.3v-0.1l-2.5-4.7C130.2,62.1,130.5,61.9,130.8,61.7L130.8,61.7z
|
||||
M125.9,57.4h2c0.4,0,0.8,0.1,1.1,0.2c0.3,0.2,0.5,0.4,0.7,0.6c0.1,0.3,0.2,0.6,0.2,1c0,0.3-0.1,0.7-0.2,0.9s-0.4,0.5-0.7,0.6
|
||||
c-0.3,0.2-0.7,0.2-1.1,0.2h-2C125.9,61.1,125.9,57.4,125.9,57.4z"/>
|
||||
<polygon class="st0" points="136,62 140.5,62 140.5,60.4 136,60.4 136,57.4 141.3,57.4 141.3,55.7 136,55.7 135.3,55.7 133.8,55.7
|
||||
133.8,67 135.3,67 136,67 141.3,67 141.3,65.3 136,65.3 "/>
|
||||
<polygon class="st0" points="151.3,57.4 151.3,55.7 147.8,55.7 145.7,55.7 142.2,55.7 142.2,57.4 145.7,57.4 145.7,67 147.8,67
|
||||
147.8,57.4 "/>
|
||||
<path class="st0" d="M156.6,55.7h-1.4L151,67h2.3l0.9-2.5h4.2l0.9,2.5h2.3l-4.2-11.3L156.6,55.7L156.6,55.7z M154.6,62.8l1.5-4.6
|
||||
l1.6,4.6H154.6L154.6,62.8z"/>
|
||||
<rect x="162.7" y="55.7" class="st0" width="2.1" height="11.3"/>
|
||||
<polygon class="st0" points="169.2,55.7 167.1,55.7 167.1,67 168.6,67 169.2,67 174.3,67 174.3,65.3 169.2,65.3 "/>
|
||||
<polygon class="st0" points="177.9,62 182.4,62 182.4,60.4 177.9,60.4 177.9,57.4 183.2,57.4 183.2,55.7 177.9,55.7 177.2,55.7
|
||||
175.7,55.7 175.7,67 177.2,67 177.9,67 183.2,67 183.2,65.3 177.9,65.3 "/>
|
||||
<path class="st0" d="M191.7,61.7c0.4-0.3,0.7-0.7,0.9-1.1c0.2-0.4,0.3-0.9,0.3-1.5c0-0.7-0.2-1.4-0.5-1.9s-0.8-0.9-1.4-1.2
|
||||
c-0.6-0.3-1.4-0.4-2.2-0.4h-4.1V67h2.1v-4.3h2L191,67h2.3v-0.1l-2.5-4.7C191.2,62.1,191.5,61.9,191.7,61.7L191.7,61.7z M186.8,57.4
|
||||
h2c0.4,0,0.8,0.1,1.1,0.2c0.3,0.2,0.5,0.4,0.7,0.6c0.1,0.3,0.2,0.6,0.2,1c0,0.3-0.1,0.7-0.2,0.9s-0.4,0.5-0.7,0.6
|
||||
c-0.3,0.2-0.7,0.2-1.1,0.2h-2C186.8,61.1,186.8,57.4,186.8,57.4z"/>
|
||||
<path class="st0" d="M202.6,62.8c-0.2-0.4-0.4-0.7-0.7-1c-0.3-0.3-0.7-0.5-1.2-0.8s-1-0.4-1.6-0.6c-0.4-0.1-0.7-0.2-1-0.4
|
||||
c-0.3-0.1-0.5-0.2-0.7-0.4c-0.2-0.1-0.3-0.3-0.4-0.5c-0.1-0.2-0.1-0.3-0.1-0.5c0-0.3,0.1-0.5,0.2-0.8s0.4-0.4,0.6-0.5
|
||||
s0.6-0.2,1.1-0.2s0.8,0.1,1.1,0.2c0.3,0.2,0.5,0.4,0.7,0.6s0.2,0.6,0.2,0.9h2.1c0-0.7-0.2-1.2-0.5-1.8c-0.3-0.5-0.8-0.9-1.4-1.2
|
||||
s-1.3-0.5-2.2-0.5c-0.6,0-1.2,0.1-1.7,0.2c-0.5,0.2-0.9,0.4-1.3,0.6c-0.4,0.3-0.6,0.6-0.9,1s-0.3,0.8-0.3,1.3s0.1,0.9,0.3,1.2
|
||||
c0.2,0.4,0.5,0.7,0.8,1s0.7,0.5,1.2,0.7c0.5,0.2,0.9,0.4,1.5,0.6c0.5,0.2,0.9,0.3,1.2,0.4s0.5,0.3,0.7,0.4c0.2,0.1,0.3,0.3,0.4,0.5
|
||||
c0.1,0.2,0.1,0.4,0.1,0.6c0,0.3-0.1,0.5-0.2,0.8s-0.4,0.4-0.6,0.5c-0.3,0.1-0.6,0.2-1.1,0.2c-0.3,0-0.6,0-0.9-0.1
|
||||
c-0.3-0.1-0.5-0.2-0.8-0.3c-0.2-0.2-0.4-0.4-0.5-0.6s-0.2-0.5-0.2-0.9h-2.1c0,0.6,0.1,1.1,0.4,1.6s0.6,0.8,1,1.1s0.9,0.5,1.5,0.7
|
||||
c0.5,0.2,1.1,0.2,1.6,0.2c0.6,0,1.2-0.1,1.7-0.2s0.9-0.3,1.3-0.6s0.6-0.6,0.8-1c0.2-0.4,0.3-0.8,0.3-1.3
|
||||
C202.8,63.6,202.8,63.2,202.6,62.8z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.2 KiB |
78
CORP-MAUI/Resources/Splash/Logo full white.svg
Normal file
@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="_Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="0 0 327.5 81.4" style="enable-background:new 0 0 327.5 81.4;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
</style>
|
||||
<path class="st0" d="M281.5,49h-5.8c-7,0-10.5-3.1-10.5-9.4V26.9h-4v-6.1h4v-9.1h8.3v9.1h8v6.1h-8v9.7c0,2.2,0.5,3.8,1.5,4.8
|
||||
s2.7,1.5,4.9,1.5h1.5L281.5,49L281.5,49z"/>
|
||||
<path class="st0" d="M296.6,17.8h-8.3v-6.1h8.3V17.8z M288.3,49V20.7h8.3V49H288.3z"/>
|
||||
<path class="st0" d="M327.5,49h-14.1c-4.5,0-7.6-1.2-9.3-3.6s-2.6-5.9-2.6-10.6s0.9-8.2,2.6-10.6s4.8-3.6,9.3-3.6H327v6.1h-10.3
|
||||
c-2.5,0-4.2,0.7-5.2,2s-1.4,3.3-1.4,6s0.5,4.7,1.4,6s2.6,2,5.2,2h10.9V49H327.5z"/>
|
||||
<path class="st0" d="M123.7,49V17.4c0-3.8,1.9-5.8,5.7-5.8h19.9c3.7,0,6.3,1,7.8,3s2.2,5.1,2.2,9.2c0,8.6-2.8,12.9-8.5,12.9h-2.7V37
|
||||
L160,49h-11.8l-8.4-9.7c-0.1-0.2-0.4-0.5-0.9-0.9c-0.4-0.4-0.8-0.8-1-1s-0.5-0.6-0.8-1s-0.5-0.8-0.6-1.2s-0.2-0.8-0.2-1.2v-0.8
|
||||
c0-1.3,0.4-2.2,1.3-2.6s2.3-0.7,4.2-0.7h3.1c1.7,0,2.9-0.4,3.5-1.3s0.9-2.3,0.9-4.3s-0.3-3.2-1-4s-1.9-1.1-3.7-1.1h-8.9
|
||||
c-0.9,0-1.6,0.2-1.9,0.6c-0.4,0.4-0.6,1-0.6,2V49H123.7L123.7,49z"/>
|
||||
<path class="st0" d="M165.3,23.5c2.4-2,6.4-3.1,12.1-3.1s9.7,1,12.1,3.1c2.4,2,3.6,5.8,3.6,11.4s-1.2,9.4-3.6,11.4s-6.4,3-12.1,3
|
||||
s-9.7-1-12.1-3c-2.4-2-3.6-5.8-3.6-11.4S162.9,25.5,165.3,23.5z M171.8,28.5c-1,1.3-1.6,3.4-1.6,6.3s0.5,5,1.6,6.3
|
||||
c1,1.3,2.9,2,5.6,2s4.6-0.7,5.6-2s1.6-3.4,1.6-6.3s-0.5-5-1.6-6.3s-2.9-2-5.6-2S172.9,27.2,171.8,28.5z"/>
|
||||
<path class="st0" d="M213,49h-11.1c-3.6,0-5.3-1.8-5.3-5.3v-32h8.3v9.1h8.2c4.3,0,7.3,1.2,9,3.6s2.6,5.9,2.6,10.5s-0.9,8.1-2.6,10.5
|
||||
C220.3,47.8,217.3,49,213,49L213,49z M204.8,26.9v13.9c0,0.8,0.2,1.4,0.5,1.7s0.9,0.5,1.6,0.5h3.6c2.2,0,3.7-0.7,4.4-2
|
||||
s1.1-3.3,1.1-6c0-1.2-0.1-2.2-0.2-3c-0.1-0.8-0.3-1.6-0.7-2.5c-0.4-0.8-0.9-1.5-1.6-1.9c-0.8-0.4-1.7-0.6-2.9-0.6L204.8,26.9
|
||||
L204.8,26.9z"/>
|
||||
<path class="st0" d="M230.8,23.5c2.4-2,6.4-3.1,12.1-3.1s9.7,1,12.1,3.1c2.4,2,3.6,5.8,3.6,11.4s-1.2,9.4-3.6,11.4s-6.4,3-12.1,3
|
||||
s-9.7-1-12.1-3c-2.4-2-3.6-5.8-3.6-11.4S228.4,25.5,230.8,23.5z M237.3,28.5c-1,1.3-1.6,3.4-1.6,6.3s0.5,5,1.6,6.3
|
||||
c1,1.3,2.9,2,5.6,2s4.6-0.7,5.6-2s1.6-3.4,1.6-6.3s-0.5-5-1.6-6.3s-2.9-2-5.6-2S238.4,27.2,237.3,28.5z"/>
|
||||
<g>
|
||||
<path class="st0" d="M20.4,23.3V5.6c0-1.2,1-2.2,2.2-2.2h56.9c1.2,0,2.2,1,2.2,2.2v17.7h3.7V2.2l-0.1-0.1l-1.9-1.9H18.8l-1.9,1.9
|
||||
l-0.1,0.1v21.1C16.8,23.3,20.4,23.3,20.4,23.3z"/>
|
||||
<path class="st0" d="M81.8,52.6V76c0,1.2-1,2.2-2.2,2.2h-57c-1.2,0-2.2-1-2.2-2.2V53l0,0v-0.5h-3.6V53l0,0v26.3l0.1,0.1l1.9,1.9
|
||||
h64.6l1.9-1.9l0.1-0.1V52.6H81.8L81.8,52.6z M17.2,79.2L17.2,79.2L17.2,79.2L17.2,79.2z"/>
|
||||
</g>
|
||||
<path class="st0" d="M76.2,50.6V29c0-1.3,0.3-2.3,1.1-3s1.7-1.1,3-1.1h14.5c2.8,0,4.7,0.7,5.8,2.1s1.6,3.6,1.6,6.6
|
||||
c0,6.1-1.9,9.1-5.7,9.1h-1.1v0.2l7.3,7.7h-10l-4.9-6.7c-0.1-0.1-0.2-0.3-0.5-0.6s-0.4-0.5-0.5-0.7s-0.2-0.3-0.4-0.6
|
||||
c-0.2-0.3-0.2-0.5-0.3-0.8C86,40.9,86,40.7,86,40.4v-0.5c0-1.9,1.2-2.9,3.7-2.9h1.2c1.1,0,1.9-0.2,2.3-0.6c0.4-0.4,0.6-1.2,0.6-2.3
|
||||
s-0.2-1.8-0.6-2.2s-1.2-0.6-2.3-0.6h-4.7c-1.1,0-1.6,0.5-1.6,1.6v17.7L76.2,50.6L76.2,50.6z"/>
|
||||
<path class="st0" d="M0,50.6V29c0-1.3,0.3-2.3,1.1-3s1.7-1.1,3-1.1h14.5c2.8,0,4.7,0.7,5.8,2.1s1.6,3.6,1.6,6.6
|
||||
c0,6.1-1.9,9.1-5.7,9.1H19v0.2l7.3,7.7h-10l-4.9-6.7c-0.1-0.1-0.2-0.3-0.5-0.6s-0.4-0.5-0.5-0.7S10.2,42.3,10,42
|
||||
c-0.1-0.3-0.2-0.5-0.3-0.8s-0.1-0.5-0.1-0.8v-0.5c0-1.9,1.2-2.9,3.7-2.9h1.2c1.1,0,1.9-0.2,2.3-0.6c0.4-0.4,0.6-1.2,0.6-2.3
|
||||
s-0.2-1.8-0.6-2.2s-1.2-0.6-2.3-0.6H9.9c-1.1,0-1.6,0.5-1.6,1.6v17.7L0,50.6L0,50.6z"/>
|
||||
<path class="st0" d="M74.2,52.2V30.8c0-2.9-2.3-5.2-5.2-5.2h-3.6v-7.3h2.1v3h4.2v-8.8h-4.2v2.7h-2.1V9.8l-0.3-0.1
|
||||
C55.8,7.4,46.4,7,37,9.7l-0.3,0.1v5.4h-2.1v-2.7h-4.2v8.8h4.2v-3h2.1v7.3h-3.6c-2.9,0-5.2,2.3-5.2,5.2v21.4h-2.1v6.5h6.7v4.4h-3.2
|
||||
c-0.8,0-1.4,0.6-1.4,1.4V73h22.5v-8.5c0-0.8-0.6-1.4-1.4-1.4h-3.2v-4.4h10.6v4.4h-3.2c-0.8,0-1.4,0.6-1.4,1.4V73h22.5v-8.5
|
||||
c0-0.8-0.6-1.4-1.4-1.4h-3.2v-4.4h6.7v-6.5L74.2,52.2L74.2,52.2z M57,14.6c1.7,0,3,1.4,3,3c0,0.4-0.1,0.8-0.2,1.2h-0.9
|
||||
c0.1-0.2,0.2-0.5,0.2-0.8c0-1.1-0.9-2-2-2s-2,0.9-2,2c0,0.3,0.1,0.5,0.2,0.8h-0.9C54.1,18.4,54,18,54,17.6
|
||||
C54,15.9,55.3,14.6,57,14.6z M45.2,14.6c1.7,0,3,1.4,3,3c0,0.4-0.1,0.8-0.2,1.2h-1c0.1-0.2,0.2-0.5,0.2-0.8c0-1.1-0.9-2-2-2
|
||||
s-2,0.9-2,2c0,0.3,0.1,0.5,0.2,0.8h-0.9c-0.2-0.4-0.2-0.8-0.2-1.2C42.2,15.9,43.5,14.6,45.2,14.6z M55.3,43h-0.4v0.4l-0.2,3.1
|
||||
l-18.5-6.4l10.5,0.2h0.4v-0.4l0.3-2.7l18.9,5.6L55.3,43L55.3,43z"/>
|
||||
<g>
|
||||
<path class="st0" d="M130.8,61.7c0.4-0.3,0.7-0.7,0.9-1.1c0.2-0.4,0.3-0.9,0.3-1.5c0-0.7-0.2-1.4-0.5-1.9s-0.8-0.9-1.4-1.2
|
||||
c-0.6-0.3-1.4-0.4-2.2-0.4h-4.1V67h2.1v-4.3h2l2.2,4.3h2.3v-0.1l-2.5-4.7C130.2,62.1,130.5,61.9,130.8,61.7L130.8,61.7z
|
||||
M125.9,57.4h2c0.4,0,0.8,0.1,1.1,0.2c0.3,0.2,0.5,0.4,0.7,0.6c0.1,0.3,0.2,0.6,0.2,1c0,0.3-0.1,0.7-0.2,0.9s-0.4,0.5-0.7,0.6
|
||||
c-0.3,0.2-0.7,0.2-1.1,0.2h-2C125.9,61.1,125.9,57.4,125.9,57.4z"/>
|
||||
<polygon class="st0" points="136,62 140.5,62 140.5,60.4 136,60.4 136,57.4 141.3,57.4 141.3,55.7 136,55.7 135.3,55.7 133.8,55.7
|
||||
133.8,67 135.3,67 136,67 141.3,67 141.3,65.3 136,65.3 "/>
|
||||
<polygon class="st0" points="151.3,57.4 151.3,55.7 147.8,55.7 145.7,55.7 142.2,55.7 142.2,57.4 145.7,57.4 145.7,67 147.8,67
|
||||
147.8,57.4 "/>
|
||||
<path class="st0" d="M156.6,55.7h-1.4L151,67h2.3l0.9-2.5h4.2l0.9,2.5h2.3l-4.2-11.3H156.6L156.6,55.7z M154.6,62.8l1.5-4.6
|
||||
l1.6,4.6H154.6L154.6,62.8z"/>
|
||||
<rect x="162.7" y="55.7" class="st0" width="2.1" height="11.3"/>
|
||||
<polygon class="st0" points="169.2,55.7 167.1,55.7 167.1,67 168.6,67 169.2,67 174.3,67 174.3,65.3 169.2,65.3 "/>
|
||||
<polygon class="st0" points="177.9,62 182.4,62 182.4,60.4 177.9,60.4 177.9,57.4 183.2,57.4 183.2,55.7 177.9,55.7 177.2,55.7
|
||||
175.7,55.7 175.7,67 177.2,67 177.9,67 183.2,67 183.2,65.3 177.9,65.3 "/>
|
||||
<path class="st0" d="M191.7,61.7c0.4-0.3,0.7-0.7,0.9-1.1c0.2-0.4,0.3-0.9,0.3-1.5c0-0.7-0.2-1.4-0.5-1.9s-0.8-0.9-1.4-1.2
|
||||
c-0.6-0.3-1.4-0.4-2.2-0.4h-4.1V67h2.1v-4.3h2L191,67h2.3v-0.1l-2.5-4.7C191.2,62.1,191.5,61.9,191.7,61.7L191.7,61.7z M186.8,57.4
|
||||
h2c0.4,0,0.8,0.1,1.1,0.2c0.3,0.2,0.5,0.4,0.7,0.6c0.1,0.3,0.2,0.6,0.2,1c0,0.3-0.1,0.7-0.2,0.9s-0.4,0.5-0.7,0.6
|
||||
c-0.3,0.2-0.7,0.2-1.1,0.2h-2C186.8,61.1,186.8,57.4,186.8,57.4z"/>
|
||||
<path class="st0" d="M202.6,62.8c-0.2-0.4-0.4-0.7-0.7-1s-0.7-0.5-1.2-0.8s-1-0.4-1.6-0.6c-0.4-0.1-0.7-0.2-1-0.4
|
||||
c-0.3-0.1-0.5-0.2-0.7-0.4c-0.2-0.1-0.3-0.3-0.4-0.5c-0.1-0.2-0.1-0.3-0.1-0.5c0-0.3,0.1-0.5,0.2-0.8s0.4-0.4,0.6-0.5
|
||||
s0.6-0.2,1.1-0.2s0.8,0.1,1.1,0.2c0.3,0.2,0.5,0.4,0.7,0.6s0.2,0.6,0.2,0.9h2.1c0-0.7-0.2-1.2-0.5-1.8c-0.3-0.5-0.8-0.9-1.4-1.2
|
||||
s-1.3-0.5-2.2-0.5c-0.6,0-1.2,0.1-1.7,0.2c-0.5,0.2-0.9,0.4-1.3,0.6c-0.4,0.3-0.6,0.6-0.9,1s-0.3,0.8-0.3,1.3s0.1,0.9,0.3,1.2
|
||||
c0.2,0.4,0.5,0.7,0.8,1s0.7,0.5,1.2,0.7s0.9,0.4,1.5,0.6c0.5,0.2,0.9,0.3,1.2,0.4s0.5,0.3,0.7,0.4c0.2,0.1,0.3,0.3,0.4,0.5
|
||||
c0.1,0.2,0.1,0.4,0.1,0.6c0,0.3-0.1,0.5-0.2,0.8s-0.4,0.4-0.6,0.5c-0.3,0.1-0.6,0.2-1.1,0.2c-0.3,0-0.6,0-0.9-0.1
|
||||
c-0.3-0.1-0.5-0.2-0.8-0.3c-0.2-0.2-0.4-0.4-0.5-0.6s-0.2-0.5-0.2-0.9h-2.1c0,0.6,0.1,1.1,0.4,1.6s0.6,0.8,1,1.1s0.9,0.5,1.5,0.7
|
||||
c0.5,0.2,1.1,0.2,1.6,0.2c0.6,0,1.2-0.1,1.7-0.2s0.9-0.3,1.3-0.6s0.6-0.6,0.8-1s0.3-0.8,0.3-1.3C202.8,63.6,202.8,63.2,202.6,62.8z
|
||||
"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.1 KiB |
54
CORP-MAUI/Resources/Splash/Logo text black.svg
Normal file
@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="_Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="0 0 203.8 55.4" style="enable-background:new 0 0 203.8 55.4;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#161619;}
|
||||
</style>
|
||||
<path class="st0" d="M157.8,37.4H152c-7,0-10.5-3.1-10.5-9.4V15.3h-4V9.2h4V0.1h8.3v9.1h8v6.1h-8V25c0,2.2,0.5,3.8,1.5,4.8
|
||||
s2.7,1.5,4.9,1.5h1.5L157.8,37.4L157.8,37.4z"/>
|
||||
<path class="st0" d="M172.9,6.2h-8.3V0.1h8.3V6.2z M164.6,37.4V9.1h8.3v28.3H164.6z"/>
|
||||
<path class="st0" d="M203.8,37.4h-14.1c-4.5,0-7.6-1.2-9.3-3.6s-2.6-5.9-2.6-10.6s0.9-8.2,2.6-10.6s4.8-3.6,9.3-3.6h13.6v6.1H193
|
||||
c-2.5,0-4.2,0.7-5.2,2s-1.4,3.3-1.4,6s0.5,4.7,1.4,6s2.6,2,5.2,2h10.9v6.3H203.8z"/>
|
||||
<path class="st0" d="M0,37.4V5.8C0,2,1.9,0,5.7,0h19.9c3.7,0,6.3,1,7.8,3s2.2,5.1,2.2,9.2c0,8.6-2.8,12.9-8.5,12.9h-2.7v0.3l11.9,12
|
||||
H24.5l-8.4-9.7c-0.1-0.2-0.4-0.5-0.9-0.9c-0.4-0.4-0.8-0.8-1-1s-0.5-0.6-0.8-1s-0.5-0.8-0.6-1.2s-0.2-0.8-0.2-1.2v-0.8
|
||||
c0-1.3,0.4-2.2,1.3-2.6c0.9-0.4,2.3-0.7,4.2-0.7h3.1c1.7,0,2.9-0.4,3.5-1.3c0.6-0.9,0.9-2.3,0.9-4.3s-0.3-3.2-1-4s-1.9-1.1-3.7-1.1
|
||||
H12c-0.9,0-1.6,0.2-1.9,0.6c-0.4,0.4-0.6,1-0.6,2v27.2H0L0,37.4z"/>
|
||||
<path class="st0" d="M41.6,11.9c2.4-2,6.4-3.1,12.1-3.1s9.7,1,12.1,3.1c2.4,2,3.6,5.8,3.6,11.4s-1.2,9.4-3.6,11.4s-6.4,3-12.1,3
|
||||
s-9.7-1-12.1-3c-2.4-2-3.6-5.8-3.6-11.4S39.2,13.9,41.6,11.9z M48.1,16.9c-1,1.3-1.6,3.4-1.6,6.3c0,2.9,0.5,5,1.6,6.3
|
||||
c1,1.3,2.9,2,5.6,2s4.6-0.7,5.6-2s1.6-3.4,1.6-6.3s-0.5-5-1.6-6.3s-2.9-2-5.6-2S49.2,15.6,48.1,16.9z"/>
|
||||
<path class="st0" d="M89.3,37.4H78.2c-3.6,0-5.3-1.8-5.3-5.3v-32h8.3v9.1h8.2c4.3,0,7.3,1.2,9,3.6s2.6,5.9,2.6,10.5
|
||||
s-0.9,8.1-2.6,10.5C96.6,36.2,93.6,37.4,89.3,37.4L89.3,37.4z M81.1,15.3v13.9c0,0.8,0.2,1.4,0.5,1.7s0.9,0.5,1.6,0.5h3.6
|
||||
c2.2,0,3.7-0.7,4.4-2s1.1-3.3,1.1-6c0-1.2-0.1-2.2-0.2-3c-0.1-0.8-0.3-1.6-0.7-2.5c-0.4-0.8-0.9-1.5-1.6-1.9
|
||||
c-0.8-0.4-1.7-0.6-2.9-0.6L81.1,15.3L81.1,15.3z"/>
|
||||
<path class="st0" d="M107.1,11.9c2.4-2,6.4-3.1,12.1-3.1s9.7,1,12.1,3.1c2.4,2,3.6,5.8,3.6,11.4s-1.2,9.4-3.6,11.4s-6.4,3-12.1,3
|
||||
s-9.7-1-12.1-3c-2.4-2-3.6-5.8-3.6-11.4S104.7,13.9,107.1,11.9z M113.6,16.9c-1,1.3-1.6,3.4-1.6,6.3c0,2.9,0.5,5,1.6,6.3
|
||||
c1,1.3,2.9,2,5.6,2s4.6-0.7,5.6-2s1.6-3.4,1.6-6.3s-0.5-5-1.6-6.3s-2.9-2-5.6-2S114.7,15.6,113.6,16.9z"/>
|
||||
<g>
|
||||
<path class="st0" d="M7.1,50.1C7.5,49.8,7.8,49.4,8,49c0.2-0.4,0.3-0.9,0.3-1.5c0-0.7-0.2-1.4-0.5-1.9S7,44.7,6.4,44.4
|
||||
C5.8,44.1,5,44,4.2,44H0.1v11.4h2.1v-4.3h2l2.2,4.3h2.3v-0.1l-2.5-4.7C6.5,50.5,6.8,50.3,7.1,50.1L7.1,50.1z M2.2,45.8h2
|
||||
c0.4,0,0.8,0.1,1.1,0.2c0.3,0.2,0.5,0.4,0.7,0.6c0.1,0.3,0.2,0.6,0.2,1c0,0.3-0.1,0.7-0.2,0.9S5.6,49,5.3,49.1
|
||||
c-0.3,0.2-0.7,0.2-1.1,0.2h-2C2.2,49.5,2.2,45.8,2.2,45.8z"/>
|
||||
<polygon class="st0" points="12.3,50.4 16.8,50.4 16.8,48.8 12.3,48.8 12.3,45.8 17.6,45.8 17.6,44.1 12.3,44.1 11.6,44.1
|
||||
10.1,44.1 10.1,55.4 11.6,55.4 12.3,55.4 17.6,55.4 17.6,53.7 12.3,53.7 "/>
|
||||
<polygon class="st0" points="27.6,45.8 27.6,44.1 24.1,44.1 22,44.1 18.5,44.1 18.5,45.8 22,45.8 22,55.4 24.1,55.4 24.1,45.8 "/>
|
||||
<path class="st0" d="M32.9,44.1h-1.4l-4.2,11.3h2.3l0.9-2.5h4.2l0.9,2.5h2.3l-4.2-11.3H32.9L32.9,44.1z M30.9,51.2l1.5-4.6l1.6,4.6
|
||||
H30.9L30.9,51.2z"/>
|
||||
<rect x="39" y="44.1" class="st0" width="2.1" height="11.3"/>
|
||||
<polygon class="st0" points="45.5,44.1 43.4,44.1 43.4,55.4 44.9,55.4 45.5,55.4 50.6,55.4 50.6,53.7 45.5,53.7 "/>
|
||||
<polygon class="st0" points="54.2,50.4 58.7,50.4 58.7,48.8 54.2,48.8 54.2,45.8 59.5,45.8 59.5,44.1 54.2,44.1 53.5,44.1 52,44.1
|
||||
52,55.4 53.5,55.4 54.2,55.4 59.5,55.4 59.5,53.7 54.2,53.7 "/>
|
||||
<path class="st0" d="M68,50.1c0.4-0.3,0.7-0.7,0.9-1.1c0.2-0.4,0.3-0.9,0.3-1.5c0-0.7-0.2-1.4-0.5-1.9s-0.8-0.9-1.4-1.2
|
||||
c-0.6-0.3-1.4-0.4-2.2-0.4H61v11.4h2.1v-4.3h2l2.2,4.3h2.3v-0.1l-2.5-4.7C67.5,50.5,67.8,50.3,68,50.1L68,50.1z M63.1,45.8h2
|
||||
c0.4,0,0.8,0.1,1.1,0.2c0.3,0.2,0.5,0.4,0.7,0.6c0.1,0.3,0.2,0.6,0.2,1c0,0.3-0.1,0.7-0.2,0.9s-0.4,0.5-0.7,0.6
|
||||
c-0.3,0.2-0.7,0.2-1.1,0.2h-2C63.1,49.5,63.1,45.8,63.1,45.8z"/>
|
||||
<path class="st0" d="M78.9,51.2c-0.2-0.4-0.4-0.7-0.7-1s-0.7-0.5-1.2-0.8s-1-0.4-1.6-0.6c-0.4-0.1-0.7-0.2-1-0.4
|
||||
c-0.3-0.1-0.5-0.2-0.7-0.4c-0.2-0.1-0.3-0.3-0.4-0.5c-0.1-0.2-0.1-0.3-0.1-0.5c0-0.3,0.1-0.5,0.2-0.8s0.4-0.4,0.6-0.5
|
||||
s0.6-0.2,1.1-0.2s0.8,0.1,1.1,0.2c0.3,0.2,0.5,0.4,0.7,0.6s0.2,0.6,0.2,0.9h2.1c0-0.7-0.2-1.2-0.5-1.8c-0.3-0.5-0.8-0.9-1.4-1.2
|
||||
s-1.3-0.5-2.2-0.5c-0.6,0-1.2,0.1-1.7,0.2c-0.5,0.2-0.9,0.4-1.3,0.6c-0.4,0.3-0.6,0.6-0.9,1s-0.3,0.8-0.3,1.3s0.1,0.9,0.3,1.2
|
||||
c0.2,0.4,0.5,0.7,0.8,1s0.7,0.5,1.2,0.7s0.9,0.4,1.5,0.6c0.5,0.2,0.9,0.3,1.2,0.4s0.5,0.3,0.7,0.4c0.2,0.1,0.3,0.3,0.4,0.5
|
||||
c0.1,0.2,0.1,0.4,0.1,0.6c0,0.3-0.1,0.5-0.2,0.8s-0.4,0.4-0.6,0.5c-0.3,0.1-0.6,0.2-1.1,0.2c-0.3,0-0.6,0-0.9-0.1
|
||||
c-0.3-0.1-0.5-0.2-0.8-0.3c-0.2-0.2-0.4-0.4-0.5-0.6s-0.2-0.5-0.2-0.9h-2.1c0,0.6,0.1,1.1,0.4,1.6s0.6,0.8,1,1.1s0.9,0.5,1.5,0.7
|
||||
c0.5,0.2,1.1,0.2,1.6,0.2c0.6,0,1.2-0.1,1.7-0.2s0.9-0.3,1.3-0.6s0.6-0.6,0.8-1s0.3-0.8,0.3-1.3C79.1,52,79.1,51.6,78.9,51.2z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
54
CORP-MAUI/Resources/Splash/Logo text white.svg
Normal file
@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="_Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="0 0 203.8 55.4" style="enable-background:new 0 0 203.8 55.4;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
</style>
|
||||
<path class="st0" d="M157.8,37.4H152c-7,0-10.5-3.1-10.5-9.4V15.3h-4V9.2h4V0.1h8.3v9.1h8v6.1h-8V25c0,2.2,0.5,3.8,1.5,4.8
|
||||
s2.7,1.5,4.9,1.5h1.5L157.8,37.4L157.8,37.4z"/>
|
||||
<path class="st0" d="M172.9,6.2h-8.3V0.1h8.3V6.2z M164.6,37.4V9.1h8.3v28.3H164.6z"/>
|
||||
<path class="st0" d="M203.8,37.4h-14.1c-4.5,0-7.6-1.2-9.3-3.6s-2.6-5.9-2.6-10.6s0.9-8.2,2.6-10.6s4.8-3.6,9.3-3.6h13.6v6.1H193
|
||||
c-2.5,0-4.2,0.7-5.2,2s-1.4,3.3-1.4,6s0.5,4.7,1.4,6s2.6,2,5.2,2h10.9L203.8,37.4L203.8,37.4z"/>
|
||||
<path class="st0" d="M0,37.4V5.8C0,2,1.9,0,5.7,0h19.9c3.7,0,6.3,1,7.8,3s2.2,5.1,2.2,9.2c0,8.6-2.8,12.9-8.5,12.9h-2.7v0.3l11.9,12
|
||||
H24.5l-8.4-9.7c-0.1-0.2-0.4-0.5-0.9-0.9c-0.4-0.4-0.8-0.8-1-1s-0.5-0.6-0.8-1s-0.5-0.8-0.6-1.2s-0.2-0.8-0.2-1.2v-0.8
|
||||
c0-1.3,0.4-2.2,1.3-2.6c0.9-0.4,2.3-0.7,4.2-0.7h3.1c1.7,0,2.9-0.4,3.5-1.3s0.9-2.3,0.9-4.3s-0.3-3.2-1-4s-1.9-1.1-3.7-1.1H12
|
||||
c-0.9,0-1.6,0.2-1.9,0.6c-0.4,0.4-0.6,1-0.6,2v27.2L0,37.4L0,37.4z"/>
|
||||
<path class="st0" d="M41.6,11.9c2.4-2,6.4-3.1,12.1-3.1s9.7,1,12.1,3.1c2.4,2,3.6,5.8,3.6,11.4s-1.2,9.4-3.6,11.4s-6.4,3-12.1,3
|
||||
s-9.7-1-12.1-3c-2.4-2-3.6-5.8-3.6-11.4S39.2,13.9,41.6,11.9z M48.1,16.9c-1,1.3-1.6,3.4-1.6,6.3s0.5,5,1.6,6.3c1,1.3,2.9,2,5.6,2
|
||||
s4.6-0.7,5.6-2s1.6-3.4,1.6-6.3s-0.5-5-1.6-6.3s-2.9-2-5.6-2S49.2,15.6,48.1,16.9z"/>
|
||||
<path class="st0" d="M89.3,37.4H78.2c-3.6,0-5.3-1.8-5.3-5.3v-32h8.3v9.1h8.2c4.3,0,7.3,1.2,9,3.6s2.6,5.9,2.6,10.5
|
||||
s-0.9,8.1-2.6,10.5C96.6,36.2,93.6,37.4,89.3,37.4L89.3,37.4z M81.1,15.3v13.9c0,0.8,0.2,1.4,0.5,1.7s0.9,0.5,1.6,0.5h3.6
|
||||
c2.2,0,3.7-0.7,4.4-2s1.1-3.3,1.1-6c0-1.2-0.1-2.2-0.2-3s-0.3-1.6-0.7-2.5c-0.4-0.8-0.9-1.5-1.6-1.9c-0.8-0.4-1.7-0.6-2.9-0.6
|
||||
L81.1,15.3L81.1,15.3z"/>
|
||||
<path class="st0" d="M107.1,11.9c2.4-2,6.4-3.1,12.1-3.1s9.7,1,12.1,3.1c2.4,2,3.6,5.8,3.6,11.4s-1.2,9.4-3.6,11.4s-6.4,3-12.1,3
|
||||
s-9.7-1-12.1-3s-3.6-5.8-3.6-11.4S104.7,13.9,107.1,11.9z M113.6,16.9c-1,1.3-1.6,3.4-1.6,6.3s0.5,5,1.6,6.3c1,1.3,2.9,2,5.6,2
|
||||
s4.6-0.7,5.6-2s1.6-3.4,1.6-6.3s-0.5-5-1.6-6.3s-2.9-2-5.6-2S114.7,15.6,113.6,16.9z"/>
|
||||
<g>
|
||||
<path class="st0" d="M7.1,50.1C7.5,49.8,7.8,49.4,8,49s0.3-0.9,0.3-1.5c0-0.7-0.2-1.4-0.5-1.9S7,44.7,6.4,44.4
|
||||
C5.8,44.1,5,44,4.2,44H0.1v11.4h2.1v-4.3h2l2.2,4.3h2.3v-0.1l-2.5-4.7C6.5,50.5,6.8,50.3,7.1,50.1L7.1,50.1z M2.2,45.8h2
|
||||
c0.4,0,0.8,0.1,1.1,0.2c0.3,0.2,0.5,0.4,0.7,0.6c0.1,0.3,0.2,0.6,0.2,1c0,0.3-0.1,0.7-0.2,0.9S5.6,49,5.3,49.1
|
||||
c-0.3,0.2-0.7,0.2-1.1,0.2h-2C2.2,49.5,2.2,45.8,2.2,45.8z"/>
|
||||
<polygon class="st0" points="12.3,50.4 16.8,50.4 16.8,48.8 12.3,48.8 12.3,45.8 17.6,45.8 17.6,44.1 12.3,44.1 11.6,44.1
|
||||
10.1,44.1 10.1,55.4 11.6,55.4 12.3,55.4 17.6,55.4 17.6,53.7 12.3,53.7 "/>
|
||||
<polygon class="st0" points="27.6,45.8 27.6,44.1 24.1,44.1 22,44.1 18.5,44.1 18.5,45.8 22,45.8 22,55.4 24.1,55.4 24.1,45.8 "/>
|
||||
<path class="st0" d="M32.9,44.1h-1.4l-4.2,11.3h2.3l0.9-2.5h4.2l0.9,2.5h2.3l-4.2-11.3H32.9L32.9,44.1z M30.9,51.2l1.5-4.6l1.6,4.6
|
||||
H30.9L30.9,51.2z"/>
|
||||
<rect x="39" y="44.1" class="st0" width="2.1" height="11.3"/>
|
||||
<polygon class="st0" points="45.5,44.1 43.4,44.1 43.4,55.4 44.9,55.4 45.5,55.4 50.6,55.4 50.6,53.7 45.5,53.7 "/>
|
||||
<polygon class="st0" points="54.2,50.4 58.7,50.4 58.7,48.8 54.2,48.8 54.2,45.8 59.5,45.8 59.5,44.1 54.2,44.1 53.5,44.1 52,44.1
|
||||
52,55.4 53.5,55.4 54.2,55.4 59.5,55.4 59.5,53.7 54.2,53.7 "/>
|
||||
<path class="st0" d="M68,50.1c0.4-0.3,0.7-0.7,0.9-1.1c0.2-0.4,0.3-0.9,0.3-1.5c0-0.7-0.2-1.4-0.5-1.9s-0.8-0.9-1.4-1.2
|
||||
S65.9,44,65.1,44H61v11.4h2.1v-4.3h2l2.2,4.3h2.3v-0.1l-2.5-4.7C67.5,50.5,67.8,50.3,68,50.1L68,50.1z M63.1,45.8h2
|
||||
c0.4,0,0.8,0.1,1.1,0.2c0.3,0.2,0.5,0.4,0.7,0.6c0.1,0.3,0.2,0.6,0.2,1c0,0.3-0.1,0.7-0.2,0.9s-0.4,0.5-0.7,0.6
|
||||
c-0.3,0.2-0.7,0.2-1.1,0.2h-2C63.1,49.5,63.1,45.8,63.1,45.8z"/>
|
||||
<path class="st0" d="M78.9,51.2c-0.2-0.4-0.4-0.7-0.7-1s-0.7-0.5-1.2-0.8s-1-0.4-1.6-0.6c-0.4-0.1-0.7-0.2-1-0.4
|
||||
c-0.3-0.1-0.5-0.2-0.7-0.4c-0.2-0.1-0.3-0.3-0.4-0.5s-0.1-0.3-0.1-0.5c0-0.3,0.1-0.5,0.2-0.8s0.4-0.4,0.6-0.5s0.6-0.2,1.1-0.2
|
||||
s0.8,0.1,1.1,0.2c0.3,0.2,0.5,0.4,0.7,0.6s0.2,0.6,0.2,0.9h2.1c0-0.7-0.2-1.2-0.5-1.8c-0.3-0.5-0.8-0.9-1.4-1.2s-1.3-0.5-2.2-0.5
|
||||
c-0.6,0-1.2,0.1-1.7,0.2c-0.5,0.2-0.9,0.4-1.3,0.6c-0.4,0.3-0.6,0.6-0.9,1s-0.3,0.8-0.3,1.3s0.1,0.9,0.3,1.2c0.2,0.4,0.5,0.7,0.8,1
|
||||
s0.7,0.5,1.2,0.7s0.9,0.4,1.5,0.6c0.5,0.2,0.9,0.3,1.2,0.4s0.5,0.3,0.7,0.4c0.2,0.1,0.3,0.3,0.4,0.5s0.1,0.4,0.1,0.6
|
||||
c0,0.3-0.1,0.5-0.2,0.8s-0.4,0.4-0.6,0.5c-0.3,0.1-0.6,0.2-1.1,0.2c-0.3,0-0.6,0-0.9-0.1s-0.5-0.2-0.8-0.3
|
||||
c-0.2-0.2-0.4-0.4-0.5-0.6s-0.2-0.5-0.2-0.9h-2.1c0,0.6,0.1,1.1,0.4,1.6s0.6,0.8,1,1.1s0.9,0.5,1.5,0.7c0.5,0.2,1.1,0.2,1.6,0.2
|
||||
c0.6,0,1.2-0.1,1.7-0.2s0.9-0.3,1.3-0.6s0.6-0.6,0.8-1s0.3-0.8,0.3-1.3C79.1,52,79.1,51.6,78.9,51.2z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
30
CORP-MAUI/Resources/Splash/Logo white.svg
Normal file
@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="_Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="0 0 102.7 81.4" style="enable-background:new 0 0 102.7 81.4;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M20.4,23.3V5.6c0-1.2,1-2.2,2.2-2.2h56.9c1.2,0,2.2,1,2.2,2.2v17.7h3.7V2.2l-0.1-0.1l-1.9-1.9H18.8l-1.9,1.9
|
||||
l-0.1,0.1v21.1C16.8,23.3,20.4,23.3,20.4,23.3z"/>
|
||||
<path class="st0" d="M81.8,52.6V76c0,1.2-1,2.2-2.2,2.2h-57c-1.2,0-2.2-1-2.2-2.2V53l0,0v-0.5h-3.6V53l0,0v26.3l0.1,0.1l1.9,1.9
|
||||
h64.6l1.9-1.9l0.1-0.1V52.6H81.8L81.8,52.6z M17.2,79.2L17.2,79.2L17.2,79.2L17.2,79.2z"/>
|
||||
</g>
|
||||
<path class="st0" d="M76.2,50.6V29c0-1.3,0.3-2.3,1.1-3s1.7-1.1,3-1.1h14.5c2.8,0,4.7,0.7,5.8,2.1s1.6,3.6,1.6,6.6
|
||||
c0,6.1-1.9,9.1-5.7,9.1h-1.1v0.2l7.3,7.7h-10l-4.9-6.7c-0.1-0.1-0.2-0.3-0.5-0.6s-0.4-0.5-0.5-0.7s-0.2-0.3-0.4-0.6
|
||||
c-0.2-0.3-0.2-0.5-0.3-0.8C86,40.9,86,40.7,86,40.4v-0.5c0-1.9,1.2-2.9,3.7-2.9h1.2c1.1,0,1.9-0.2,2.3-0.6c0.4-0.4,0.6-1.2,0.6-2.3
|
||||
s-0.2-1.8-0.6-2.2s-1.2-0.6-2.3-0.6h-4.7c-1.1,0-1.6,0.5-1.6,1.6v17.7L76.2,50.6L76.2,50.6z"/>
|
||||
<path class="st0" d="M0,50.6V29c0-1.3,0.3-2.3,1.1-3s1.7-1.1,3-1.1h14.5c2.8,0,4.7,0.7,5.8,2.1s1.6,3.6,1.6,6.6
|
||||
c0,6.1-1.9,9.1-5.7,9.1H19v0.2l7.3,7.7h-10l-4.9-6.7c-0.1-0.1-0.2-0.3-0.5-0.6s-0.4-0.5-0.5-0.7S10.2,42.3,10,42
|
||||
c-0.1-0.3-0.2-0.5-0.3-0.8s-0.1-0.5-0.1-0.8v-0.5c0-1.9,1.2-2.9,3.7-2.9h1.2c1.1,0,1.9-0.2,2.3-0.6c0.4-0.4,0.6-1.2,0.6-2.3
|
||||
s-0.2-1.8-0.6-2.2s-1.2-0.6-2.3-0.6H9.9c-1.1,0-1.6,0.5-1.6,1.6v17.7L0,50.6L0,50.6z"/>
|
||||
<path class="st0" d="M74.2,52.2V30.8c0-2.9-2.3-5.2-5.2-5.2h-3.6v-7.3h2.1v3h4.2v-8.8h-4.2v2.7h-2.1V9.8l-0.3-0.1
|
||||
C55.8,7.4,46.4,7,37,9.7l-0.3,0.1v5.4h-2.1v-2.7h-4.2v8.8h4.2v-3h2.1v7.3h-3.6c-2.9,0-5.2,2.3-5.2,5.2v21.4h-2.1v6.5h6.7v4.4h-3.2
|
||||
c-0.8,0-1.4,0.6-1.4,1.4V73h22.5v-8.5c0-0.8-0.6-1.4-1.4-1.4h-3.2v-4.4h10.6v4.4h-3.2c-0.8,0-1.4,0.6-1.4,1.4V73h22.5v-8.5
|
||||
c0-0.8-0.6-1.4-1.4-1.4h-3.2v-4.4h6.7v-6.5L74.2,52.2L74.2,52.2z M57,14.6c1.7,0,3,1.4,3,3c0,0.4-0.1,0.8-0.2,1.2h-0.9
|
||||
c0.1-0.2,0.2-0.5,0.2-0.8c0-1.1-0.9-2-2-2s-2,0.9-2,2c0,0.3,0.1,0.5,0.2,0.8h-0.9C54.1,18.4,54,18,54,17.6
|
||||
C54,15.9,55.3,14.6,57,14.6z M45.2,14.6c1.7,0,3,1.4,3,3c0,0.4-0.1,0.8-0.2,1.2h-1c0.1-0.2,0.2-0.5,0.2-0.8c0-1.1-0.9-2-2-2
|
||||
s-2,0.9-2,2c0,0.3,0.1,0.5,0.2,0.8h-0.9c-0.2-0.4-0.2-0.8-0.2-1.2C42.2,15.9,43.5,14.6,45.2,14.6z M55.3,43h-0.4v0.4l-0.2,3.1
|
||||
l-18.5-6.4l10.5,0.2h0.4v-0.4l0.3-2.7l18.9,5.6L55.3,43L55.3,43z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
@ -1,8 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="456" height="456" viewBox="0 0 456 456" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<path d="m 105.50037,281.60863 c -2.70293,0 -5.00091,-0.90042 -6.893127,-2.70209 -1.892214,-1.84778 -2.837901,-4.04181 -2.837901,-6.58209 0,-2.58722 0.945687,-4.80389 2.837901,-6.65167 1.892217,-1.84778 4.190197,-2.77167 6.893127,-2.77167 2.74819,0 5.06798,0.92389 6.96019,2.77167 1.93749,1.84778 2.90581,4.06445 2.90581,6.65167 0,2.54028 -0.96832,4.73431 -2.90581,6.58209 -1.89221,1.80167 -4.212,2.70209 -6.96019,2.70209 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" />
|
||||
<path d="M 213.56111,280.08446 H 195.99044 L 149.69953,207.0544 c -1.17121,-1.84778 -2.14037,-3.76515 -2.90581,-5.75126 h -0.40578 c 0.36051,2.12528 0.54076,6.67515 0.54076,13.6496 v 65.13172 h -15.54349 v -99.36009 h 18.71925 l 44.7374,71.29798 c 1.89222,2.95695 3.1087,4.98917 3.64945,6.09751 h 0.26996 c -0.45021,-2.6325 -0.67573,-7.09015 -0.67573,-13.37293 v -64.02256 h 15.47557 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" />
|
||||
<path d="m 289.25134,280.08446 h -54.40052 v -99.36009 h 52.23835 v 13.99669 h -36.15411 v 28.13085 h 33.31621 v 13.9271 h -33.31621 v 29.37835 h 38.31628 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" />
|
||||
<path d="M 366.56466,194.72106 H 338.7222 v 85.3634 h -16.08423 v -85.3634 h -27.77455 v -13.99669 h 71.70124 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" />
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="_Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px" viewBox="0 0 102.7 81.4" style="enable-background:new 0 0 102.7 81.4;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M20.4,23.3V5.6c0-1.2,1-2.2,2.2-2.2h56.9c1.2,0,2.2,1,2.2,2.2v17.7h3.7V2.2l-0.1-0.1l-1.9-1.9H18.8l-1.9,1.9
|
||||
l-0.1,0.1v21.1C16.8,23.3,20.4,23.3,20.4,23.3z"/>
|
||||
<path class="st0" d="M81.8,52.6V76c0,1.2-1,2.2-2.2,2.2h-57c-1.2,0-2.2-1-2.2-2.2V53l0,0v-0.5h-3.6V53l0,0v26.3l0.1,0.1l1.9,1.9
|
||||
h64.6l1.9-1.9l0.1-0.1V52.6H81.8L81.8,52.6z M17.2,79.2L17.2,79.2L17.2,79.2L17.2,79.2z"/>
|
||||
</g>
|
||||
<path class="st0" d="M76.2,50.6V29c0-1.3,0.3-2.3,1.1-3s1.7-1.1,3-1.1h14.5c2.8,0,4.7,0.7,5.8,2.1s1.6,3.6,1.6,6.6
|
||||
c0,6.1-1.9,9.1-5.7,9.1h-1.1v0.2l7.3,7.7h-10l-4.9-6.7c-0.1-0.1-0.2-0.3-0.5-0.6s-0.4-0.5-0.5-0.7s-0.2-0.3-0.4-0.6
|
||||
c-0.2-0.3-0.2-0.5-0.3-0.8C86,40.9,86,40.7,86,40.4v-0.5c0-1.9,1.2-2.9,3.7-2.9h1.2c1.1,0,1.9-0.2,2.3-0.6c0.4-0.4,0.6-1.2,0.6-2.3
|
||||
s-0.2-1.8-0.6-2.2s-1.2-0.6-2.3-0.6h-4.7c-1.1,0-1.6,0.5-1.6,1.6v17.7L76.2,50.6L76.2,50.6z"/>
|
||||
<path class="st0" d="M0,50.6V29c0-1.3,0.3-2.3,1.1-3s1.7-1.1,3-1.1h14.5c2.8,0,4.7,0.7,5.8,2.1s1.6,3.6,1.6,6.6
|
||||
c0,6.1-1.9,9.1-5.7,9.1H19v0.2l7.3,7.7h-10l-4.9-6.7c-0.1-0.1-0.2-0.3-0.5-0.6s-0.4-0.5-0.5-0.7S10.2,42.3,10,42
|
||||
c-0.1-0.3-0.2-0.5-0.3-0.8s-0.1-0.5-0.1-0.8v-0.5c0-1.9,1.2-2.9,3.7-2.9h1.2c1.1,0,1.9-0.2,2.3-0.6c0.4-0.4,0.6-1.2,0.6-2.3
|
||||
s-0.2-1.8-0.6-2.2s-1.2-0.6-2.3-0.6H9.9c-1.1,0-1.6,0.5-1.6,1.6v17.7L0,50.6L0,50.6z"/>
|
||||
<path class="st0" d="M74.2,52.2V30.8c0-2.9-2.3-5.2-5.2-5.2h-3.6v-7.3h2.1v3h4.2v-8.8h-4.2v2.7h-2.1V9.8l-0.3-0.1
|
||||
C55.8,7.4,46.4,7,37,9.7l-0.3,0.1v5.4h-2.1v-2.7h-4.2v8.8h4.2v-3h2.1v7.3h-3.6c-2.9,0-5.2,2.3-5.2,5.2v21.4h-2.1v6.5h6.7v4.4h-3.2
|
||||
c-0.8,0-1.4,0.6-1.4,1.4V73h22.5v-8.5c0-0.8-0.6-1.4-1.4-1.4h-3.2v-4.4h10.6v4.4h-3.2c-0.8,0-1.4,0.6-1.4,1.4V73h22.5v-8.5
|
||||
c0-0.8-0.6-1.4-1.4-1.4h-3.2v-4.4h6.7v-6.5L74.2,52.2L74.2,52.2z M57,14.6c1.7,0,3,1.4,3,3c0,0.4-0.1,0.8-0.2,1.2h-0.9
|
||||
c0.1-0.2,0.2-0.5,0.2-0.8c0-1.1-0.9-2-2-2s-2,0.9-2,2c0,0.3,0.1,0.5,0.2,0.8h-0.9C54.1,18.4,54,18,54,17.6
|
||||
C54,15.9,55.3,14.6,57,14.6z M45.2,14.6c1.7,0,3,1.4,3,3c0,0.4-0.1,0.8-0.2,1.2h-1c0.1-0.2,0.2-0.5,0.2-0.8c0-1.1-0.9-2-2-2
|
||||
s-2,0.9-2,2c0,0.3,0.1,0.5,0.2,0.8h-0.9c-0.2-0.4-0.2-0.8-0.2-1.2C42.2,15.9,43.5,14.6,45.2,14.6z M55.3,43h-0.4v0.4l-0.2,3.1
|
||||
l-18.5-6.4l10.5,0.2h0.4v-0.4l0.3-2.7l18.9,5.6L55.3,43L55.3,43z"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.5 KiB |
@ -1408,6 +1408,13 @@ public class ApiService : IDisposable
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Если Base64 - добавляем в очередь загрузки
|
||||
if (user.IsAvatarBase64)
|
||||
{
|
||||
tasks.Add(LoadUserAvatarAsync(user));
|
||||
continue;
|
||||
}
|
||||
|
||||
string? url = user.DisplayAvatarUrl;
|
||||
if (string.IsNullOrEmpty(url))
|
||||
@ -1444,22 +1451,66 @@ public class ApiService : IDisposable
|
||||
{
|
||||
try
|
||||
{
|
||||
// Проверяем, если аватар уже загружен
|
||||
if (user.IsAvatarLoaded)
|
||||
{
|
||||
Trace.WriteLine($"[ApiService] LoadUserAvatarAsync for {user.FullName}: Already loaded");
|
||||
return;
|
||||
}
|
||||
|
||||
// Сначала проверяем Base64 формат
|
||||
if (user.IsAvatarBase64)
|
||||
{
|
||||
Trace.WriteLine($"[ApiService] LoadUserAvatarAsync for {user.FullName}: Base64 avatar detected");
|
||||
|
||||
byte[]? imageBytes = user.GetAvatarBytesFromBase64();
|
||||
if (imageBytes != null && imageBytes.Length > 0)
|
||||
{
|
||||
// Генерируем уникальный путь для файла
|
||||
string cacheDir = Path.Combine(FileSystem.CacheDirectory, "avatars");
|
||||
if (!Directory.Exists(cacheDir))
|
||||
Directory.CreateDirectory(cacheDir);
|
||||
|
||||
string filePath = Path.Combine(cacheDir, $"avatar_{user.Id}.jpg");
|
||||
|
||||
await File.WriteAllBytesAsync(filePath, imageBytes);
|
||||
user.SetCachedAvatarFilePath(filePath);
|
||||
Trace.WriteLine($"[ApiService] ✅ Base64 аватар сохранён: {filePath} ({imageBytes.Length} bytes)");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
Trace.WriteLine($"[ApiService] ⚠️ Не удалось декодировать Base64 аватар для {user.FullName}");
|
||||
}
|
||||
}
|
||||
|
||||
// Далее проверяем URL
|
||||
string? url = user.DisplayAvatarUrl;
|
||||
Trace.WriteLine($"[ApiService] LoadUserAvatarAsync for {user.FullName}, URL: {url}");
|
||||
|
||||
if (string.IsNullOrEmpty(url))
|
||||
{
|
||||
Trace.WriteLine($"[ApiService] ⚠️ URL пустой для {user.FullName}");
|
||||
return;
|
||||
}
|
||||
|
||||
// Загружаем через файловый кэш
|
||||
string? filePath = await ImageCacheService.Instance.GetOrLoadImageFileAsync(url, GetImageBytesAsync);
|
||||
if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath))
|
||||
string? loadedFilePath = await ImageCacheService.Instance.GetOrLoadImageFileAsync(url, GetImageBytesAsync);
|
||||
Trace.WriteLine($"[ApiService] FilePath result: {loadedFilePath}");
|
||||
|
||||
if (!string.IsNullOrEmpty(loadedFilePath) && File.Exists(loadedFilePath))
|
||||
{
|
||||
user.SetCachedAvatarFilePath(filePath);
|
||||
user.SetCachedAvatarFilePath(loadedFilePath);
|
||||
Trace.WriteLine($"[ApiService] ✅ Аватар установлен: {loadedFilePath}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Trace.WriteLine($"[ApiService] ⚠️ Файл не существует или путь пустой");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Trace.WriteLine($"[ApiService] Ошибка предзагрузки аватара для {user.FullName}: {ex.Message}");
|
||||
Trace.WriteLine($"[ApiService] ❌ Ошибка предзагрузки аватара для {user.FullName}: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -38,22 +38,34 @@ public class ImageCacheService
|
||||
/// </summary>
|
||||
public async Task<string?> GetOrLoadImageFileAsync(string? url, Func<string, Task<byte[]?>>? loader = null)
|
||||
{
|
||||
if (string.IsNullOrEmpty(url)) return null;
|
||||
if (string.IsNullOrEmpty(url))
|
||||
{
|
||||
Trace.WriteLine($"[ImageCacheService] URL пустой, пропускаем");
|
||||
return null;
|
||||
}
|
||||
|
||||
Trace.WriteLine($"[ImageCacheService] >>> GetOrLoadImageFileAsync: {url}");
|
||||
|
||||
// 1. Проверяем кэш путей
|
||||
if (_pathCache.TryGetValue(url, out string? cachedPath) && File.Exists(cachedPath))
|
||||
{
|
||||
Trace.WriteLine($"[ImageCacheService] ✅ Найден в кэше путей: {cachedPath}");
|
||||
return cachedPath;
|
||||
}
|
||||
|
||||
// 2. Проверяем файл на диске
|
||||
string filePath = GetCacheFilePath(url);
|
||||
Trace.WriteLine($"[ImageCacheService] Ожидаемый путь: {filePath}");
|
||||
|
||||
if (File.Exists(filePath))
|
||||
{
|
||||
var fileInfo = new FileInfo(filePath);
|
||||
Trace.WriteLine($"[ImageCacheService] Файл существует, размер: {fileInfo.Length}, время: {fileInfo.LastWriteTime}");
|
||||
|
||||
if (fileInfo.Length > 0 && fileInfo.LastWriteTime > DateTime.Now - _cacheExpiry)
|
||||
{
|
||||
_pathCache[url] = filePath;
|
||||
Trace.WriteLine($"[ImageCacheService] ✅ Загружен с диска: {filePath}");
|
||||
return filePath;
|
||||
}
|
||||
try { File.Delete(filePath); } catch { }
|
||||
@ -64,19 +76,31 @@ public class ImageCacheService
|
||||
{
|
||||
try
|
||||
{
|
||||
Trace.WriteLine($"[ImageCacheService] >>> Загрузка изображения через loader...");
|
||||
byte[]? imageBytes = await loader(url);
|
||||
|
||||
if (imageBytes != null && imageBytes.Length > 0)
|
||||
{
|
||||
Trace.WriteLine($"[ImageCacheService] Получено {imageBytes.Length} байт, сохраняем в {filePath}");
|
||||
await File.WriteAllBytesAsync(filePath, imageBytes);
|
||||
_pathCache[url] = filePath;
|
||||
Trace.WriteLine($"[ImageCacheService] ✅ Сохранено и добавлено в кэш");
|
||||
return filePath;
|
||||
}
|
||||
else
|
||||
{
|
||||
Trace.WriteLine($"[ImageCacheService] ⚠️ Loader вернул пустые данные");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Trace.WriteLine($"[ImageCacheService] Ошибка загрузки {url}: {ex.Message}");
|
||||
Trace.WriteLine($"[ImageCacheService] ❌ Ошибка загрузки {url}: {ex.Message}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Trace.WriteLine($"[ImageCacheService] ⚠️ Loader не задан");
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -143,10 +143,20 @@ public class ProfileViewModel : INotifyPropertyChanged
|
||||
|
||||
try
|
||||
{
|
||||
Trace.WriteLine($"[ProfileViewModel] >>> Загрузка аватара для {_user.FullName}, URL: {_user.DisplayAvatarUrl}");
|
||||
|
||||
// Используем централизованный метод загрузки аватара
|
||||
await ServiceProvider.ApiService.LoadUserAvatarAsync(_user);
|
||||
OnPropertyChanged(nameof(DisplayImageSource));
|
||||
Trace.WriteLine("[ProfileViewModel] ✅ Аватар загружен");
|
||||
|
||||
Trace.WriteLine($"[ProfileViewModel] IsAvatarLoaded: {_user.IsAvatarLoaded}, CachedPath: {_user.CachedAvatarFilePath}");
|
||||
|
||||
// Обновляем UI на главном потоке
|
||||
await MainThread.InvokeOnMainThreadAsync(() =>
|
||||
{
|
||||
OnPropertyChanged(nameof(DisplayImageSource));
|
||||
});
|
||||
|
||||
Trace.WriteLine("[ProfileViewModel] ✅ Аватар загружен и UI обновлен");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||