Compare commits

...

4 Commits

Author SHA1 Message Date
zhom 9ce7757cb2 chore: version bump 2025-07-08 06:26:39 +04:00
zhom 3ca454a2c5 style: adjust modal height 2025-07-08 04:57:25 +04:00
zhom 689ac8e3ca fix: windows build correct string literal 2025-07-07 07:34:55 +04:00
zhom 0e1c5dcfb6 docs: add feature description 2025-07-07 07:33:41 +04:00
11 changed files with 38 additions and 20 deletions
+5
View File
@@ -17,6 +17,7 @@
"cmdk",
"codegen",
"CTYPE",
"datareporting",
"devedition",
"doesn",
"donutbrowser",
@@ -32,12 +33,14 @@
"gettimezone",
"gifs",
"gsettings",
"healthreport",
"hkcu",
"icns",
"idletime",
"Inno",
"KHTML",
"launchservices",
"letterboxing",
"libatk",
"libayatana",
"libcairo",
@@ -63,6 +66,7 @@
"objc",
"orhun",
"osascript",
"peerconnection",
"pixbuf",
"plasmohq",
"prefs",
@@ -94,6 +98,7 @@
"timedatectl",
"titlebar",
"Torbrowser",
"trackingprotection",
"turbopack",
"udeps",
"unlisten",
+1
View File
@@ -38,6 +38,7 @@
## Features
- Create unlimited number of local browser profiles completely isolated from each other
- Bypass website restrictions and avoid getting banned by using anti-detection features powered by [Camoufox](https://camoufox.com/)
- Proxy support with basic auth for all browsers except for TOR Browser
- Import profiles from your existing browsers
- Automatic updates both for browsers and for the app itself
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "donutbrowser",
"private": true,
"license": "AGPL-3.0",
"version": "0.7.0",
"version": "0.7.1",
"type": "module",
"scripts": {
"dev": "next dev --turbopack",
+1 -1
View File
@@ -971,7 +971,7 @@ dependencies = [
[[package]]
name = "donutbrowser"
version = "0.7.0"
version = "0.7.1"
dependencies = [
"async-trait",
"base64 0.22.1",
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "donutbrowser"
version = "0.7.0"
version = "0.7.1"
description = "Simple Yet Powerful Anti-Detect Browser"
authors = ["zhom@github"]
edition = "2021"
+1 -1
View File
@@ -238,7 +238,7 @@ mod windows {
let hours = &offset_str[..colon_pos];
let minutes = &offset_str[colon_pos + 1..];
if let (Ok(h), Ok(m)) = (hours.parse::<i32>(), minutes.parse::<i32>()) {
return format!("{:+03d}:{:02d}", h, m);
return format!("{:+03}:{:02}", h, m);
}
}
}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "Donut Browser",
"version": "0.7.0",
"version": "0.7.1",
"identifier": "com.donutbrowser",
"build": {
"beforeDevCommand": "pnpm dev",
+1 -1
View File
@@ -140,7 +140,7 @@ export function CamoufoxConfigDialog({
</DialogTitle>
</DialogHeader>
<ScrollArea className="flex-1 pr-6 h-[350px]">
<ScrollArea className="flex-1 pr-6 h-[320px]">
<div className="py-4 space-y-6">
{/* Operating System */}
<div className="space-y-3">
+2 -12
View File
@@ -25,7 +25,7 @@ import {
} from "@/components/ui/select";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { useBrowserDownload } from "@/hooks/use-browser-download";
import { getBrowserIcon } from "@/lib/browser-utils";
import { getBrowserIcon, getCurrentOS } from "@/lib/browser-utils";
import type { BrowserReleaseTypes, CamoufoxConfig, StoredProxy } from "@/types";
type BrowserTypeString =
@@ -95,16 +95,6 @@ const browserOptions: BrowserOption[] = [
},
];
const getCurrentOS = () => {
if (typeof window !== "undefined") {
const userAgent = window.navigator.userAgent;
if (userAgent.includes("Win")) return "windows";
if (userAgent.includes("Mac")) return "macos";
if (userAgent.includes("Linux")) return "linux";
}
return "unknown";
};
export function CreateProfileDialog({
isOpen,
onClose,
@@ -325,7 +315,7 @@ export function CreateProfileDialog({
<TabsTrigger value="anti-detect">Anti-Detect</TabsTrigger>
</TabsList>
<ScrollArea className="flex-1 pr-6 h-[350px]">
<ScrollArea className="flex-1 pr-6 h-[320px]">
<div className="py-4 space-y-6">
{/* Profile Name - Common to both tabs */}
<div className="space-y-2">
+14 -2
View File
@@ -45,7 +45,12 @@ import {
TooltipTrigger,
} from "@/components/ui/tooltip";
import { useTableSorting } from "@/hooks/use-table-sorting";
import { getBrowserDisplayName, getBrowserIcon } from "@/lib/browser-utils";
import {
getBrowserDisplayName,
getBrowserIcon,
getCurrentOS,
} from "@/lib/browser-utils";
import { cn } from "@/lib/utils";
import type { BrowserProfile, StoredProxy } from "@/types";
import { Input } from "./ui/input";
import { Label } from "./ui/label";
@@ -524,9 +529,16 @@ export function ProfilesDataTable({
getCoreRowModel: getCoreRowModel(),
});
const platform = getCurrentOS();
return (
<>
<ScrollArea className="h-[400px] rounded-md border">
<ScrollArea
className={cn(
"rounded-md border",
platform === "macos" ? "h-[380px]" : "h-[320px]",
)}
>
<Table>
<TableHeader>
{table.getHeaderGroups().map((headerGroup) => (
+10
View File
@@ -49,3 +49,13 @@ export function getBrowserIcon(browserType: string) {
return null;
}
}
export const getCurrentOS = () => {
if (typeof window !== "undefined") {
const userAgent = window.navigator.userAgent;
if (userAgent.includes("Win")) return "windows";
if (userAgent.includes("Mac")) return "macos";
if (userAgent.includes("Linux")) return "linux";
}
return "unknown";
};