diff --git a/CHANGELOG.md b/CHANGELOG.md index da06a033c..faa5a49a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,19 +8,22 @@ ### Updated: - Apps: - BT/USB Remote: Add PTT support for Gather (by @SapphicCode) - - ESP Flasher: Add c3 and c6 to s3 option (by @jaylikesbunda) - - FlipLibrary: Added Wikipedia, dog facts and random quotes, bug fixes (by @jblanked), connectivity and progress improvements (by @jamisonderek) - - FlipSocial: Improved authentication (by @jblanked) - - FlipStore: Many bugfixes, support ESP32 firmware downloads, allow deleting apps (by @jblanked) + - Chess: Fix illegal move bug (by @956MB) + - ESP Flasher: Add c3 and c6 to s3 option (by @jaylikesbunda), update Marauder bins to 1.1.0 (by @justcallmekoko) + - FlipBIP: Refactor to make adding coins easier (by @xtruan) + - FlipLibrary: Wikipedia, dog facts, random quotes, weather, asset price, predictions, trivia, advice, uuid and many more, bug fixes (by @jblanked), holidays, improvements to connectivity and progress (by @jamisonderek) + - FlipSocial: Improved authentication, loading screens, memory fixes, bio and friend counts, search contacts (by @jblanked), RPC_KEYBOAARD support (by @jamisonderek) + - FlipStore: Many bugfixes, support ESP32 firmware downloads, allow deleting apps, memory fixes, update Marauder (by @jblanked), more improvements (by @jamisonderek) - FlipTrader: Improved progress display, added connectivity check on startup (by @jamisonderek) - FlipWeather: Stability improvements (by @jblanked), improved progress display, added connectivity check on startup (by @jamisonderek) - - FlipWiFi: Improved error handling, updated scan loading and parsing (by @jblanked), added connectivity check on startup (by @jamisonderek) - - FlipBIP: Refactor to make adding coins easier (by @xtruan) - - uPython: Enabled extra functions for the `random` module (by @ofabel) + - FlipWiFi: Improve error handling, update scan loading and parsing, fix crash when saving networks manually (by @jblanked), add connectivity check on startup (by @jamisonderek) - Pokemon Trade Tool: Update to gblink v0.63 which includes saving/loading of pin configurations for the EXT link interface (by @kbembedded) - Snake 2.0: Progress saving, endless mode, game timer, fruit positioning bugfixes (by @Willzvul) + - uPython: Enabled extra functions for the `random` module (by @ofabel) - WebCrawler: Improved progress display, added connectivity check on startup (by @jamisonderek) + - WiFi Marauder: AirTag Spoof, flipper blespam, sniff airtag and flipper, list airtag (by @0xchocolate) - UL: NFC Magic: Added possibility to write 7b MFC to Gen1 tags (by @mishamyte) + - UL: Unitemp: Fixed handling of hPa units (by @shininghero) - UL: Fixed apps for firmware USB CDC callback changes (by @xMasterX) - NFC: - OFW: Replace mf_classic_dict.nfc with Proxmark3 version (by @onovy) diff --git a/applications/external b/applications/external index 1163b5839..2a7953ffc 160000 --- a/applications/external +++ b/applications/external @@ -1 +1 @@ -Subproject commit 1163b5839883072526c029f9f636507b7f318f14 +Subproject commit 2a7953ffcd63e2b8dc4324379f8b0c5ddbbaaff8 diff --git a/firmware.scons b/firmware.scons index aa91c7e3b..522181e2f 100644 --- a/firmware.scons +++ b/firmware.scons @@ -29,6 +29,17 @@ env = ENV.Clone( TARGETS_ROOT=Dir("#/targets"), LINT_SOURCES=[ Dir("applications"), + # Not C code + Dir("!applications/system/js_app/packages"), + # Frequently updated and very different formatting, painful to merge + Dir("!applications/external/nfc_playlist"), + Dir("!applications/external/flip_library"), + Dir("!applications/external/flip_social"), + Dir("!applications/external/flip_store"), + Dir("!applications/external/flip_trader"), + Dir("!applications/external/flip_weather"), + Dir("!applications/external/flip_wifi"), + Dir("!applications/external/web_crawler"), ], LIBPATH=[ "${LIB_DIST_DIR}", diff --git a/scripts/lint.py b/scripts/lint.py index 8530209be..896cd3812 100755 --- a/scripts/lint.py +++ b/scripts/lint.py @@ -35,21 +35,25 @@ def init(self): self.parser_format.set_defaults(func=self.format) @staticmethod - def _filter_lint_directories(dirnames: list[str]): + def _filter_lint_directories( + dirpath: str, dirnames: list[str], excludes: tuple[str] + ): # Skipping 3rd-party code - usually resides in subfolder "lib" if "lib" in dirnames: dirnames.remove("lib") - # Skipping hidden folders + # Skipping hidden and excluded folders for dirname in dirnames.copy(): if dirname.startswith("."): dirnames.remove(dirname) + if os.path.join(dirpath, dirname).startswith(excludes): + dirnames.remove(dirname) - def _check_folders(self, folders: list): + def _check_folders(self, folders: list, excludes: tuple[str]): show_message = False pattern = re.compile(SOURCE_CODE_DIR_PATTERN) for folder in folders: for dirpath, dirnames, filenames in os.walk(folder): - self._filter_lint_directories(dirnames) + self._filter_lint_directories(dirpath, dirnames, excludes) for dirname in dirnames: if not pattern.match(dirname): @@ -61,11 +65,11 @@ def _check_folders(self, folders: list): "Folders are not renamed automatically, please fix it by yourself" ) - def _find_sources(self, folders: list): + def _find_sources(self, folders: list, excludes: tuple[str]): output = [] for folder in folders: for dirpath, dirnames, filenames in os.walk(folder): - self._filter_lint_directories(dirnames) + self._filter_lint_directories(dirpath, dirnames, excludes) for filename in filenames: ext = os.path.splitext(filename.lower())[1] @@ -168,14 +172,20 @@ def _apply_file_permissions(self, sources: list, dry_run: bool = False): def _perform(self, dry_run: bool): result = 0 - sources = self._find_sources(self.args.input) + excludes = [] + for folder in self.args.input.copy(): + if folder.startswith("!"): + excludes.append(folder.removeprefix("!")) + self.args.input.remove(folder) + excludes = tuple(excludes) + sources = self._find_sources(self.args.input, excludes) if not self._format_sources(sources, dry_run=dry_run): result |= 0b001 if not self._apply_file_naming_convention(sources, dry_run=dry_run): result |= 0b010 if not self._apply_file_permissions(sources, dry_run=dry_run): result |= 0b100 - self._check_folders(self.args.input) + self._check_folders(self.args.input, excludes) return result def check(self):