Add url download option to storeMediaFile

This commit is contained in:
Yannick Mau 2020-03-14 00:36:17 +01:00
parent dc8494f0fe
commit 5911710163
2 changed files with 33 additions and 7 deletions

View File

@ -1494,9 +1494,10 @@ guarantee that your application continues to function properly in the future.
* **storeMediaFile**
Stores a file with the specified base64-encoded contents inside the media folder. To prevent Anki from removing
files not used by any cards (e.g. for configuration files), prefix the filename with an underscore. These files are
still synchronized to AnkiWeb.
Stores a file with the specified base64-encoded contents inside the media folder. alternatively you can specify a
url from where the file shell be downloaded. If both field `data` and `url` are provided, the `data` field will be
used. To prevent Anki from removing files not used by any cards (e.g. for configuration files), prefix the filename
with an underscore. These files are still synchronized to AnkiWeb.
*Sample request*:
```json
@ -1523,6 +1524,26 @@ guarantee that your application continues to function properly in the future.
Hello world!
```
*Sample request*:
```json
{
"action": "storeMediaFile",
"version": 6,
"params": {
"filename": "_hello.txt",
"url": "https://url.to.file"
}
}
```
*Sample result*:
```json
{
"result": null,
"error": null
}
```
* **retrieveMediaFile**
Retrieves the base64-encoded contents of the specified file, returning `false` if the file does not exist.

View File

@ -421,10 +421,15 @@ class AnkiConnect:
@util.api()
def storeMediaFile(self, filename, data):
self.deleteMediaFile(filename)
self.media().writeData(filename, base64.b64decode(data))
def storeMediaFile(self, filename, data=None, url=None):
if data:
self.deleteMediaFile(filename)
self.media().writeData(filename, base64.b64decode(data))
elif url:
downloadedData = util.download(url)
self.media().writeData(filename, downloadedData)
else:
raise Exception('You must either provide a "data" or a "url" field.')
@util.api()
def retrieveMediaFile(self, filename):