Skip to content

Commit 095596e

Browse files
committed
Feature: saving a story.
1 parent e8d3633 commit 095596e

File tree

6 files changed

+40
-1
lines changed

6 files changed

+40
-1
lines changed

src/_constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@ export const RFC = {
1515

1616
export const DEFAULT_SETTINGS: HackerNewsSettings = {
1717
defaultRefreshInterval: "60",
18+
storiesFolder: "HackerNews",
1819
}

src/apiManager.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { Notice } from 'obsidian';
2+
import path from 'path';
13
import type {
24
HNItem,
35
} from "src/integrations/types";
@@ -27,4 +29,20 @@ export default class APIManager {
2729

2830
return hnItem;
2931
}
32+
33+
public async saveHNItem(hnItem: HNItem) {
34+
const dir = this.plugin.settings.storiesFolder
35+
const filePath = path.join(dir, `${hnItem.title}.md`)
36+
37+
let stat = this.plugin.app.vault.adapter.stat(dir)
38+
if (!stat) {
39+
this.plugin.app.vault.createFolder(dir)
40+
}
41+
42+
stat = this.plugin.app.vault.adapter.stat(filePath)
43+
if (!stat) {
44+
this.plugin.app.vault.create(filePath, `[${hnItem.title}](${hnItem.url})`)
45+
new Notice(`Story saved: ${hnItem.title}`)
46+
}
47+
}
3048
}

src/l10n/locale/en.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ export default {
88
'HackerNews Settings': 'HackerNews Settings',
99
'Refresh Interval': 'Refresh Interval',
1010
'The time interval in seconds after which the next top story will be fetched. Default and invalid values will be reverted to 60 seconds.': 'The time interval in seconds after which the next top story will be fetched. Default and invalid values will be reverted to 60 seconds.',
11+
'Stories Folder': 'Stories Folder',
12+
'The folder that holds the saved HackerNews stories. The folder will be created if it does not exist.': 'The folder that holds the saved HackerNews stories. The folder will be created if it does not exist.',
1113
'Donate': 'Donate',
1214
'If you found this plugin helpful, consider donating to support continued development.': 'If you found this plugin helpful, consider donating to support continued development.',
1315
};

src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export interface HackerNewsSettings {
22
defaultRefreshInterval: string;
3+
storiesFolder: string;
34
}

src/ui/hackernews/hackernewsView.svelte

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@
1313
dataHN = await manager.requestTopHN();
1414
}
1515
16+
export async function saveHNItem() {
17+
console.log(`saving story ${dataHN.title}`);
18+
await manager.saveHNItem(dataHN);
19+
}
20+
1621
addEventListener("obsidian-hackernews-fetchTopHN", fetchTopHN);
1722
1823
onDestroy(() => {
@@ -27,7 +32,9 @@
2732
<a href="{ dataHN.url }" target="_blank" class="hn-link">{ dataHN.title }</a>
2833
<br />
2934
<p class="hn-read">
30-
<a href="{ dataHN.url }" target="_blank">Read more →</a>
35+
<a href="/" on:click={saveHNItem}>Save</a>
36+
37+
<a href="{ dataHN.url }" target="_blank">Read now</a>
3138
</p>
3239
<p class="hn-meta">
3340
Refreshes every { refreshInterval } seconds.

src/ui/settings/settingsTab.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@ export default class SettingsTab extends PluginSettingTab {
3030
plugin.settings.defaultRefreshInterval = `${refreshInterval}`;
3131
await this.save();
3232
}));
33+
new Setting(containerEl)
34+
.setName(t('Stories Folder'))
35+
.setDesc(t('The folder that holds the saved HackerNews stories. The folder will be created if it does not exist.'))
36+
.addText(text => text
37+
.setPlaceholder('stories folder')
38+
.setValue(plugin.settings.storiesFolder)
39+
.onChange(async (value) => {
40+
plugin.settings.storiesFolder = value;
41+
await this.save();
42+
}));
3343
new Setting(containerEl)
3444
.setName(t('Donate'))
3545
.setDesc(t('If you found this plugin helpful, consider donating to support continued development.'))

0 commit comments

Comments
 (0)