From 1697544cb65b4d766c58f41fb2a27ef4b59c37e8 Mon Sep 17 00:00:00 2001
From: Jack251970 <1160210343@qq.com>
Date: Thu, 5 Jun 2025 22:41:21 +0800
Subject: [PATCH 1/2] Add example code comments
---
.../FirefoxBookmarkLoader.cs | 28 +++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs
index 492a76c7b..f3b4c109f 100644
--- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs
+++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs
@@ -270,6 +270,7 @@ public class FirefoxBookmarkLoader : FirefoxBookmarkLoaderBase
///
/// Path to places.sqlite
///
+ ///
private static string PlacesPath
{
get
@@ -295,6 +296,33 @@ public class FirefoxBookmarkLoader : FirefoxBookmarkLoaderBase
var indexOfDefaultProfileAttributePath = lines.IndexOf("Path=" + defaultProfileFolderName);
+ /*
+ Current profiles.ini structure example as of Firefox version 69.0.1
+
+ [Install736426B0AF4A39CB]
+ Default=Profiles/7789f565.default-release <== this is the default profile this plugin will get the bookmarks from. When opened Firefox will load the default profile
+ Locked=1
+
+ [Profile2]
+ Name=newblahprofile
+ IsRelative=0
+ Path=C:\t6h2yuq8.newblahprofile <== Note this is a custom location path for the profile user can set, we need to cater for this in code.
+
+ [Profile1]
+ Name=default
+ IsRelative=1
+ Path=Profiles/cydum7q4.default
+ Default=1
+
+ [Profile0]
+ Name=default-release
+ IsRelative=1
+ Path=Profiles/7789f565.default-release
+
+ [General]
+ StartWithLastProfile=1
+ Version=2
+ */
// Seen in the example above, the IsRelative attribute is always above the Path attribute
var relativeAttribute = lines[indexOfDefaultProfileAttributePath - 1];
From 79d35bba5f398562fcde4ffea6ac9f70fa5a9004 Mon Sep 17 00:00:00 2001
From: Jack251970 <1160210343@qq.com>
Date: Thu, 5 Jun 2025 22:54:34 +0800
Subject: [PATCH 2/2] Check index before returning PlacesPath
---
.../FirefoxBookmarkLoader.cs | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs
index f3b4c109f..acace2506 100644
--- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs
+++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs
@@ -324,11 +324,22 @@ public class FirefoxBookmarkLoader : FirefoxBookmarkLoaderBase
Version=2
*/
// Seen in the example above, the IsRelative attribute is always above the Path attribute
+
+ var relativePath = Path.Combine(defaultProfileFolderName, "places.sqlite");
+ var absoluePath = Path.Combine(profileFolderPath, relativePath);
+
+ // If the index is out of range, it means that the default profile is in a custom location or the file is malformed
+ // If the profile is in a custom location, we need to check
+ if (indexOfDefaultProfileAttributePath - 1 < 0 ||
+ indexOfDefaultProfileAttributePath - 1 >= lines.Count)
+ {
+ return Directory.Exists(absoluePath) ? absoluePath : relativePath;
+ }
+
var relativeAttribute = lines[indexOfDefaultProfileAttributePath - 1];
return relativeAttribute == "0" // See above, the profile is located in a custom location, path is not relative, so IsRelative=0
- ? defaultProfileFolderName + @"\places.sqlite"
- : Path.Combine(profileFolderPath, defaultProfileFolderName) + @"\places.sqlite";
+ ? relativePath : absoluePath;
}
}
}