Refactor packages
Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
28
packages/obsidian/plugins/map-view/default.nix
Normal file
28
packages/obsidian/plugins/map-view/default.nix
Normal file
@@ -0,0 +1,28 @@
|
||||
{ pkgs, ... }:
|
||||
# AUTO-UPDATE: nix-update --flake obsidian-plugin-map-view
|
||||
pkgs.buildNpmPackage rec {
|
||||
pname = "obsidian-plugin-map-view";
|
||||
version = "5.5.0";
|
||||
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "esm7";
|
||||
repo = "obsidian-map-view";
|
||||
rev = version;
|
||||
hash = "sha256-HiH6KPLnCNyidp6TI7HJK4aj5SL0B0xO6HOWUgjVdd4=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
./package-lock.patch
|
||||
./file-api-key.patch
|
||||
];
|
||||
|
||||
npmDepsHash = "sha256-fNvDoMGIlmJ0zum3Qm/eLx5a/UV8rC2JmRYbXUAXgGg=";
|
||||
npmPackFlags = [ "--ignore-scripts" ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
cp ./dist/manifest.json $out/manifest.json
|
||||
cp ./dist/main.js $out/main.js
|
||||
cp ./dist/styles.css $out/styles.css
|
||||
'';
|
||||
}
|
230
packages/obsidian/plugins/map-view/file-api-key.patch
Normal file
230
packages/obsidian/plugins/map-view/file-api-key.patch
Normal file
@@ -0,0 +1,230 @@
|
||||
diff --git a/src/geosearch.ts b/src/geosearch.ts
|
||||
index f1b89b9..68fd4c1 100644
|
||||
--- a/src/geosearch.ts
|
||||
+++ b/src/geosearch.ts
|
||||
@@ -2,7 +2,7 @@ import { request, App } from 'obsidian';
|
||||
import * as geosearch from 'leaflet-geosearch';
|
||||
import * as leaflet from 'leaflet';
|
||||
import queryString from 'query-string';
|
||||
-
|
||||
+import { readFileSync } from 'fs';
|
||||
import { type PluginSettings } from 'src/settings';
|
||||
import { UrlConvertor } from 'src/urlConvertor';
|
||||
import { FileMarker } from 'src/markers';
|
||||
@@ -31,12 +31,16 @@ export class GeoSearcher {
|
||||
constructor(app: App, settings: PluginSettings) {
|
||||
this.settings = settings;
|
||||
this.urlConvertor = new UrlConvertor(app, settings);
|
||||
+
|
||||
+ const apiKey =
|
||||
+ settings.geocodingApiMethod === 'key'
|
||||
+ ? settings.geocodingApiKey
|
||||
+ : readFileSync(settings.geocodingApiPath, 'utf-8').trim();
|
||||
+
|
||||
if (settings.searchProvider == 'osm')
|
||||
this.searchProvider = new geosearch.OpenStreetMapProvider();
|
||||
else if (settings.searchProvider == 'google') {
|
||||
- this.searchProvider = new geosearch.GoogleProvider({
|
||||
- apiKey: settings.geocodingApiKey,
|
||||
- });
|
||||
+ this.searchProvider = new geosearch.GoogleProvider({ apiKey });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,10 +123,15 @@ export async function googlePlacesSearch(
|
||||
): Promise<GeoSearchResult[]> {
|
||||
if (settings.searchProvider != 'google' || !settings.useGooglePlaces)
|
||||
return [];
|
||||
- const googleApiKey = settings.geocodingApiKey;
|
||||
+
|
||||
+ const apiKey =
|
||||
+ settings.geocodingApiMethod === 'key'
|
||||
+ ? settings.geocodingApiKey
|
||||
+ : readFileSync(settings.geocodingApiPath, 'utf-8').trim();
|
||||
+
|
||||
const params = {
|
||||
query: query,
|
||||
- key: googleApiKey,
|
||||
+ key: apiKey,
|
||||
};
|
||||
if (centerOfSearch)
|
||||
(params as any)['location'] =
|
||||
diff --git a/src/settings.ts b/src/settings.ts
|
||||
index 44a0464..1cd6015 100644
|
||||
--- a/src/settings.ts
|
||||
+++ b/src/settings.ts
|
||||
@@ -48,7 +48,9 @@ export type PluginSettings = {
|
||||
maxClusterRadiusPixels: number;
|
||||
searchProvider: 'osm' | 'google';
|
||||
searchDelayMs: number;
|
||||
- geocodingApiKey: string;
|
||||
+ geocodingApiMethod?: 'key' | 'path';
|
||||
+ geocodingApiKey?: string;
|
||||
+ geocodingApiPath?: string;
|
||||
useGooglePlaces: boolean;
|
||||
saveHistory: boolean;
|
||||
queryForFollowActiveNote: string;
|
||||
@@ -228,6 +230,7 @@ export const DEFAULT_SETTINGS: PluginSettings = {
|
||||
maxClusterRadiusPixels: 20,
|
||||
searchProvider: 'osm',
|
||||
searchDelayMs: 250,
|
||||
+ geocodingApiMethod: 'key',
|
||||
geocodingApiKey: '',
|
||||
useGooglePlaces: false,
|
||||
mapSources: [
|
||||
diff --git a/src/settingsTab.ts b/src/settingsTab.ts
|
||||
index 7a5994c..ea586fd 100644
|
||||
--- a/src/settingsTab.ts
|
||||
+++ b/src/settingsTab.ts
|
||||
@@ -54,7 +54,10 @@ export class SettingsTab extends PluginSettingTab {
|
||||
});
|
||||
});
|
||||
|
||||
+ let apiMethodControl: Setting = null;
|
||||
let apiKeyControl: Setting = null;
|
||||
+ let apiPathControl: Setting = null;
|
||||
+
|
||||
new Setting(containerEl)
|
||||
.setName('Geocoding search provider')
|
||||
.setDesc(
|
||||
@@ -72,8 +75,19 @@ export class SettingsTab extends PluginSettingTab {
|
||||
this.plugin.settings.searchProvider = value;
|
||||
await this.plugin.saveSettings();
|
||||
this.refreshPluginOnHide = true;
|
||||
- apiKeyControl.settingEl.style.display =
|
||||
+
|
||||
+ apiMethodControl.settingEl.style.display =
|
||||
value === 'google' ? '' : 'none';
|
||||
+ apiKeyControl.settingEl.style.display =
|
||||
+ value === 'google' &&
|
||||
+ this.plugin.settings.geocodingApiMethod === 'key'
|
||||
+ ? ''
|
||||
+ : 'none';
|
||||
+ apiPathControl.settingEl.style.display =
|
||||
+ value === 'google' &&
|
||||
+ this.plugin.settings.geocodingApiMethod === 'path'
|
||||
+ ? ''
|
||||
+ : 'none';
|
||||
googlePlacesControl.settingEl.style.display =
|
||||
this.plugin.settings.searchProvider === 'google'
|
||||
? ''
|
||||
@@ -81,8 +95,37 @@ export class SettingsTab extends PluginSettingTab {
|
||||
});
|
||||
});
|
||||
|
||||
+ apiMethodControl = new Setting(containerEl)
|
||||
+ .setName('Geocoding API Method')
|
||||
+ .setDesc(
|
||||
+ 'Choose whether to provide the API key directly or via a file path.'
|
||||
+ )
|
||||
+ .addDropdown((component) => {
|
||||
+ component
|
||||
+ .addOption('key', 'API Key')
|
||||
+ .addOption('path', 'API Key Path')
|
||||
+ .setValue(this.plugin.settings.geocodingApiMethod || 'key')
|
||||
+ .onChange(async (value: 'key' | 'path') => {
|
||||
+ this.plugin.settings.geocodingApiMethod = value;
|
||||
+ await this.plugin.saveSettings();
|
||||
+ apiKeyControl.settingEl.style.display =
|
||||
+ value === 'key' &&
|
||||
+ this.plugin.settings.searchProvider === 'google'
|
||||
+ ? ''
|
||||
+ : 'none';
|
||||
+ apiPathControl.settingEl.style.display =
|
||||
+ value === 'path' &&
|
||||
+ this.plugin.settings.searchProvider === 'google'
|
||||
+ ? ''
|
||||
+ : 'none';
|
||||
+ });
|
||||
+ });
|
||||
+
|
||||
+ apiMethodControl.settingEl.style.display =
|
||||
+ this.plugin.settings.searchProvider === 'google' ? '' : 'none';
|
||||
+
|
||||
apiKeyControl = new Setting(containerEl)
|
||||
- .setName('Gecoding API key')
|
||||
+ .setName('Geocoding API key')
|
||||
.setDesc(
|
||||
'If using Google as the geocoding search provider, paste the API key here. See the plugin documentation for more details. Changes are applied after restart.',
|
||||
)
|
||||
@@ -101,6 +144,40 @@ export class SettingsTab extends PluginSettingTab {
|
||||
? ''
|
||||
: 'red';
|
||||
});
|
||||
+
|
||||
+ apiKeyControl.settingEl.style.display =
|
||||
+ this.plugin.settings.searchProvider === 'google' &&
|
||||
+ this.plugin.settings.geocodingApiMethod === 'key'
|
||||
+ ? ''
|
||||
+ : 'none';
|
||||
+
|
||||
+ apiPathControl = new Setting(containerEl)
|
||||
+ .setName('Geocoding API key path')
|
||||
+ .setDesc(
|
||||
+ 'If using Google as the geocoding search provider and using a path to the API key, enter the file path here. See the plugin documentation for more details. Changes are applied after restart.'
|
||||
+ )
|
||||
+ .addText((component) => {
|
||||
+ component
|
||||
+ .setValue(this.plugin.settings.geocodingApiPath)
|
||||
+ .onChange(async (value) => {
|
||||
+ this.plugin.settings.geocodingApiPath = value;
|
||||
+ await this.plugin.saveSettings();
|
||||
+ component.inputEl.style.borderColor = value
|
||||
+ ? ''
|
||||
+ : 'red';
|
||||
+ });
|
||||
+ component.inputEl.style.borderColor = this.plugin.settings
|
||||
+ .geocodingApiPath
|
||||
+ ? ''
|
||||
+ : 'red';
|
||||
+ });
|
||||
+
|
||||
+ apiPathControl.settingEl.style.display =
|
||||
+ this.plugin.settings.searchProvider === 'google' &&
|
||||
+ this.plugin.settings.geocodingApiMethod === 'path'
|
||||
+ ? ''
|
||||
+ : 'none';
|
||||
+
|
||||
let googlePlacesControl = new Setting(containerEl)
|
||||
.setName('Use Google Places for searches')
|
||||
.setDesc(
|
||||
@@ -118,9 +195,6 @@ export class SettingsTab extends PluginSettingTab {
|
||||
});
|
||||
});
|
||||
|
||||
- // Display the API key control only if the search provider requires it
|
||||
- apiKeyControl.settingEl.style.display =
|
||||
- this.plugin.settings.searchProvider === 'google' ? '' : 'none';
|
||||
googlePlacesControl.settingEl.style.display =
|
||||
this.plugin.settings.searchProvider === 'google' ? '' : 'none';
|
||||
new Setting(containerEl)
|
||||
diff --git a/src/urlConvertor.ts b/src/urlConvertor.ts
|
||||
index 365f49b..2fdf0b8 100644
|
||||
--- a/src/urlConvertor.ts
|
||||
+++ b/src/urlConvertor.ts
|
||||
@@ -1,6 +1,6 @@
|
||||
import { App, Editor, TFile, request } from 'obsidian';
|
||||
import queryString from 'query-string';
|
||||
-
|
||||
+import { readFileSync } from 'fs';
|
||||
import * as leaflet from 'leaflet';
|
||||
import { type PluginSettings, type UrlParsingRule } from 'src/settings';
|
||||
import * as utils from 'src/utils';
|
||||
@@ -136,10 +136,15 @@ export class UrlConvertor {
|
||||
const placeName = placeNameMatch[1];
|
||||
if (this.settings.debug)
|
||||
console.log('Google link: found place name = ', placeName);
|
||||
- const googleApiKey = settings.geocodingApiKey;
|
||||
+
|
||||
+ const apiKey =
|
||||
+ settings.geocodingApiMethod === 'key'
|
||||
+ ? settings.geocodingApiKey
|
||||
+ : readFileSync(settings.geocodingApiPath, 'utf-8').trim();
|
||||
+
|
||||
const params = {
|
||||
query: placeName,
|
||||
- key: googleApiKey,
|
||||
+ key: apiKey,
|
||||
};
|
||||
const googleUrl =
|
||||
'https://maps.googleapis.com/maps/api/place/textsearch/json?' +
|
3766
packages/obsidian/plugins/map-view/package-lock.patch
Normal file
3766
packages/obsidian/plugins/map-view/package-lock.patch
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user