Files
raton4.0-source/Raton RAT/Raton/Windows/ClientFolders.cs
T

264 lines
8.7 KiB
C#
Raw Normal View History

2026-08-27 11:23:13 -06:00
// Decompiled with JetBrains decompiler
// Type: Raton.Windows.ClientFolders
// Assembly: Raton, Version=0.4.0.0, Culture=neutral, PublicKeyToken=null
// MVID: 36C4E416-7F8D-4D23-930F-B5CCB0D810E7
// Assembly location: C:\Users\user\Desktop\v3.8.0 Deluxe Plugins (v4.0.0) cracked\Raton.exe
using Raton.Classes;
using RatonBack;
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Markup;
using System.Windows.Media.Animation;
using System.Windows.Threading;
using WpfApp1;
#nullable disable
namespace Raton.Windows;
public partial class ClientFolders : Window
{
private const int DWMWA_USE_IMMERSIVE_DARK_MODE = 20;
private readonly List<ClientFolderItem> _allItems = new List<ClientFolderItem>();
private readonly ObservableCollection<ClientFolderItem> _filtered = new ObservableCollection<ClientFolderItem>();
private readonly Stack<string> _navStack = new Stack<string>();
private string _currentRoot;
private DispatcherTimer _toastTimer;
[DllImport("dwmapi.dll", CharSet = CharSet.Auto)]
private static extern int DwmSetWindowAttribute(
IntPtr hwnd,
int attr,
ref int attrValue,
int attrSize);
public ClientFolders() => this.InitializeComponent();
private void Window_Loaded(object sender, RoutedEventArgs e)
{
IntPtr handle = new WindowInteropHelper((Window) this).Handle;
int attrValue = 1;
ClientFolders.DwmSetWindowAttribute(handle, 20, ref attrValue, Marshal.SizeOf(typeof (int)));
this._currentRoot = MainWindow.ClientsFolder;
this.LoadFolder(this._currentRoot, false);
}
private async void LoadFolder(string path, bool pushToStack)
{
if (pushToStack && this._currentRoot != null)
this._navStack.Push(this._currentRoot);
this._currentRoot = path;
this._allItems.Clear();
this._filtered.Clear();
this.FoldersGrid.ItemsSource = (IEnumerable) null;
this.TbFolderPath.Text = string.IsNullOrWhiteSpace(path) ? "Clients" : path;
this.BtnBack.Visibility = this._navStack.Count > 0 ? Visibility.Visible : Visibility.Collapsed;
if (string.IsNullOrWhiteSpace(path) || !Directory.Exists(path))
{
this.TbStatus.Text = "Folder not found";
}
else
{
try
{
int num = await BackendClient.ValidateSessionFlags(DeviceManager.GetHWID(), DeviceManager.GetOrCreateId()) ? 1 : 0;
}
catch (Exception ex)
{
int num = (int) MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Hand);
Environment.Exit(0);
return;
}
try
{
foreach (string path1 in (IEnumerable<string>) ((IEnumerable<string>) Directory.GetDirectories(path)).OrderBy<string, string>((Func<string, string>) (d => Path.GetFileName(d)), (IComparer<string>) StringComparer.OrdinalIgnoreCase))
{
DirectoryInfo directoryInfo = new DirectoryInfo(path1);
int num1 = 0;
int num2 = 0;
try
{
num1 = Directory.GetDirectories(path1).Length;
num2 = Directory.GetFiles(path1).Length;
}
catch
{
}
int num3 = num1 + num2;
this._allItems.Add(new ClientFolderItem()
{
FolderName = directoryInfo.Name,
FullPath = path1,
Depth = 0,
DepthLabel = "FOLDER",
ItemCount = num3.ToString() + (num3 == 1 ? " item" : " items"),
LastModified = directoryInfo.LastWriteTime.ToString("dd/MM/yyyy HH:mm"),
IconGlyph = "\uE8B7",
IndentWidth = 0.0,
IsFile = false
});
}
foreach (string fileName in (IEnumerable<string>) ((IEnumerable<string>) Directory.GetFiles(path)).OrderBy<string, string>((Func<string, string>) (f => Path.GetFileName(f)), (IComparer<string>) StringComparer.OrdinalIgnoreCase))
{
FileInfo fileInfo = new FileInfo(fileName);
this._allItems.Add(new ClientFolderItem()
{
FolderName = fileInfo.Name,
FullPath = fileName,
Depth = 0,
DepthLabel = fileInfo.Extension.TrimStart('.').ToUpperInvariant().DefaultIfEmpty("FILE"),
ItemCount = ClientFolders.FormatSize(fileInfo.Length),
LastModified = fileInfo.LastWriteTime.ToString("dd/MM/yyyy HH:mm"),
IconGlyph = ClientFolders.GetFileGlyph(fileInfo.Extension),
IndentWidth = 0.0,
IsFile = true
});
}
this.ApplyFilter(this.TbSearch.Text);
if (this._allItems.Count != 0)
return;
this.ShowEmptyToast();
}
catch (Exception ex)
{
this.TbStatus.Text = "Error: " + ex.Message;
}
}
}
private void ShowEmptyToast()
{
this._toastTimer?.Stop();
this.ToastEmpty.BeginAnimation(UIElement.OpacityProperty, (AnimationTimeline) new DoubleAnimation(0.0, 1.0, (Duration) TimeSpan.FromMilliseconds(200.0)));
this._toastTimer = new DispatcherTimer()
{
Interval = TimeSpan.FromMilliseconds(2500.0)
};
this._toastTimer.Tick += (EventHandler) ((s, e) =>
{
this._toastTimer.Stop();
this.ToastEmpty.BeginAnimation(UIElement.OpacityProperty, (AnimationTimeline) new DoubleAnimation(1.0, 0.0, (Duration) TimeSpan.FromMilliseconds(400.0)));
});
this._toastTimer.Start();
}
private static string FormatSize(long bytes)
{
if (bytes < 1024L /*0x0400*/)
return bytes.ToString() + " B";
return bytes < 1048576L /*0x100000*/ ? (bytes / 1024L /*0x0400*/).ToString() + " KB" : (bytes / 1048576L /*0x100000*/).ToString() + " MB";
}
private static string GetFileGlyph(string ext)
{
switch ((ext ?? "").ToLowerInvariant())
{
case ".7z":
case ".rar":
case ".zip":
return "\uE8B1";
case ".avi":
case ".mkv":
case ".mov":
case ".mp4":
return "\uE8B2";
case ".bmp":
case ".gif":
case ".jpeg":
case ".jpg":
case ".png":
case ".webp":
return "\uEB9F";
case ".cs":
case ".css":
case ".html":
case ".js":
case ".py":
case ".ts":
return "\uE943";
case ".doc":
case ".docx":
return "\uE8A5";
case ".flac":
case ".mp3":
case ".wav":
return "\uE8D6";
case ".pdf":
return "\uEA90";
case ".ppt":
case ".pptx":
return "\uE9D5";
case ".txt":
return "\uE8A5";
case ".xls":
case ".xlsx":
return "\uE9F9";
default:
return "\uE8A5";
}
}
private void TbSearch_TextChanged(object sender, TextChangedEventArgs e)
{
this.TbSearchPlaceholder.Visibility = string.IsNullOrEmpty(this.TbSearch.Text) ? Visibility.Visible : Visibility.Collapsed;
this.ApplyFilter(this.TbSearch.Text);
}
private void ApplyFilter(string query)
{
this._filtered.Clear();
foreach (ClientFolderItem clientFolderItem in string.IsNullOrWhiteSpace(query) ? (IEnumerable<ClientFolderItem>) this._allItems : this._allItems.Where<ClientFolderItem>((Func<ClientFolderItem, bool>) (f => f.FolderName != null && f.FolderName.IndexOf(query, StringComparison.OrdinalIgnoreCase) >= 0)))
this._filtered.Add(clientFolderItem);
this.FoldersGrid.ItemsSource = (IEnumerable) this._filtered;
int count = this._filtered.Count;
this.TbStatus.Text = count == 1 ? "1 item" : count.ToString() + " items";
}
private void FoldersGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (!(this.FoldersGrid.SelectedItem is ClientFolderItem selectedItem))
return;
if (selectedItem.IsFile)
{
try
{
Process.Start(new ProcessStartInfo()
{
FileName = selectedItem.FullPath,
UseShellExecute = true
});
}
catch
{
}
}
else
{
this.TbSearch.Text = string.Empty;
this.LoadFolder(selectedItem.FullPath, true);
}
}
private void BtnBack_Click(object sender, RoutedEventArgs e)
{
if (this._navStack.Count == 0)
return;
string path = this._navStack.Pop();
this._currentRoot = (string) null;
this.TbSearch.Text = string.Empty;
this.LoadFolder(path, false);
}
}