Skip to content

Aria2 watchdog实现 #8

Description

@urain39
import { ARIA2, ARIA2Event } from './lib/saw-rpc/src/index';
import { promises as fs } from 'fs';
import * as path from 'path';
import { w3cwebsocket as WebSocket } from 'websocket';
import { rpcPath, secret } from './config.json';


// @ts-ignore
global.WebSocket = WebSocket;


const UNDEFINED = void 22;
const aria2 = new ARIA2(rpcPath, secret);


// 检查当前执行状态
(async function () {
    try {
        await aria2.tellActive(['gid']);
    } catch (e) {
        console.log('Wrong rpcPath or secret!');
        process.exit(1);
    }
})();

// 绑定事件处理回调
async function onDownloadComplete(ev: ARIA2Event) {
    const status = await aria2.tellStatus(ev.gid, ['dir', 'files']);

    const dir = status.dir;
    const files = status.files;
    if (dir !== UNDEFINED && files !== UNDEFINED) {
        const titleName = ARIA2.getTitleName(files[0], dir);
        const controlFile = path.join(dir, titleName + '.aria2');

        try {
            console.log(`aria2-watchdog: removing control file of completed '${titleName}'...`);
            await fs.unlink(controlFile);
        } catch (e) {
            console.error(e);
        }
    }
}

aria2.onNotify('aria2.onBtDownloadComplete', onDownloadComplete);
aria2.onNotify('aria2.onDownloadComplete', onDownloadComplete);

aria2.onNotify('aria2.onDownloadError', async function (ev: ARIA2Event) {
    const status = await aria2.tellStatus(ev.gid, ['dir', 'files']);

    const dir = status.dir;
    const files = status.files;
    if (dir !== UNDEFINED && files !== UNDEFINED) {
        const titleName = ARIA2.getTitleName(files[0], dir);
        const filePath = path.join(dir, titleName);
        const controlFile = filePath + '.aria2';

        try {
            console.log(`aria2-watchdog: removing fault files of '${titleName}'...`);
            await fs.rm(filePath, { 'force': true, 'recursive': true });
            await fs.unlink(controlFile);
        } catch (e) {
            console.error(e);
        }
    }
});

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions