mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
website: write into and sidebar and developing plugins pages
This commit is contained in:
parent
a734ded6f8
commit
7bb69c02de
@ -1,17 +1,20 @@
|
|||||||
// @ts-check
|
// @ts-check
|
||||||
import { defineConfig } from 'astro/config';
|
import { defineConfig } from "astro/config";
|
||||||
|
|
||||||
import tailwindcss from '@tailwindcss/vite';
|
import tailwindcss from "@tailwindcss/vite";
|
||||||
|
|
||||||
import react from '@astrojs/react';
|
import react from "@astrojs/react";
|
||||||
|
|
||||||
import mdx from '@astrojs/mdx';
|
import mdx from "@astrojs/mdx";
|
||||||
|
|
||||||
// https://astro.build/config
|
// https://astro.build/config
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
vite: {
|
vite: {
|
||||||
plugins: [tailwindcss()]
|
plugins: [tailwindcss()],
|
||||||
|
},
|
||||||
|
integrations: [react(), mdx()],
|
||||||
|
redirects: {
|
||||||
|
"/docs": "/docs/get-started/introduction",
|
||||||
|
"/docs/get-started": "/docs/get-started/introduction",
|
||||||
},
|
},
|
||||||
|
|
||||||
integrations: [react(), mdx()]
|
|
||||||
});
|
});
|
Binary file not shown.
After Width: | Height: | Size: 123 KiB |
@ -14,7 +14,7 @@ import { LuHouse, LuNewspaper, LuDownload, LuBook } from "react-icons/lu";
|
|||||||
export const routes: Record<string, [string, IconType|null]> = {
|
export const routes: Record<string, [string, IconType|null]> = {
|
||||||
"/": ["Home", LuHouse],
|
"/": ["Home", LuHouse],
|
||||||
"/blog": ["Blog", LuNewspaper],
|
"/blog": ["Blog", LuNewspaper],
|
||||||
"/docs/get-started/introduction": ["Docs", LuBook],
|
"/docs": ["Docs", LuBook],
|
||||||
"/downloads": ["Downloads", LuDownload],
|
"/downloads": ["Downloads", LuDownload],
|
||||||
"/about": ["About", null],
|
"/about": ["About", null],
|
||||||
};
|
};
|
||||||
|
@ -57,13 +57,13 @@ const sections: [
|
|||||||
(prefix: string) => Promise<CollectionEntry<"docs">[]>,
|
(prefix: string) => Promise<CollectionEntry<"docs">[]>,
|
||||||
][] = [
|
][] = [
|
||||||
["Get Started", "get-started/", queryCollection],
|
["Get Started", "get-started/", queryCollection],
|
||||||
["Guides", "guides/", queryCollection],
|
["Developing Plugins", "developing-plugins/", queryCollection],
|
||||||
["Design System", "design/", queryCollection],
|
// ["Design System", "design/", queryCollection],
|
||||||
["Tailwind Components", "tailwind/", queryCollection],
|
// ["Tailwind Components", "tailwind/", queryCollection],
|
||||||
["Functional Components", "components/", queryMetaCollection],
|
// ["Functional Components", "components/", queryMetaCollection],
|
||||||
["Headless Components", "headless/", queryCollection],
|
// ["Headless Components", "headless/", queryCollection],
|
||||||
["Integrations", "integrations/", queryMetaCollection],
|
// ["Integrations", "integrations/", queryMetaCollection],
|
||||||
["Resources", "resources/", queryCollection],
|
// ["Resources", "resources/", queryCollection],
|
||||||
];
|
];
|
||||||
|
|
||||||
// Build navigation dynamically
|
// Build navigation dynamically
|
||||||
|
@ -4,6 +4,7 @@ import { FaGithub } from "react-icons/fa6";
|
|||||||
import SidebarButton from "./sidebar-button";
|
import SidebarButton from "./sidebar-button";
|
||||||
|
|
||||||
const pathname = Astro.url.pathname;
|
const pathname = Astro.url.pathname;
|
||||||
|
console.log("pathname:", pathname);
|
||||||
---
|
---
|
||||||
|
|
||||||
<header class="flex justify-between items-center px-4 bg-surface">
|
<header class="flex justify-between items-center px-4 bg-surface">
|
||||||
@ -33,12 +34,14 @@ const pathname = Astro.url.pathname;
|
|||||||
{
|
{
|
||||||
Object.entries(routes).map((route) => {
|
Object.entries(routes).map((route) => {
|
||||||
const Icon = route[1][1];
|
const Icon = route[1][1];
|
||||||
|
const isActive =
|
||||||
|
route[0] === "/" ? pathname === "/" : pathname.startsWith(route[0]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<a href={route[0]}>
|
<a href={route[0]}>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class={`btn flex gap-2 ${route[0] === "/downloads" ? "preset-tonal-secondary" : "preset-tonal-surface"} ${pathname.endsWith(route[0]) ? "underline" : ""}`}
|
class={`btn flex gap-2 ${route[0] === "/downloads" ? "preset-tonal-secondary" : "preset-tonal-surface"} ${isActive ? "underline" : ""}`}
|
||||||
>
|
>
|
||||||
{Icon && <Icon />}
|
{Icon && <Icon />}
|
||||||
{route[1][0]}
|
{route[1][0]}
|
||||||
|
60
website/src/content/docs/developing-plugins/introduction.mdx
Normal file
60
website/src/content/docs/developing-plugins/introduction.mdx
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
---
|
||||||
|
layout: "layouts/DocLayout.astro"
|
||||||
|
title: Introduction
|
||||||
|
description: Learn how to develop plugins for Spotube
|
||||||
|
order: 0
|
||||||
|
---
|
||||||
|
|
||||||
|
Plugins in Spotube are used for fetching metadata (Playlist, Album, Artist, Track Info, Search etc) and scrobbling. It gives developers
|
||||||
|
access to Spotube's internal APIs to create custom metadata providers and audio [scrobblers][scrobbler_wiki].
|
||||||
|
|
||||||
|
Plugins needs to be written in [hetu_script][hetu_script_link], which is a Dart-based scripting language.
|
||||||
|
You probably never heard of it before.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
To develop plugins for Spotube, you need to have the following requirements:
|
||||||
|
|
||||||
|
- Basic programming knowledge
|
||||||
|
- [Dart][dart] and [Flutter][flutter] knowledge
|
||||||
|
- [Visual Studio Code][vscode] or any other code editor
|
||||||
|
|
||||||
|
Spotube uses [hetu_script][hetu_script_link]. It's kind of similar to Typescript.
|
||||||
|
Learning it shouldn't take much time if you already know Dart or Javascript.
|
||||||
|
|
||||||
|
Go to Hetu Script's [official website and documentation][hetu_script_link] to learn more about it.
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
The [`hetu_script`][hetu_script_link] programming/scripting language is relatively new. So there's no ecosystem around it yet.
|
||||||
|
However, we created some helpful libraries to aid with Spotube plugin development. The [hetu-community][hetu_community] is a
|
||||||
|
community driven effort to create libraries and tools for Hetu Script. Below are available libraries:
|
||||||
|
|
||||||
|
#### Core Libraries
|
||||||
|
|
||||||
|
- [**hetu-community/hetu_std**][hetu_std]: A standard library for Hetu Script. Provides basic functionality like Http client, DateTime, Cryptography API,
|
||||||
|
encoding/decoding (JSON, Utf8, Base32) etc.
|
||||||
|
- [**KRTirtho/hetu_spotube_plugin**][hetu_spotube_plugin]: A library for Spotube plugin development. It provides access to Spotube's internal APIs
|
||||||
|
(Webview, Forms, LocalStorage etc.) and utilities for fetching metadata and scrobbling.
|
||||||
|
|
||||||
|
> You can find more libraries in the [hetu-community GitHub organization][hetu_community].
|
||||||
|
|
||||||
|
#### Programming aid
|
||||||
|
|
||||||
|
- [Hetu Script Plugin for VSCode][hetu_script_vscode]: A VSCode extension for Hetu Script. It provides basic syntax highlighting
|
||||||
|
support. But it doesn't support [LSP (Language Server Protocol)][lsp] yet so no autocompletion or linting is available.
|
||||||
|
- [hetu_script_dev_tools][hetu_script_dev_tools]: A CLI tool for compiling hetu script files to bytecode or directly running them and a REPL
|
||||||
|
|
||||||
|
{/* Link Variables */}
|
||||||
|
[hetu_script_link]: https://hetu-script.github.io/
|
||||||
|
[scrobbler_wiki]: https://en.wikipedia.org/wiki/Scrobbling
|
||||||
|
[dart]: https://dart.dev/
|
||||||
|
[flutter]: https://flutter.dev/
|
||||||
|
[vscode]: https://code.visualstudio.com/
|
||||||
|
[lsp]: https://en.wikipedia.org/wiki/Language_Server_Protocol
|
||||||
|
[hetu_script_vscode]: https://marketplace.visualstudio.com/items?itemName=hetu-script.hetuscript
|
||||||
|
[hetu_community]: https://github.com/hetu-community
|
||||||
|
[hetu_std]: https://github.com/hetu-community/hetu_std
|
||||||
|
[hetu_otp_util]: https://github.com/hetu-community/hetu_otp_util
|
||||||
|
[hetu_spotube_plugin]: https://github.com/KRTirtho/hetu_spotube_plugin
|
||||||
|
[hetu_script_dev_tools]: https://pub.dev/packages/hetu_script_dev_tools
|
28
website/src/content/docs/get-started/installing-plugins.mdx
Normal file
28
website/src/content/docs/get-started/installing-plugins.mdx
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
layout: 'layouts/DocLayout.astro'
|
||||||
|
title: Installing plugins
|
||||||
|
description: Learn how to install and manage plugins in Spotube
|
||||||
|
order: 1
|
||||||
|
---
|
||||||
|
|
||||||
|
Let's first learn how to install plugins in Spotube. It's pretty simple.
|
||||||
|
|
||||||
|
1. Open Spotube (duh!)
|
||||||
|
1. Go to Settings
|
||||||
|
1. Then go to the top option, "Metadata provider plugins"
|
||||||
|
1. You can see a list of all the plugins that are available to install
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## More ways to install new plugins
|
||||||
|
|
||||||
|
Usually, Spotube will list public repositories of plugins from github and codeberg in the _Available plugins_ section.
|
||||||
|
This is a non curated list, so be careful when installing plugins. Always check the source before installing.
|
||||||
|
A malicious plugin given full access can easily steal your credentials. So be careful!
|
||||||
|
|
||||||
|
Try to use the `Official` tagged plugins all the time if you don't want to deal with potential security risks.
|
||||||
|
|
||||||
|
- **Upload plugin from local file**: You can also install plugins from local file (plugin.smplug) using the *Orange Upload button* on the top right beside the text field.
|
||||||
|
- **Install plugin from URL**: If you have a direct link to a plugin file, you can just paste the URL in the text field and use the gray download button beside it
|
||||||
|
|
||||||
|
> If you're a developer, you can create your own plugins and share them with the community. Check out the [Plugin Development Guide](/docs/developing-plugins) for more information.
|
@ -1,8 +1,20 @@
|
|||||||
---
|
---
|
||||||
layout: 'layouts/DocLayout.astro'
|
layout: 'layouts/DocLayout.astro'
|
||||||
title: Introduction
|
title: Introduction
|
||||||
description: Intro to Spotube Docs
|
description: ""
|
||||||
order: 0
|
order: 0
|
||||||
---
|
---
|
||||||
|
|
||||||
## Spotube Docs
|
Spotube is an extensible music player designed to give users full control over their listening experience. With a flexible configuration system, Spotube can be tailored to fit individual preferences and workflows.
|
||||||
|
|
||||||
|
## Key Features
|
||||||
|
|
||||||
|
- **Extensible Architecture:** Spotube supports a powerful plugin system, allowing users to integrate with any music metadata service or extend functionality as needed.
|
||||||
|
- **Multiple Integrations:** Out of the box, Spotube connects with various music services, making it easy to access and manage your library.
|
||||||
|
- **Customizable Experience:** Users can configure Spotube to match their unique requirements, from interface themes to playback options.
|
||||||
|
|
||||||
|
## Why Spotube?
|
||||||
|
|
||||||
|
Spotube is built for music enthusiasts who want more than a standard player. Whether you need advanced metadata management, custom integrations, or a personalized interface, Spotube provides the tools to create your ideal music environment.
|
||||||
|
|
||||||
|
Explore the documentation to learn how to set up Spotube, install plugins, and make the most of its features.
|
@ -60,7 +60,10 @@ const { frontmatter, headings } = Astro.props;
|
|||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
<!-- Content -->
|
<!-- Content -->
|
||||||
<article class="space-y-8" data-pagefind-body>
|
<article
|
||||||
|
class="space-y-8 prose lg:prose-xl dark:prose-invert"
|
||||||
|
data-pagefind-body
|
||||||
|
>
|
||||||
<slot />
|
<slot />
|
||||||
</article>
|
</article>
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
@ -70,16 +73,6 @@ const { frontmatter, headings } = Astro.props;
|
|||||||
<aside
|
<aside
|
||||||
class="hidden xl:block self-start sticky top-[70px] h-[calc(100vh-70px)] py-4 xl:py-10 space-y-8 overflow-y-auto"
|
class="hidden xl:block self-start sticky top-[70px] h-[calc(100vh-70px)] py-4 xl:py-10 space-y-8 overflow-y-auto"
|
||||||
>
|
>
|
||||||
<!-- Carbon Ads -->
|
|
||||||
<script
|
|
||||||
is:inline
|
|
||||||
async
|
|
||||||
type="text/javascript"
|
|
||||||
src="//cdn.carbonads.com/carbon.js?serve=CWYD627U&placement=carbonadsnet"
|
|
||||||
id="_carbonads_js"></script>
|
|
||||||
<!-- Table of Contents -->
|
|
||||||
<TableOfContents {headings} />
|
<TableOfContents {headings} />
|
||||||
<!-- Promot -->
|
|
||||||
<!-- <div class="card aspect-video flex justify-center items-center preset-tonal">(promo)</div> -->
|
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user