Required implementations
All extensions must return ProviderScopes. These scopes determine which events are sent to your extension.
Lets consider the search scope for this example. Adding the search scope would cause the main app to request search results from your extension.
{{#tabs }} {{#tab name="Rust" }}
#![allow(unused)] fn main() { impl Provider for SampleExtension { fn get_provider_scopes(&self) -> api::MoosyncResult<Vec<ExtensionProviderScope>> { Ok(vec![ExtensionProviderScope::Search]) } fn search(&self, req: RequestedSearchResultRequest) -> api::MoosyncResult<SearchResult> { info!("Search requested for query: {}", req.query); let url = format!("https://api.spotify.com/v1/search?q={}&type=track", req.query); let resp = moosync_edk::http::get(&url, None)?; if resp.is_success() { info!("Search API response: {}", resp.text().unwrap_or_default()); } Ok(SearchResult { songs: vec![], artists: vec![], playlists: vec![], albums: vec![], genres: vec![], }) } } }
{{#endtab }} {{#tab name="Golang" }}
func (s *SampleExtension) GetProviderScopes() ([]extensions.ExtensionProviderScope, error) {
return []extensions.ExtensionProviderScope{
extensions.ExtensionProviderScope_SEARCH,
}, nil
}
func (s *SampleExtension) Search(req *extensions.RequestedSearchResultRequest) (*songs.SearchResult, error) {
api.LogInfo("Search called with query: %s", req.GetQuery())
url := "https://api.spotify.com/v1/search?q=" + req.GetQuery() + "&type=track"
resp, err := api.HttpGet(url, nil)
if err != nil {
return nil, err
}
if resp.OK() {
api.LogInfo("Search response: %s", resp.Text())
}
return &songs.SearchResult{
Songs: []*songs.Song{},
Playlists: []*songs.Playlist{},
Artists: []*songs.Artist{},
Albums: []*songs.Album{},
Genres: []*songs.Genre{},
}, nil
}
{{#endtab }} {{#tab name="Python" }}
class SearchProviderExtension(Extension):
def get_provider_scopes(self, req):
return extensions_pb2.GetProviderScopesResponse(
scopes=[extensions_pb2.ExtensionProviderScope.SEARCH]
)
def search(self, req):
print(f"Search query: {req.query}")
url = f"https://api.spotify.com/v1/search?q={req.query}&type=track"
resp = http_get(url)
if resp.ok:
print(f"Search response: {resp.text}")
return songs_pb2.SearchResult(
songs=[],
artists=[],
playlists=[],
albums=[],
genres=[]
)
{{#endtab }} {{#tab name="Javascript" }}
export function registerProviderHandlers() {
const api = getApi();
api.on("getProviderScopes", () => {
return new GetProviderScopesResponse({
scopes: [
13 as any // ExtensionProviderScope.SEARCH
]
});
});
api.on("requestedSearchResult", async (req) => {
console.log("Search query:", req.query);
const url = `https://api.spotify.com/v1/search?q=${encodeURIComponent(req.query)}&type=track`;
const resp = await api.fetch(url);
if (resp.ok) {
const text = await resp.text();
console.log("Search response:", text);
}
return new RequestedSearchResultResponse({
songs: []
});
});
}
{{#endtab }} {{#endtabs }}