Как получить изображение профиля пользователя в javascript в gnome 3.28 Ubuntu 18.04 - PullRequest
0 голосов
/ 14 ноября 2018

Я работаю над расширением для gnome, в котором есть всплывающее меню с пунктами меню. Один из пунктов меню называется «Выйти». Мне удалось отобразить рядом с «Выйти» настоящее имя пользователя сэтот код:

    let username = GLib.get_real_name();
                .........
                .........
    item = new PopupMenu.PopupMenuItem(_(list[x].text) + username);

Выйти из меню menu

Теперь я хочу отобразить и изображение профиля пользователя рядом с реальным именем. Я пробовал этот код, но это не такработа:

    let usename= GLib.get_user_name();
    let user = AccountsService.UserManager.get_default().get_user(username);
    let iconpath = user.get_icon_file();
    let icon = Gio.icon_new_for_string(iconpath);
    Icon = new St.Icon(icon);
    boxicon = new St.BoxLayout();
    boxicon.add(Icon);

Кажется, что "иконка" пуста. Как я могу получить изображение профиля пользователя и отобразить его в меню.Заранее спасибо.

1 Ответ

0 голосов
/ 14 ноября 2018

В gnome-shell много JavaScript, который уже написан для легкого повторного использования. Бонус, вы автоматически получите исправления ошибок и улучшения производительности, внесенные в код (если они произойдут).

Я бы порекомендовал вам повторно использовать или хотя бы посмотреть класс Avatar в ui / userWidget.js . Мало того, что код уже написан, но он поддерживает аватар в актуальном состоянии, и любая тема оболочки GNOME, имеющая собственные стили, вероятно, также будет работать автоматически.

Вы можете использовать этот класс так:

const UserWidget = imports.ui.userWidget;

let user = AccountsService.UserManager.get_default().get_user(username);
let avatar = new UserWidget.Avatar(user);
let boxicon = new St.BoxLayout();

// Notice that UserWidget.Avatar is a container class for the actual actor
boxicon.add_child(avatar.actor);

Есть также другие классы для метки имени пользователя и родительский класс, который объединяет их оба. Помните о классах или функциях с префиксом подчеркивания, например _doStuff(), так как это обычный способ пометить вещи как «частные» или внутренние, и могут быть изменены без уведомления.

EDIT

Кроме того, если вы не используете или не ориентируетесь на последний выпуск, используйте выпадающее меню в GitLab, чтобы выбрать ветку для вашего выпуска, или просмотрите историю файла, чтобы увидеть, изменилось ли что-нибудь важное.

...