Skip to content
This repository was archived by the owner on Nov 17, 2022. It is now read-only.

Commit 1a019fb

Browse files
committed
refactor: rewrite using dbus-next
1 parent 582c7cd commit 1a019fb

17 files changed

+78
-339
lines changed

package.json

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
"start": "ts-node src/"
2020
},
2121
"dependencies": {
22-
"dbus-native": "^0.4.0",
2322
"dbus-next": "^0.10.2",
2423
"reflect-metadata": "^0.1.13",
2524
"rxjs": "^7.5.5",

src/di/package-kit.register.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { InjectionToken } from 'tsyringe';
2+
import { container } from 'tsyringe';
3+
import { MessageBus, systemBus } from 'dbus-next';
4+
5+
export const INJECTION_TOKEN_SYSTEM_BUS: InjectionToken<string> =
6+
'node.bus.system';
7+
8+
container.register<MessageBus>(INJECTION_TOKEN_SYSTEM_BUS, {
9+
useValue: systemBus(),
10+
});

src/di/service.registerer.ts

-12
This file was deleted.

src/index.ts

+7-16
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,12 @@
1-
import { PackageKit } from './packagekit';
1+
import 'reflect-metadata';
22
import { container } from 'tsyringe';
3+
import { PackagekitProvider } from './packagekit.provider';
34
import { TransactionProvider } from './transaction.provider';
4-
import { SearchFilter } from './search-filter.enum';
55

6-
async function teste() {
7-
try {
8-
console.log('getting interface');
9-
const packageKit = await PackageKit.create();
10-
const transactionPath = await packageKit.createTransaction();
11-
const transactionProvider = container.resolve(TransactionProvider);
12-
const transaction = await transactionProvider.getTransaction(
13-
transactionPath
14-
);
15-
await transaction.cancel();
16-
} catch (e) {
17-
console.error(e);
18-
}
6+
export function getPackageKitProvider(): PackagekitProvider {
7+
return container.resolve(PackagekitProvider);
198
}
209

21-
teste().then();
10+
export function getTransactionProvider(): TransactionProvider {
11+
return container.resolve(TransactionProvider);
12+
}

src/interface.provider.ts

-47
This file was deleted.

src/interface/packagekit-dbus.interface.ts

-3
This file was deleted.

src/interface/packagekit.interface.ts

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { ClientInterface } from 'dbus-next';
2+
3+
export interface PackageKit extends ClientInterface {
4+
CreateTransaction(): Promise<string>;
5+
}

src/interface/transaction-dbus.interface.ts

-17
This file was deleted.
+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { ClientInterface } from 'dbus-next';
2+
3+
export interface Transaction extends ClientInterface {
4+
Close(): Promise<void>;
5+
}

src/packagekit.provider.ts

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { inject, injectable } from 'tsyringe';
2+
import { INJECTION_TOKEN_SYSTEM_BUS } from './di/package-kit.register';
3+
import { MessageBus } from 'dbus-next';
4+
import { PackageKit } from './interface/packagekit.interface';
5+
6+
@injectable()
7+
export class PackagekitProvider {
8+
static readonly PACKAGE_KIT_OBJECT_NAME = 'org.freedesktop.PackageKit';
9+
private static readonly PACKAGE_KIT_INTERFACE_NAME =
10+
'org.freedesktop.PackageKit';
11+
private static readonly PACKAGE_KIT_OBJECT_PATH =
12+
'/org/freedesktop/PackageKit';
13+
14+
constructor(@inject(INJECTION_TOKEN_SYSTEM_BUS) private bus: MessageBus) {}
15+
16+
getPackageKit(): Promise<PackageKit> {
17+
return this.bus
18+
.getProxyObject(
19+
PackagekitProvider.PACKAGE_KIT_OBJECT_NAME,
20+
PackagekitProvider.PACKAGE_KIT_OBJECT_PATH
21+
)
22+
.then((packageKitProxyObject) =>
23+
packageKitProxyObject.getInterface<PackageKit>(
24+
PackagekitProvider.PACKAGE_KIT_INTERFACE_NAME
25+
)
26+
);
27+
}
28+
}

src/packagekit.ts

-26
This file was deleted.

src/search-filter.enum.ts

-4
This file was deleted.

src/transaction.provider.ts

+17-28
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,26 @@
11
import { inject, injectable } from 'tsyringe';
2-
import { InterfaceProvider } from './interface.provider';
3-
import { Transaction } from './transaction';
2+
import { INJECTION_TOKEN_SYSTEM_BUS } from './di/package-kit.register';
3+
import { MessageBus } from 'dbus-next';
4+
import { Transaction } from './interface/transaction.interface';
5+
import { PackagekitProvider } from './packagekit.provider';
46

57
@injectable()
68
export class TransactionProvider {
7-
private transactionCache: any = {};
9+
private static readonly TRANSACTION_INTERFACE_NAME =
10+
'org.freedesktop.PackageKit.Transaction';
811

9-
constructor(private interfaceProvider: InterfaceProvider) {}
12+
constructor(@inject(INJECTION_TOKEN_SYSTEM_BUS) private bus: MessageBus) {}
1013

1114
getTransaction(transactionPath: string): Promise<Transaction> {
12-
if (this.transactionCache[transactionPath]) {
13-
return Promise.resolve(this.transactionCache[transactionPath]);
14-
}
15-
16-
return this.interfaceProvider
17-
.getTransactionInterface(transactionPath)
18-
.then((transactionDbus) => {
19-
const transaction = new Transaction(
20-
transactionDbus,
21-
transactionPath
22-
);
23-
this.handleNewCreatedTransactions(transactionPath, transaction);
24-
return transaction;
25-
});
26-
}
27-
28-
private handleNewCreatedTransactions(
29-
transactionPath: string,
30-
transaction: Transaction
31-
): void {
32-
this.transactionCache[transactionPath] = transaction;
33-
transaction.onDestroy.subscribe((transaction) => {
34-
this.transactionCache[transaction.path] = null;
35-
});
15+
return this.bus
16+
.getProxyObject(
17+
PackagekitProvider.PACKAGE_KIT_OBJECT_NAME,
18+
transactionPath
19+
)
20+
.then((transactionProxyObject) =>
21+
transactionProxyObject.getInterface<Transaction>(
22+
TransactionProvider.TRANSACTION_INTERFACE_NAME
23+
)
24+
);
3625
}
3726
}

src/transaction.ts

-88
This file was deleted.

src/types/bus.ts

-5
This file was deleted.

src/types/service.ts

-7
This file was deleted.

0 commit comments

Comments
 (0)