Skip to content

Conversation

@kenenisa
Copy link
Contributor

@kenenisa kenenisa commented Oct 6, 2025

Summary

  • Implement browser extensions functionality with OraExtensionManager
  • Add extensions settings view for managing downloads and updates

kenenisa and others added 16 commits September 18, 2025 18:09
…Handler configuration

- Added OraExtensionManager as an environment object in URLBar for managing installed extensions.
- Implemented a new ExtensionIconView to display extension icons in the URLBar.
- Enhanced TabScriptHandler configuration with additional preferences for push notifications and fullscreen support.
- Removed unnecessary print statements from BrowserView for cleaner code.
- Added functionality to load all available extensions from the application support directory in OraExtensionManager.
- Updated OraRoot and BrowserView to remove deprecated installation buttons and improve UI structure.
- Introduced a new Extensions tab in SettingsContentView for better extension management.
- Integrated a new ExtensionViewModel to manage extension directories in ExtensionsSettingsView.
- Added download and installation capabilities for extensions via the TabScriptHandler.
- Implemented a floating download button for .xpi links in WebViewNavigationDelegate.
- Updated OraExtensionManager to handle tab API messages and manage installed extensions more effectively.
- Improved UI components in URLBar to display extension icons using a dedicated ExtensionIconButton.
* ux: Split AI & classic search engines

- also adds duck duck go, bing, & kagi

* cleanup: Remove uneeded google check from the AI search engines

* cleanup: Polish up engine details

- resolves a bug introduced when issue #110 was fixed by moving where
the padding is implemented - removes hard coded case statement for AI vs
regular search for "Search on" vs "Ask" - sets brand colors to for kagi
& bing to match official hex codes
Updated the sidebar visibility to use user defaults for persistence. Added functionality to restore the active tab's transient state on app startup if it is not ready, enhancing user experience by ensuring continuity in tab management.
* feat: add ability to edit container name and emoji

* Change default emoji in createContainer method

---------

Co-authored-by: Kenenisa Alemayehu <[email protected]>
* feat: wip double click

* feat: add double click to maximize view

* remove deprecation change

* fix: when resizing use previous frame
* fix: settings model container

* fix: space settings ui more digestible

* fix: move extension file to extension directory

* fix: refactor retry of container creation failure

* fix: allow left and right settings view in spaces to scroll independently
* feat: wip double click

* feat: add double click to maximize view

* remove deprecation change

* fix: when resizing use previous frame
* feat: wip double click

* feat: add double click to maximize view

* remove deprecation change

* fix: when resizing use previous frame
* feat: wip double click

* feat: add double click to maximize view

* remove deprecation change

* fix: when resizing use previous frame
@yonaries yonaries changed the title feat: add extensions support Extensions support Oct 6, 2025
@atpugvaraa
Copy link
Contributor

@kenenisa i tried this out and extensions do work but the importing is faulty as the zip is not being correctly unzipped.. or copied over.. if it is not an issue, i'd really love to figure this out and add some more quality of life features to extensions!

Thank you very much for pioneering this!

@StringNick
Copy link

1password extension: WebContent[81572] Runtime error reported: Invalid call to runtime.connect(). No runtime.onConnect listeners foun

atpugvaraa and others added 11 commits October 8, 2025 21:44
- Fixes Problem with Importing
- Minor UI padding fixes.
Updated the sidebar visibility to use user defaults for persistence. Added functionality to restore the active tab's transient state on app startup if it is not ready, enhancing user experience by ensuring continuity in tab management.
* feat: wip double click

* feat: add double click to maximize view

* remove deprecation change

* fix: when resizing use previous frame
…ager for Modularity (#101)

* attempting to fix a weird dragging issue I see

* fixing things for the linter

* split out the isDragging to make intent more cleaner

* ci: workaround SwiftLint type_body_length in TabManager (untouched file)

* CI is failing on existing SwiftLint violations in untouched files. This PR only contains the drag fix

* Extract tab search logic into dedicated service

Extract tab search logic into dedicated service

- Moves search functionality out of TabManager to reduce class size
- Uses protocol for testability
- Service is instantiated directly but can easily be made injectable if needed

* fixing linting issue inside of MouseTrackingArea

* Refactor TabManager: added explicit public modifiers, simplify addTab URL defaults

* Update ora/Services/TabManager.swift

Co-authored-by: Copilot <[email protected]>

* Remove unused private methods in TabManager

Removed unused private methods related to container and tab initialization.

---------

Co-authored-by: Yonathan Dejene <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: Kenenisa Alemayehu <[email protected]>
Updated the license information from MIT to GPL-2.0.
* feat: add URL handling and deep linking support

- Implemented URL scheme handling in the app to allow opening URLs directly.
- Added CFBundleURLTypes to project configuration for http and https schemes.
- Enhanced AppDelegate to manage incoming URLs and notify the UI.
- Updated OraRoot to handle URL opening via notifications.

* Update ora/Common/Utils/WindowFactory.swift

Co-authored-by: Copilot <[email protected]>

* fix: update main window initialization to use OraRoot instance

* feat: enhance browser capabilities and settings integration

- Added support for document types in project configuration, including Web URL, HTML, and XHTML.
- Updated Info.plist to define application category and minimum system version.
- Integrated DefaultBrowserManager to manage default browser status and reflect changes in the UI.
- Improved settings view to utilize DefaultBrowserManager for default browser checks.

---------

Co-authored-by: Copilot <[email protected]>
* Refactor BrowserView for Improved Tab Management and UI Responsiveness

- Enhanced tab handling by ensuring only active web views are displayed.
- Introduced a new method for rendering web views based on the active tab.
- Improved sidebar toggle functionality and UI responsiveness.
- Cleaned up code formatting and removed unnecessary whitespace for better readability.

* Enhance Tab Management and UI with Media Playback Indicators

- Added isPlayingMedia property to Tab model for tracking media playback state.
- Updated FloatingTabSwitcher and TabItem views to display media playback indicators.
- Refactored BrowserView to improve tab rendering logic and maintain UI responsiveness.
- Ensured MediaController updates the isPlayingMedia property in the corresponding Tab.
- Improved recent tab sorting and rendering logic in TabManager for better user experience.

* Add Tab Management Settings for Automatic Cleanup

- Introduced settings for tab management, allowing users to configure timeouts for tab activity and removal.
- Added UI elements in GeneralSettingsView for adjusting tab alive and removal timeouts.
- Implemented logic in TabManager to automatically clean up and remove inactive tabs based on user-defined settings.
- Enhanced Tab model with isAlive property to determine recent activity of tabs.

* Enhance Tab Management Settings and UI

- Updated tab management settings to allow users to configure timeouts for tab activity and removal, with new options in GeneralSettingsView.
- Adjusted default timeout values for tab activity and removal to 1 hour and 1 day, respectively.
- Implemented automatic cleanup logic in TabManager to manage inactive tabs based on user-defined settings.
- Improved UI elements for better user experience in managing tab settings.
- Cleaned up code formatting and removed unnecessary whitespace for improved readability.

* Refactor BrowserView to Improve Code Readability

- Removed unnecessary whitespace and cleaned up code formatting in BrowserView.swift for better readability.
- Streamlined the rendering logic for active web views, enhancing overall code clarity.

* Fix Typo in HistoryManager Parameter Name Across Multiple Files

- Corrected the parameter name from `historyManger` to `historyManager` in the `restoreTransientState` method across `Tab.swift`, `BrowserView.swift`, and `TabManager.swift` to ensure consistency and prevent potential errors.

* Refactor Window Closing Logic and Update URL Loading in Tabs

- Modified the "Close Window" button to only close the Settings window when it is the active window.
- Updated URL loading logic in Tab class to conditionally use savedURL based on tab type, ensuring correct URL handling.
- Corrected parameter name from `historyManger` to `historyManager` in multiple files for consistency.

* feat: make maximum recent tabs configurable in settings

* feat: normalize tab timeout settings for improved user configuration

- Introduced normalization logic for tab alive and removal timeouts, ensuring values are within supported ranges.
- Updated default timeout values to enhance user experience and prevent invalid settings.
- Added a helper method to streamline timeout normalization process.
kenenisa and others added 13 commits October 14, 2025 10:51
…ancements (#133)

* feat: left and right sidebar positioning

* fix: sidebar position swapping

* fix: drag splitter to hide sidebar

* fix: webpage issue in sidebar toggle

* fix: ignore safe area in NSPageView

* refactor: browser view to multiple file

* feat: floating sidebar on right

* fix: proper fraction inverstion

* refactor: global mouse tracking area

* refactor: clear state naming and radius for macos 26

* fix: bind error

* fix: typo

* fix: logger address

* fix: double click to max window to sidebar

* feat: custom window control added

* fix: reduce window control button size

* fix: conditional window control button size

* feat: floating URLbar and move sidebarPosition to AppState

* refactor: created sidebar manager and apply changes

* fix: fullscreen window control button

* improve: added a sidebar manager with persistant state

* fix: update button label for sidebar position toggle

* fix: improve trigger are for urlbar

* refactor: added a sidebar toolbar

* refactor: added a toolbar manager

* fix: persistant toolbar state

* update toolbar command buttons label

* improve: ora commands

* improve: appearance manager using appstorage now
…ng (#146)

* Add Auto Picture-in-Picture Feature and Settings Integration

- Introduced a new setting for enabling/disabling automatic Picture-in-Picture (PiP) mode on tab switch.
- Updated SettingsStore to manage the autoPiPEnabled state and persist it.
- Enhanced GeneralSettingsView to include a toggle for the auto PiP feature.
- Modified TabManager to trigger PiP when switching to a new tab if the setting is enabled.
- Implemented JavaScript function to handle PiP requests in WebViewNavigationDelegate.

* Enhance Media Playback Management and Favicon Handling

- Updated Tab model to synchronize title changes with the media controller when a tab's title is set.
- Refactored favicon handling in MediaPlayerCard to use AsyncImage for improved loading and display.
- Modified FaviconService to cache favicons more efficiently and updated the favicon URL size for better resolution.
- Enhanced MediaController to track whether media sessions were played and filter visible sessions accordingly.
- Implemented session removal logic in TabManager to ensure proper cleanup of media sessions when tabs are closed.
- Improved JavaScript integration for media state tracking, including handling of media play events and title updates.

* Refactor Tab and Favicon Handling for Improved Code Clarity

- Aligned whitespace in the Tab model for better readability.
- Updated favicon handling in FaviconService to streamline fetching and caching logic.
- Introduced a new method for generating favicon URLs, enhancing maintainability.
- Improved asynchronous favicon fetching with better error handling and completion callbacks.
- Enhanced the average color computation for favicons to ensure accurate color representation.

* Refactor Favicon Handling to Use Shared Instance

- Updated instances of FaviconService to use the shared singleton instance across multiple files for consistency and improved memory management.
- Removed unnecessary faviconService parameters from functions in SearchEngine and LauncherView to streamline code.
- Cleaned up code by eliminating redundant faviconService declarations in various views.

* Enhance BrowserSplitView Opacity and Hit Testing Logic

- Updated opacity handling in BrowserSplitView to use a more concise comparison for active tab identification.
- Added allowsHitTesting modifier to ensure user interactions are only enabled for the active tab, improving user experience.

* Fix Typo in FaviconService Completion Handler

* chore: swiftformat

---------

Co-authored-by: yonaries <[email protected]>
* added duplication feature

* fix : added calculation logic

* fix : drag and reorder issue when duplicate tabs are located

* fix : duplicate appears below duplicated tab instead of last

* fix : fixed merge conflicts with main

* fix : refactored duplicate method to use existing functions

* fix : refactored open tab to return the tab and reordered the tabs when new tab is created using duplicate

* fix : removed duplicate functions

* fixed the reorder tab issue

* Enhance TabManager to support silent loading of tabs. Added 'loadSilently' parameter to the tab opening method, allowing for silent initialization of web views based on user preferences.

* feat : added is alive check when duplicating tab to check if the tab is dormant or not

* feat : replaced is alive check with is web view ready

---------

Co-authored-by: Kenenisa Alemayehu <[email protected]>
@yonaries yonaries mentioned this pull request Oct 29, 2025
@yonaries yonaries linked an issue Oct 29, 2025 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Extenstion

10 participants