Compare commits
No commits in common. "fdfe4ccb5664c1d7be3a8fff7914806c73a1a542" and "a4ad241de0598a23b6ff02c2510635692f20fbd0" have entirely different histories.
fdfe4ccb56
...
a4ad241de0
@ -44,19 +44,11 @@ namespace Plane.Logging
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ReadLog()
|
|
||||||
{
|
|
||||||
string text = "";
|
|
||||||
if (File.Exists(LogFilePath))
|
|
||||||
text = File.ReadAllText(LogFilePath);
|
|
||||||
return text;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void LogCore(string message, Category category, Priority priority)
|
protected override void LogCore(string message, Category category, Priority priority)
|
||||||
{
|
{
|
||||||
lock (_logLock)
|
lock (_logLock)
|
||||||
{
|
{
|
||||||
// TODO: 王海,20150605,应改为不使用 AppendAllText,提高性能。
|
// TODO: 林俊清,20150605,应改为不使用 AppendAllText,提高性能。
|
||||||
for (int i = 0; i < 5; i++)
|
for (int i = 0; i < 5; i++)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -9,9 +9,8 @@
|
|||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>Plane.Logging</RootNamespace>
|
<RootNamespace>Plane.Logging</RootNamespace>
|
||||||
<AssemblyName>Plane.Logging</AssemblyName>
|
<AssemblyName>Plane.Logging</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<TargetFrameworkProfile />
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
@ -21,7 +20,6 @@
|
|||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
@ -30,7 +28,6 @@
|
|||||||
<DefineConstants>TRACE</DefineConstants>
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
|
@ -9,9 +9,8 @@
|
|||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>Plane.Reflection</RootNamespace>
|
<RootNamespace>Plane.Reflection</RootNamespace>
|
||||||
<AssemblyName>Plane.Reflection</AssemblyName>
|
<AssemblyName>Plane.Reflection</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<TargetFrameworkProfile />
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
@ -21,7 +20,6 @@
|
|||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
@ -30,7 +28,6 @@
|
|||||||
<DefineConstants>TRACE</DefineConstants>
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
|
@ -29,15 +29,7 @@ namespace Plane.Windows.Messages
|
|||||||
{
|
{
|
||||||
if (Dispatcher.CheckAccess())
|
if (Dispatcher.CheckAccess())
|
||||||
{
|
{
|
||||||
try
|
return func();
|
||||||
{
|
|
||||||
return func();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -8,38 +8,15 @@ namespace Plane.Windows.Messages
|
|||||||
public static class Message
|
public static class Message
|
||||||
{
|
{
|
||||||
private static Action<string> ShowAction { get; set; }
|
private static Action<string> ShowAction { get; set; }
|
||||||
private static Action<bool> ConnectAction { get; set; }
|
|
||||||
private static Action<string> StatusAction { get; set; }
|
|
||||||
|
|
||||||
public static void Configure(Action<string> showAction)
|
public static void Configure(Action<string> showAction)
|
||||||
{
|
{
|
||||||
ShowAction = showAction;
|
ShowAction = showAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ConfigureStatus(Action<string> showAction)
|
|
||||||
{
|
|
||||||
StatusAction = showAction;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static void Show(string message)
|
public static void Show(string message)
|
||||||
{
|
{
|
||||||
ShowAction?.Invoke(DateTime.Now.ToString("HH:mm:ss ")+message);
|
ShowAction?.Invoke(message);
|
||||||
}
|
|
||||||
|
|
||||||
public static void ShowStatus(string message)
|
|
||||||
{
|
|
||||||
StatusAction?.Invoke(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Configure(Action<bool> connectAction)
|
|
||||||
{
|
|
||||||
ConnectAction = connectAction;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Connect(bool isConnected)
|
|
||||||
{
|
|
||||||
ConnectAction?.Invoke(isConnected);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,9 +9,8 @@
|
|||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>Plane.Windows.Messages</RootNamespace>
|
<RootNamespace>Plane.Windows.Messages</RootNamespace>
|
||||||
<AssemblyName>Plane.Windows.Messages</AssemblyName>
|
<AssemblyName>Plane.Windows.Messages</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<TargetFrameworkProfile />
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
@ -21,7 +20,6 @@
|
|||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
@ -30,11 +28,10 @@
|
|||||||
<DefineConstants>TRACE</DefineConstants>
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="MahApps.Metro, Version=1.5.0.23, Culture=neutral, PublicKeyToken=f4fb5a3c4d1e5b4f, processorArchitecture=MSIL">
|
<Reference Include="MahApps.Metro, Version=1.2.2.0, Culture=neutral, PublicKeyToken=f4fb5a3c4d1e5b4f, processorArchitecture=MSIL">
|
||||||
<HintPath>..\..\Plane.FormationCreator\packages\MahApps.Metro.1.5.0\lib\net40\MahApps.Metro.dll</HintPath>
|
<HintPath>..\..\EHang.FormationCreator\packages\MahApps.Metro.1.2.2.0\lib\net40\MahApps.Metro.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="PresentationCore" />
|
<Reference Include="PresentationCore" />
|
||||||
@ -43,7 +40,7 @@
|
|||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Drawing" />
|
<Reference Include="System.Drawing" />
|
||||||
<Reference Include="System.Windows.Interactivity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
<Reference Include="System.Windows.Interactivity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||||
<HintPath>..\..\Plane.FormationCreator\packages\MahApps.Metro.1.5.0\lib\net40\System.Windows.Interactivity.dll</HintPath>
|
<HintPath>..\..\EHang.FormationCreator\packages\MahApps.Metro.1.2.2.0\lib\net40\System.Windows.Interactivity.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Xaml" />
|
<Reference Include="System.Xaml" />
|
||||||
@ -74,7 +71,9 @@
|
|||||||
</Page>
|
</Page>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="MahApps.Metro" version="1.5.0" targetFramework="net40" requireReinstallation="true" />
|
<package id="MahApps.Metro" version="1.2.2.0" targetFramework="net40" />
|
||||||
</packages>
|
</packages>
|
@ -1,58 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace Plane.Windows.IniHelper
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// IniFiles 的摘要说明。
|
|
||||||
/// 示例文件路径:C:\file.ini
|
|
||||||
/// [Server] //[*] 表示缓存区
|
|
||||||
/// name=localhost //name 表示主键,localhost 表示值
|
|
||||||
/// </summary>
|
|
||||||
public class IniFiles
|
|
||||||
{
|
|
||||||
public string path;
|
|
||||||
[DllImport("kernel32")] //返回0表示失败,非0为成功
|
|
||||||
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
|
|
||||||
[DllImport("kernel32")] //返回取得字符串缓冲区的长度
|
|
||||||
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
|
|
||||||
/// <summary>
|
|
||||||
/// 保存ini文件的路径
|
|
||||||
/// 调用示例:var ini = IniFiles("C:\file.ini");
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="INIPath"></param>
|
|
||||||
public IniFiles()
|
|
||||||
{
|
|
||||||
this.path = Environment.CurrentDirectory + @"\Config.ini";
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// 写Ini文件
|
|
||||||
/// 调用示例:ini.IniWritevalue("Server","name","localhost");
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="Section">[缓冲区]</param>
|
|
||||||
/// <param name="Key">键</param>
|
|
||||||
/// <param name="value">值</param>
|
|
||||||
public void IniWritevalue(string Section, string Key, string value)
|
|
||||||
{
|
|
||||||
WritePrivateProfileString(Section, Key, value, this.path);
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// 读Ini文件
|
|
||||||
/// 调用示例:ini.IniWritevalue("Server","name");
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="Section">[缓冲区]</param>
|
|
||||||
/// <param name="Key">键</param>
|
|
||||||
/// <returns>值</returns>
|
|
||||||
public string IniReadvalue(string Section, string Key)
|
|
||||||
{
|
|
||||||
StringBuilder temp = new StringBuilder(255);
|
|
||||||
|
|
||||||
int i = GetPrivateProfileString(Section, Key, "", temp, 255, this.path);
|
|
||||||
return temp.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -9,9 +9,8 @@
|
|||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>Plane.Windows</RootNamespace>
|
<RootNamespace>Plane.Windows</RootNamespace>
|
||||||
<AssemblyName>Plane.Windows</AssemblyName>
|
<AssemblyName>Plane.Windows</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<TargetFrameworkProfile />
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
@ -21,7 +20,6 @@
|
|||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
@ -30,7 +28,6 @@
|
|||||||
<DefineConstants>TRACE</DefineConstants>
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="PresentationCore" />
|
<Reference Include="PresentationCore" />
|
||||||
@ -54,7 +51,6 @@
|
|||||||
<Compile Include="Converters\BooleanConverter.cs" />
|
<Compile Include="Converters\BooleanConverter.cs" />
|
||||||
<Compile Include="Converters\InverseBooleanConverter.cs" />
|
<Compile Include="Converters\InverseBooleanConverter.cs" />
|
||||||
<Compile Include="Converters\NullableBooleanToVisibilityConverter.cs" />
|
<Compile Include="Converters\NullableBooleanToVisibilityConverter.cs" />
|
||||||
<Compile Include="IniHelper\IniFiles.cs" />
|
|
||||||
<Compile Include="UpdateChecker.cs" />
|
<Compile Include="UpdateChecker.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System.Diagnostics;
|
||||||
using System.Diagnostics;
|
|
||||||
|
|
||||||
namespace Plane.Logging
|
namespace Plane.Logging
|
||||||
{
|
{
|
||||||
@ -15,13 +14,7 @@ namespace Plane.Logging
|
|||||||
|
|
||||||
protected override void LogCore(string message, Category category, Priority priority)
|
protected override void LogCore(string message, Category category, Priority priority)
|
||||||
{
|
{
|
||||||
Debug.WriteLine(BuildStandardLogEntry(message, category, priority)); //写入日志
|
Debug.WriteLine(BuildStandardLogEntry(message, category, priority));
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ReadLog()
|
|
||||||
{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,5 @@ namespace Plane.Logging
|
|||||||
/// <param name="category">Category of the entry.</param>
|
/// <param name="category">Category of the entry.</param>
|
||||||
/// <param name="priority">The priority of the entry.</param>
|
/// <param name="priority">The priority of the entry.</param>
|
||||||
void Log(string message, Category category = Category.Info, Priority priority = Priority.None);
|
void Log(string message, Category category = Category.Info, Priority priority = Priority.None);
|
||||||
|
|
||||||
string ReadLog();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -26,9 +26,6 @@ namespace Plane.Logging
|
|||||||
LogCore(message, category, priority);
|
LogCore(message, category, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract string ReadLog();
|
|
||||||
|
|
||||||
|
|
||||||
protected static string BuildStandardLogEntry(string message, Category category, Priority priority)
|
protected static string BuildStandardLogEntry(string message, Category category, Priority priority)
|
||||||
{
|
{
|
||||||
return $"--{category}-{priority}-{DateTime.Now.ToString("yyyyMMdd HH:mm:ss.fff")}--------------------{Environment.NewLine}{Environment.NewLine}{message}{Environment.NewLine}{Environment.NewLine}--<END>--{Environment.NewLine}{Environment.NewLine}";
|
return $"--{category}-{priority}-{DateTime.Now.ToString("yyyyMMdd HH:mm:ss.fff")}--------------------{Environment.NewLine}{Environment.NewLine}{message}{Environment.NewLine}{Environment.NewLine}--<END>--{Environment.NewLine}{Environment.NewLine}";
|
||||||
|
Loading…
Reference in New Issue
Block a user