Skip to content

Commit

Permalink
fix: load from url protocol fix loading issues
Browse files Browse the repository at this point in the history
  • Loading branch information
chhoumann committed Jul 28, 2022
1 parent 7d54771 commit dfcfa4c
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 14 deletions.
36 changes: 24 additions & 12 deletions src/main.ts
@@ -1,5 +1,5 @@
import FeedParser from 'src/parser/feedParser';
import { currentEpisode, favorites, playedEpisodes, playlists, queue, savedFeeds } from 'src/store';
import { currentEpisode, favorites, playedEpisodes, playlists, queue, savedFeeds, viewState } from 'src/store';
import { Notice, Plugin, WorkspaceLeaf } from 'obsidian';
import { API } from 'src/API/API';
import { IAPI } from 'src/API/IAPI';
Expand All @@ -21,15 +21,16 @@ import { QueueController } from './store_controllers/QueueController';
import { FavoritesController } from './store_controllers/FavoritesController';
import { Episode } from './types/Episode';
import CurrentEpisodeController from './store_controllers/CurrentEpisodeController';
import { ViewState } from './types/ViewState';

export default class PodNotes extends Plugin implements IPodNotes {
public api: IAPI;
public settings: IPodNotesSettings;

private view: MainView;

private playedEpisodeController: StoreController<{[episodeName: string]: PlayedEpisode}>;
private savedFeedsController: StoreController<{[podcastName: string]: PodcastFeed}>;
private playedEpisodeController: StoreController<{ [episodeName: string]: PlayedEpisode }>;
private savedFeedsController: StoreController<{ [podcastName: string]: PodcastFeed }>;
private playlistController: StoreController<{ [playlistName: string]: Playlist }>;
private queueController: StoreController<Playlist>;
private favoritesController: StoreController<Playlist>;
Expand Down Expand Up @@ -106,7 +107,7 @@ export default class PodNotes extends Plugin implements IPodNotes {
id: 'hrpn',
name: 'Reload PodNotes',
callback: () => {
const id = this.manifest.id;
const id = this.manifest.id;
//@ts-ignore
this.app.plugins.disablePlugin(id).then(() => this.app.plugins.enablePlugin(id))
}
Expand All @@ -125,23 +126,34 @@ export default class PodNotes extends Plugin implements IPodNotes {

this.app.workspace.onLayoutReady(this.onLayoutReady.bind(this));

this.registerObsidianProtocolHandler('podnotes', async ({url, episodeName, time}) => {
if (!url || !episodeName) {
new Notice("No good");
this.registerObsidianProtocolHandler('podnotes', async ({ url, episodeName, time }) => {
if (!url || !episodeName || !time) {
new Notice("URL, episode name, and timestamp are required to play an episode");
return;
}

const decodedName = episodeName.replace(/\+/g, ' ');
const currentEp = get(currentEpisode);
const episodeIsPlaying = currentEp?.title === decodedName;

if (currentEp?.feedUrl !== url && currentEp?.title !== decodedName) {
if (episodeIsPlaying) {
viewState.set(ViewState.Player);
this.api.currentTime = parseFloat(time);
}

if (!episodeIsPlaying) {
const pcastParser = new FeedParser();
const episode = await pcastParser.findItemByTitle(decodedName, url);

if (!episode) {
new Notice("Episode not found");
return;
}

currentEpisode.set(episode);
}
viewState.set(ViewState.Player);

if (time) {
this.api.currentTime = parseFloat(time);
new Notice("Episode found, playing now. Please click timestamp again to play at specific time.");
}
});
}
Expand Down
18 changes: 17 additions & 1 deletion src/parser/feedParser.ts
Expand Up @@ -23,7 +23,23 @@ export default class FeedParser {
throw new Error("Could not find episode");
}

return this.parseItem(item);
const episode = this.parseItem(item);

const feed = await this.getFeed(url);

if (!episode.artworkUrl) {
episode.artworkUrl = feed.artworkUrl;
}

if (!episode.podcastName) {
episode.podcastName = feed.title;
}

if (!episode.feedUrl) {
episode.feedUrl = feed.url;
}

return episode;
}

public async getEpisodes(url: string): Promise<Episode[]> {
Expand Down
2 changes: 1 addition & 1 deletion src/ui/PodcastView/EpisodePlayer.svelte
Expand Up @@ -8,7 +8,7 @@
playedEpisodes,
queue,
playlists,
viewState,
viewState,
} from "src/store";
import { formatSeconds } from "src/utility/formatSeconds";
import { onDestroy, onMount } from "svelte";
Expand Down

0 comments on commit dfcfa4c

Please sign in to comment.