Skip to content

Commit bd8dcd5

Browse files
committed
Added Gelateria La Romana dal 1947 Gelati recipe
1 parent b6ecc7d commit bd8dcd5

File tree

7 files changed

+115
-1
lines changed

7 files changed

+115
-1
lines changed

src/main.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Plugin } from 'obsidian';
22
import { MarkdownTableConverter } from './markdown/MarkdownTableConverter';
33
import { MarkdownTableFactory } from './markdown/MarkdownTableFactory';
44
import { PluginUpdateCommandFactory } from './plugin/PluginUpdateCommandFactory';
5+
import { GelateriaLaRomanaDel1947GelatiRecipe } from './recipes/gelateria_la_romana_dal_1947_gelati/GelateriaLaRomanaDel1947GelatiRecipe';
56
import { HanayamaHuzzlesRecipe } from './recipes/hanayama_huzzles/HanayamaHuzzlesRecipe';
67
import { IQPuzzlesRecipe } from './recipes/iq_puzzles/IQPuzzlesRecipe';
78
import { RecipesSettingsTab } from './settings/RecipesSettingsTab';
@@ -49,6 +50,20 @@ export default class TrackALotPlugin extends Plugin {
4950

5051
this.addCommand(command);
5152
}
53+
54+
if (settingsManager.settings.gelateriaLaRomanaDel1947Gelati.isActive) {
55+
const command = commandFactory.command(
56+
GelateriaLaRomanaDel1947GelatiRecipe.NAME,
57+
new GelateriaLaRomanaDel1947GelatiRecipe(
58+
markdownTableFactory,
59+
markdownTableConverter,
60+
trackablesUpdater
61+
),
62+
settingsManager.settings.gelateriaLaRomanaDel1947Gelati
63+
);
64+
65+
this.addCommand(command);
66+
}
5267
}
5368

5469
onunload() {}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import { MarkdownTableConverter } from 'src/markdown/MarkdownTableConverter';
2+
import { MarkdownTableFactory } from 'src/markdown/MarkdownTableFactory';
3+
import { TrackablesUpdater } from 'src/tracking/TrackablesUpdater';
4+
import { NameAndImageRecipe } from '../name_and_image/NameAndImageRecipe';
5+
import { Recipe } from '../Recipe';
6+
import { GelateriaLaRomanaDel1947Gelato } from './GelateriaLaRomanaDel1947Gelato';
7+
8+
export class GelateriaLaRomanaDel1947GelatiRecipe implements Recipe {
9+
static readonly NAME = 'Gelateria La Romana dal 1947 Gelati';
10+
static readonly WEBPAGE = 'https://www.gelateriaromana.com';
11+
12+
static readonly #SCRAPE_URLS = [
13+
'https://www.gelateriaromana.com/en/cat0_6657-the-tastes-of-tradition.php',
14+
'https://www.gelateriaromana.com/en/cat0_6657-the-tastes-of-tradition.php?pg=2',
15+
'https://www.gelateriaromana.com/en/cat0_6657-the-tastes-of-tradition.php?pg=3'
16+
];
17+
18+
private readonly recipe;
19+
20+
constructor(
21+
markdownTableFactory: MarkdownTableFactory,
22+
markdownTableConverter: MarkdownTableConverter,
23+
trackablesUpdater: TrackablesUpdater
24+
) {
25+
this.recipe = new NameAndImageRecipe<GelateriaLaRomanaDel1947Gelato>(
26+
GelateriaLaRomanaDel1947GelatiRecipe.NAME,
27+
GelateriaLaRomanaDel1947GelatiRecipe.#SCRAPE_URLS,
28+
markdownTableFactory,
29+
markdownTableConverter,
30+
trackablesUpdater,
31+
content => {
32+
return Array.from(content.querySelectorAll('#catElencoProdotti .cat_riqProdotto'));
33+
},
34+
product => {
35+
const title = product.querySelector('.riquadri_titolo_content .cat-linkprod')?.textContent;
36+
37+
if (title == null) {
38+
return null;
39+
}
40+
41+
const name = title;
42+
43+
const image = product.querySelector('.riquadri_foto .cat-linkprod img');
44+
const imageLink = image != null ? (image as HTMLImageElement).src : '';
45+
46+
return new GelateriaLaRomanaDel1947Gelato(name, imageLink);
47+
},
48+
(name, imageLink, status) => {
49+
return new GelateriaLaRomanaDel1947Gelato(name, imageLink, status);
50+
}
51+
);
52+
}
53+
54+
updatedListInContent(content: string): Promise<string> {
55+
return this.recipe.updatedListInContent(content);
56+
}
57+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { RecipeSettingsToggleable } from 'src/settings/data/RecipeSettingsToggleable';
2+
3+
export class GelateriaLaRomanaDel1947GelatiRecipeSettings implements RecipeSettingsToggleable {
4+
isActive: boolean;
5+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Trackable } from 'src/tracking/Trackable';
2+
import { NameAndImage } from '../name_and_image/NameAndImage';
3+
4+
export class GelateriaLaRomanaDel1947Gelato implements NameAndImage {
5+
readonly identifier: string;
6+
7+
constructor(
8+
public readonly name: string,
9+
public readonly imageLink: string,
10+
public readonly status = ''
11+
) {
12+
this.identifier = name;
13+
}
14+
15+
withStatus(newStatus: string): Trackable {
16+
return new GelateriaLaRomanaDel1947Gelato(this.name, this.imageLink, newStatus);
17+
}
18+
}

src/settings/RecipesSettingsTab.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { App, Plugin, PluginSettingTab, Setting } from 'obsidian';
22
import 'src/html/HTMLElementExtensions';
3+
import { GelateriaLaRomanaDel1947GelatiRecipe } from 'src/recipes/gelateria_la_romana_dal_1947_gelati/GelateriaLaRomanaDel1947GelatiRecipe';
4+
import { GelateriaLaRomanaDel1947GelatiRecipeSettings } from 'src/recipes/gelateria_la_romana_dal_1947_gelati/GelateriaLaRomanaDel1947GelatiRecipeSettings';
35
import { HanayamaHuzzlesRecipe } from 'src/recipes/hanayama_huzzles/HanayamaHuzzlesRecipe';
46
import { HanayamaHuzzlesRecipeExtraSettingsAdder } from 'src/recipes/hanayama_huzzles/settings/HanayamaHuzzlesRecipeExtraSettingsAdder';
57
import { HanayamaHuzzlesRecipeSettings } from 'src/recipes/hanayama_huzzles/settings/HanayamaHuzzlesRecipeSettings';
@@ -27,6 +29,7 @@ export class RecipesSettingsTab extends PluginSettingTab {
2729

2830
this.#addHanayamaHuzzlesSettings(settings.hanayamaHuzzles, settingsAdder);
2931
this.#addIQPuzzlesSettings(settings.iqPuzzles, settingsAdder);
32+
this.#addGelateriaLaRomanaDel1947GelatiSettings(settings.gelateriaLaRomanaDel1947Gelati, settingsAdder);
3033
}
3134

3235
#addHanayamaHuzzlesSettings(settings: HanayamaHuzzlesRecipeSettings, settingsAdder: SettingsAdder) {
@@ -64,6 +67,18 @@ export class RecipesSettingsTab extends PluginSettingTab {
6467
);
6568
}
6669

70+
#addGelateriaLaRomanaDel1947GelatiSettings(settings: GelateriaLaRomanaDel1947GelatiRecipeSettings, settingsAdder: SettingsAdder) {
71+
const adder = new RecipeSettingsAdder(this.containerEl, settingsAdder);
72+
adder.add(GelateriaLaRomanaDel1947GelatiRecipe.NAME, GelateriaLaRomanaDel1947GelatiRecipe.WEBPAGE);
73+
adder.activate(
74+
() => { return settings.isActive; },
75+
async value => {
76+
settings.isActive = value;
77+
await this.settingsManager.saveSettings();
78+
}
79+
);
80+
}
81+
6782
#setSettingsEnabled(settings: Setting[], enabled: boolean) {
6883
settings.forEach(setting => {
6984
setting.setDisabled(!enabled);

src/settings/SettingsManager.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import { Plugin } from 'obsidian';
2+
import { GelateriaLaRomanaDel1947GelatiRecipeSettings } from 'src/recipes/gelateria_la_romana_dal_1947_gelati/GelateriaLaRomanaDel1947GelatiRecipeSettings';
23
import { HanayamaHuzzlesRecipeSettings } from 'src/recipes/hanayama_huzzles/settings/HanayamaHuzzlesRecipeSettings';
34
import { IQPuzzlesRecipeSettings } from 'src/recipes/iq_puzzles/IQPuzzlesRecipeSettings';
45
import { RecipesSettings } from './data/RecipesSettings';
56

67
export class SettingsManager {
78
static readonly #DEFAULT_SETTINGS: Partial<RecipesSettings> = {
89
hanayamaHuzzles: new HanayamaHuzzlesRecipeSettings(),
9-
iqPuzzles: new IQPuzzlesRecipeSettings()
10+
iqPuzzles: new IQPuzzlesRecipeSettings(),
11+
gelateriaLaRomanaDel1947Gelati: new GelateriaLaRomanaDel1947GelatiRecipeSettings()
1012
};
1113

1214
settings: RecipesSettings;

src/settings/data/RecipesSettings.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
import { GelateriaLaRomanaDel1947GelatiRecipeSettings } from 'src/recipes/gelateria_la_romana_dal_1947_gelati/GelateriaLaRomanaDel1947GelatiRecipeSettings';
12
import { HanayamaHuzzlesRecipeSettings } from 'src/recipes/hanayama_huzzles/settings/HanayamaHuzzlesRecipeSettings';
23
import { IQPuzzlesRecipeSettings } from 'src/recipes/iq_puzzles/IQPuzzlesRecipeSettings';
34

45
export interface RecipesSettings {
56
hanayamaHuzzles: HanayamaHuzzlesRecipeSettings;
67
iqPuzzles: IQPuzzlesRecipeSettings;
8+
gelateriaLaRomanaDel1947Gelati: GelateriaLaRomanaDel1947GelatiRecipeSettings;
79
}

0 commit comments

Comments
 (0)