put.io-node
Version:
A Node.js wrapper for put.io APIv2 http://put.io
317 lines (295 loc) • 11 kB
text/typescript
import {PutIoHelper} from '../helpers/PutIoHelper';
export class Files extends PutIoHelper {
/**
*
* Lists files in a folder.
*
* @param parentId: ID of the folder you’d like to list. This defaults to the root directory (which has ID number 0).
*/
public getFilesList(parentId: number = 0): Promise<string> {
const paramaters: string[] = [];
paramaters.push(`&parent_id=${parentId}`);
return this.requestData('GET', 'files/list', paramaters);
}
/**
*
* Searches your (and shared) files. Returns 50 results at a time. The url for next 50 results is given in the “next” paramater.
*
* @param query: The keyword to search.
* @param page: Optional. Defaults to 1. If -1 given, returns all results at a time.
*
* Search Syntax
*
* from: me, shares, jack or all
* type: video, audio, image, iphone or all
* ext: mp3, avi, jpg, mp4 or all
*
* Search Examples
*
* https://put.io/v2/files/search/jazz from:”me,jack” ext:mp3
* Searches yours and jack’s files with the word jazz in its title which has the extension mp3.
*
* https://put.io/v2/files/search/”jazz album” from:”shares”
* Searches items shared with you with jazz album.
*
* https://put.io/v2/files/search/jazz type:iphone
* Searches your files and items shared with the word jazz in its title which are converted to mp4.
*
*/
public searchFiles(query: string, page: number = 1): Promise<string> {
return this.requestData('GET', `files/search/${query}/page/${page}`, []);
}
/**
*
* Uploads a file. If the uploaded file is a torrent file, starts it as a transfer.
* This endpoint must be used with upload.put.io domain.
*
* @param file: Name of the form input.
* @param filename: The file will be renamed according to this parameter.
* This defaults to filesystem-secure version of the original filename.
* @param parentId: Location of the uploaded file. This defaults to 0 (which means root).
*
* Example CURL line
* curl -i -F file=@/path/to/the/file 'https://upload.put.io/v2/files/upload?oauth_token=KD8D03MF'
*/
public uploadFile(file: string, filename?: string, parentId?: number): Promise<string> {
const paramaters: string[] = [];
paramaters.push(file);
if (filename !== undefined) {
paramaters.push(filename);
}
if (parentId !== undefined) {
paramaters.push(parentId.toString());
}
return this.uploadData('POST', 'files/upload', paramaters);
}
/**
*
* Creates a new folder.
*
* @param name: Name of the new folder.
* @param parentId: Location of the new folder.
*/
public createFolder(name: string, parentId: number): Promise<string> {
const paramaters: string[] = [];
const folderInfo = {
name : `${name}`,
parent_id : `${parentId}`
};
paramaters.push(JSON.stringify(folderInfo));
return this.requestData('POST', 'files/create-folder', paramaters);
}
/**
*
* Returns a file’s properties.
*
* @param fileID: ID of the file to retrieve
* @param parentId: ID of the folder you’d like to list. This defaults to the root directory (which has ID number 0).
*/
public getFileId(fileID: number, parentId: number = 0): Promise<string> {
const paramaters: string[] = [];
const parentInfo = {
parent_id : `${parentId}`
};
paramaters.push(JSON.stringify(parentInfo));
return this.requestData('GET', `files/${fileID}`, paramaters);
}
/**
*
* Deletes given files.
*
* @param fileIds: Array of file ids. Ex: [1,2,3,4]
*/
public deleteFiles(fileIds: number[]): Promise<string> {
const paramaters: string[] = [];
const files = {
file_ids : `${fileIds.toString()}`
};
paramaters.push(JSON.stringify(files));
return this.requestData('POST', 'files/delete', paramaters);
}
/**
*
* Renames given file.
*
* @param fileId: ID of the file to be renamed.
* @param name: Name of the new file.
*/
public renameFile(fileId: number, name: string): Promise<string> {
const paramaters: string[] = [];
const fileInfo = {
file_id : `${fileId}`,
name : `${name}`
};
paramaters.push(JSON.stringify(fileInfo));
return this.requestData('POST', 'files/rename', paramaters);
}
/**
*
* Moves files to the given destination.
*
* @param fileIds: Array of file ids. Ex: [1,2,3,4]
* @param parentId: Location of the destination folder.
*/
public moveFiles(fileIds: number[], parentId: number): Promise<string> {
const paramaters: string[] = [];
const fileInfo = {
file_ids : `${fileIds.toString()}`,
parent_id : `${parentId}`
};
paramaters.push(JSON.stringify(fileInfo));
return this.requestData('POST', 'files/move', paramaters);
}
/**
*
* Starts the conversion of the given file to mp4.
*
* @param id: ID of the files to be converted.
*/
public convertToMP4(id: number): Promise<string> {
return this.requestData('POST', `files/${id}/mp4`, []);
}
/**
*
* @param id: ID of the files to be converted.
*/
public getMP4Status(id: number): Promise<string> {
return this.requestData('GET', `files/${id}/mp4`, []);
}
/**
*
* Sends the contents of the file.
*
* @param id: ID of the file to download
*/
public downloadFile(id: number): Promise<string> {
return this.requestData('GET', `files/${id}/download`, []);
}
/**
*
* Shares given files with given friends or all friends.
*
* @param fileIds: Array of file ids. Ex: [1,2,3,4]
* @param friends: Array of names ‘everyone’ or user names of friends. Ex: ['johndoe','janedoe']
*/
public shareFiles(fileIds: number[], friends: string[]): Promise<string> {
const paramaters: string[] = [];
const fileInfo = {
file_ids : `${fileIds.toString()}`,
friends : `${fileIds.toString()}`
};
paramaters.push(JSON.stringify(fileInfo));
return this.requestData('POST', 'files/share', paramaters);
}
/**
*
* Returns list of shared files and share information.
* “shared_with” value in response may be “everyone” or an integer indicating number of people file is shared with (EX: “everyone” or 2)
*/
public getSharedFiles(): Promise<string> {
return this.requestData('GET', 'files/shared', []);
}
/**
*
* Returns list of users file is shared with. Each result item contains a share id which can be used for unsharing.
*
* @param id: ID of file
*/
public getUsersFileIsSharedWith(id: number): Promise<string> {
return this.requestData('GET', `files/${id}/shared-with`, []);
}
/**
*
* Unshares given file from given friends or from everyone.
*
* @param id: ID of file
* @param shares: Array of string ‘everyone’ or share ids. Ex: [1,2,3,4]
*/
public unshareFile(id: number, shares: string[]): Promise<string> {
const paramaters: string[] = [];
const userInfo = {
shares : `${shares.toString()}`
};
paramaters.push(JSON.stringify(userInfo));
return this.requestData('POST', `files/${id}/unshare`, paramaters);
}
/**
*
* Lists available subtitles for user’s preferred language. User must select “Default Subtitle Language” from settings page.
*
* @param id: ID of file
*
* Fields
*
* key: This is the key used for Download Subtitle.
* language: Language name in English. This may be null. We are working on improving it.
* name: Subtitle files name.
* source: Where we got this subtitle from. More details below.
*
* Sources
*
* folder: Putio has it. A srt file that has identical parent folder and name with the video.
* mkv: Extracted from MKV video file.
* opensubtitles: From opensubtitles.
*/
public getFileSubtitles(id: number): Promise<string> {
return this.requestData('GET', `files/${id}/subtitles`, []);
}
/**
*
* Sends the contents of the subtitle file. There is a powerful built in key called default.
* If you use it, putio searches for a subtitle in the following order and returns the first match:
*
* 1. A subtitle file that has identical parent folder and name with the video.
* 2. Subtitle file extracted from video if the format is MKV.
* 3. First match from opensubtitles.
*
* @param id: ID of file
* @param key: key used for download subtitle.
* @param format: Subtitle file format. Default is srt, webvtt can be requested.
*/
public downloadSubtitle(id: number, key: string, format: string = 'srt'): Promise<string> {
const paramaters: string[] = [];
const subtitleFormat = {
format : `${format}`
};
paramaters.push(JSON.stringify(subtitleFormat));
return this.requestData('GET', `files/${id}/subtitles/${key}`, paramaters);
}
/**
*
* Serves a HLS playlist for a video file.
*
* @param id: ID of file
* @param subtitleKey: Subtitle key for the file. Use “all” as key to get available subtitles for user’s preferred languages.
*/
public getHLSPlaylist(id: number, subtitleKey: string): Promise<string> {
const paramaters: string[] = [];
paramaters.push(`&subtitle_key=${subtitleKey}`);
return this.requestData('GET', `files/${id}/hls/media.m3u8`, paramaters);
}
/**
*
* Sets default video position for a video file.
*
* @param id: ID of file
* @param time: Video position in seconds.
*/
public setVideoPosition(id: number, time: number ): Promise<string> {
const paramaters: string[] = [];
const videoPosition = {
time : `${time}`
};
paramaters.push(JSON.stringify(videoPosition));
return this.requestData('POST', `files/${id}/start-from`, paramaters);
}
/**
*
* Delete video position for a video file.
*
* @param id: ID of file
*/
public deleteVideoPosition(id: number): Promise<string> {
return this.requestData('POST', `files/${id}/start-from/delete`, []);
}
}