ilk commit

This commit is contained in:
hOLOlu
2026-05-04 01:19:04 +03:00
commit 5f33557f2d
2072 changed files with 75437 additions and 0 deletions

View File

@@ -0,0 +1,102 @@
using System;
using System.IO;
using System.IO.Pipes;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace DownloadManager.BrowserBridge;
public class BridgeMessage
{
[JsonProperty("action")]
public string Action { get; set; } = string.Empty;
[JsonProperty("url")]
public string Url { get; set; } = string.Empty;
[JsonProperty("filename")]
public string? FileName { get; set; }
[JsonProperty("referrer")]
public string? Referrer { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var stdin = Console.OpenStandardInput();
var stdout = Console.OpenStandardOutput();
while (true)
{
// Chrome protokolü: 4 byte (little-endian uint32) = mesaj uzunluğu
var lenBuf = new byte[4];
int read = await stdin.ReadAsync(lenBuf, 0, 4);
if (read < 4) break;
var length = BitConverter.ToUInt32(lenBuf, 0);
var msgBuf = new byte[length];
int msgRead = 0;
while (msgRead < length)
{
int r = await stdin.ReadAsync(msgBuf, msgRead, (int)length - msgRead);
if (r <= 0) break;
msgRead += r;
}
var json = Encoding.UTF8.GetString(msgBuf);
var msg = JsonConvert.DeserializeObject<BridgeMessage>(json);
if (msg != null)
{
await SendToMainAppAsync(msg);
// Mesaj gönderildikten sonra çık (Native messaging her mesaj için yeni process açabiliyor)
break;
}
}
}
static async Task SendToMainAppAsync(BridgeMessage msg)
{
try
{
// Ana uygulamanın çalışıp çalışmadığını kontrol et
var processes = System.Diagnostics.Process.GetProcessesByName("DownloadManager.WPF");
if (processes.Length == 0)
{
// Uygulama çalışmıyorsa başlat (Yolu bulmaya çalışalım)
string appPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DownloadManager.WPF.exe");
// Geliştirme ortamı için alternatif yollar
if (!File.Exists(appPath))
appPath = @"D:\Calismalar\AI\hDM\DownloadManager\src\DownloadManager.WPF\bin\Release\net8.0-windows\DownloadManager.WPF.exe";
if (File.Exists(appPath))
{
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(appPath) { UseShellExecute = true });
// Uygulamanın açılması ve pipe'ı başlatması için biraz bekleyelim
await Task.Delay(3000);
}
}
using var pipe = new NamedPipeClientStream(".", "DownloadManagerPipe",
PipeDirection.Out, PipeOptions.Asynchronous);
// Timeout'u 10 saniyeye çıkaralım (Uygulama yeni açılıyorsa gerekebilir)
await pipe.ConnectAsync(10000);
var json = JsonConvert.SerializeObject(msg);
var data = Encoding.UTF8.GetBytes(json);
await pipe.WriteAsync(data);
await pipe.FlushAsync();
}
catch (Exception ex)
{
File.AppendAllText("bridge_error.log", $"{DateTime.Now}: Bağlantı hatası ({msg.Url}): {ex.Message}\n");
}
}
}