main.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /** @babel */
  2. import { Disposable, CompositeDisposable } from 'atom';
  3. import VIEW_URI from './view-uri';
  4. let disposables = null;
  5. export function activate() {
  6. disposables = new CompositeDisposable();
  7. disposables.add(
  8. atom.workspace.addOpener(uri => {
  9. if (uri === VIEW_URI) {
  10. return deserializeIncompatiblePackagesComponent();
  11. }
  12. })
  13. );
  14. disposables.add(
  15. atom.commands.add('atom-workspace', {
  16. 'incompatible-packages:view': () => {
  17. atom.workspace.open(VIEW_URI);
  18. }
  19. })
  20. );
  21. }
  22. export function deactivate() {
  23. disposables.dispose();
  24. }
  25. export function consumeStatusBar(statusBar) {
  26. let incompatibleCount = 0;
  27. for (let pack of atom.packages.getLoadedPackages()) {
  28. if (!pack.isCompatible()) incompatibleCount++;
  29. }
  30. if (incompatibleCount > 0) {
  31. let icon = createIcon(incompatibleCount);
  32. let tile = statusBar.addRightTile({ item: icon, priority: 200 });
  33. icon.element.addEventListener('click', () => {
  34. atom.commands.dispatch(icon.element, 'incompatible-packages:view');
  35. });
  36. disposables.add(new Disposable(() => tile.destroy()));
  37. }
  38. }
  39. export function deserializeIncompatiblePackagesComponent() {
  40. const IncompatiblePackagesComponent = require('./incompatible-packages-component');
  41. return new IncompatiblePackagesComponent(atom.packages);
  42. }
  43. function createIcon(count) {
  44. const StatusIconComponent = require('./status-icon-component');
  45. return new StatusIconComponent({ count });
  46. }