Skip to content
This repository was archived by the owner on Oct 5, 2022. It is now read-only.

Commit 5f350f8

Browse files
committed
Implemented disable brave update feature
1 parent e254fb4 commit 5f350f8

File tree

14 files changed

+183
-9
lines changed

14 files changed

+183
-9
lines changed

.idea/codeStyles/codeStyleConfig.xml

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/csv-plugin.xml

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bravepatcher/cli.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@
1717
from bravepatcher.patcher import Patcher
1818
from bravepatcher.pattern import PatternData, PatternDownloader
1919
from bravepatcher.static_data import default_pattern_data
20-
from bravepatcher.utils.brave import get_brave_path, kill_all_brave, find_chrome_dll, get_brave_release_asset_url, \
21-
get_brave_for_chrome_dll
20+
from bravepatcher.utils.brave import (
21+
find_chrome_dll, get_brave_for_chrome_dll, get_brave_path,
22+
get_brave_release_asset_url, kill_all_brave)
2223

2324
app = typer.Typer(no_args_is_help=True, add_completion=False)
2425

bravepatcher/gui.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
from bravepatcher.static_data import default_pattern_data
2222
from bravepatcher.utils import open_folder_in_explorer
2323
from bravepatcher.utils.brave import (
24-
find_chrome_dll, get_brave_for_chrome_dll, get_brave_path, kill_all_brave)
24+
UpdateDisabler, find_chrome_dll, get_brave_for_chrome_dll, get_brave_path,
25+
get_brave_updater_for_chrome_dll, kill_all_brave)
2526

2627
try:
2728
chrome_dll = find_chrome_dll(get_brave_path()) or ""
@@ -313,6 +314,26 @@ def on_stop_brave(window):
313314
sg.popup_error(f"{e}", keep_on_top=True, modal=True)
314315

315316

317+
@event_handler("Enable Updates")
318+
def on_enable_updates(window):
319+
chrome_dll_path = Path(window['chrome_dll'].get())
320+
try:
321+
updater_exe = get_brave_updater_for_chrome_dll(chrome_dll_path)
322+
UpdateDisabler(updater_exe).enable_update()
323+
except Exception as e:
324+
sg.popup_error(f"{e}", keep_on_top=True, modal=True)
325+
326+
327+
@event_handler("Disable Updates")
328+
def on_disable_updates(window):
329+
chrome_dll_path = Path(window['chrome_dll'].get())
330+
try:
331+
updater_exe = get_brave_updater_for_chrome_dll(chrome_dll_path)
332+
UpdateDisabler(updater_exe).disable_update()
333+
except Exception as e:
334+
sg.popup_error(f"{e}", keep_on_top=True, modal=True)
335+
336+
316337
def _is_nuitka():
317338
return "__compiled__" in globals()
318339

bravepatcher/patcher/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
from .Patcher import Patcher # noqa: F401, I005
1+
from .exceptions import \
2+
MemorySearchTooManyMatchException # noqa: F401, I005; noqa: F401, I005
23
from .exceptions import (MemorySearchException, MemorySearchNotFoundException, # noqa: F401, I005
34
PatchError, PatchException) # noqa: F401, I005
4-
from .exceptions import \
5-
MemorySearchTooManyMatchException # noqa: F401, I005
65
from .models import PatchedSegment, PatcherResult # noqa: F401, I005
6+
from .Patcher import Patcher # noqa: F401, I005

bravepatcher/static_data_template.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from io import BytesIO
55
from zlib import decompress
66

7-
87
_default_pattern_data = b"%PATTERN_PLACEHOLDER%"
98

109
default_pattern_data_cache = None
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from pathlib import Path
2+
from typing import Optional
3+
4+
from ..firewall import AbstractFirewallHelper, WindowsFirewallHelper
5+
6+
7+
class UpdateDisabler:
8+
rule_name = "BravePatcher - Block Brave update"
9+
10+
def __init__(self, brave_path: Path, firewall_helper: Optional[AbstractFirewallHelper] = None):
11+
self.brave_path = brave_path
12+
if firewall_helper is None:
13+
firewall_helper = WindowsFirewallHelper()
14+
self.firewall_helper = firewall_helper
15+
16+
def disable_update(self):
17+
if not self.firewall_helper.has_rule(self.rule_name):
18+
self.firewall_helper.block_program(self.brave_path, self.rule_name)
19+
20+
def enable_update(self):
21+
if self.firewall_helper.has_rule(self.rule_name):
22+
self.firewall_helper.allow_program(self.brave_path, self.rule_name)
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1-
from .fs import find_chrome_dll, get_brave_for_chrome_dll, get_brave_path # noqa: F401
1+
from .fs import (find_chrome_dll, get_brave_for_chrome_dll, # noqa: F401
2+
get_brave_path, get_brave_updater_for_chrome_dll)
23
from .gitrepo import BraveChannel, get_brave_release_asset_url # noqa: F401
34
from .runtime import kill_all_brave # noqa: F401
5+
from .UpdateDisabler import UpdateDisabler # noqa: F401

bravepatcher/utils/brave/fs.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,15 @@ def find_chrome_dll(brave_path: Optional[Path]) -> Optional[Path]:
6363
return res
6464

6565

66-
def get_brave_for_chrome_dll(chrome_dll_path: Path):
66+
def get_brave_for_chrome_dll(chrome_dll_path: Path) -> Path:
6767
if not _is_windows:
6868
return Path()
6969

7070
return chrome_dll_path.parent.parent / "brave.exe"
71+
72+
73+
def get_brave_updater_for_chrome_dll(chrome_dll_path: Path) -> Path:
74+
if not _is_windows:
75+
return Path()
76+
77+
return chrome_dll_path.parent.parent.parent.parent / "Update" / "BraveUpdate.exe"
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from abc import ABC, abstractmethod
2+
from pathlib import Path
3+
4+
5+
class AbstractFirewallHelper(ABC):
6+
@abstractmethod
7+
def allow_program(self, path: Path, name: str):
8+
pass
9+
10+
@abstractmethod
11+
def block_program(self, path: Path, name: str):
12+
pass
13+
14+
@abstractmethod
15+
def has_rule(self, name: str) -> bool:
16+
pass

0 commit comments

Comments
 (0)