Include in ServerInfo whether an avatar provider is registered If no avatar provider is registered the client doesn't need to try to retrieve any avatar images. This saves some requests to the server. When an avatar plugin is installed on a live server, avatars are only displayed after the client refreshed the page in the browser. This change also fixes a little rendering issue on the MyProfileScreen when no avatar provider is registered, as in this case the empty VerticalPanel which normally displays the avatar, adds some unwanted space on the right side of the grid with the profile data. Change-Id: I0d55cc7de4269a5354ffbaaaece50de8b8211026 Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/Documentation/rest-api-config.txt b/Documentation/rest-api-config.txt index 5a6c032..702ecaa 100644 --- a/Documentation/rest-api-config.txt +++ b/Documentation/rest-api-config.txt
@@ -1280,6 +1280,18 @@ The number of open files. |============================ +[[plugin-config-info]] +=== PluginConfigInfo +The `PluginConfigInfo` entity contains information about Gerrit +extensions by plugins. + +[options="header",cols="1,^1,5"] +|=========================== +|Field Name ||Description +|`has_avatars` |not set if `false`| +Whether an avatar provider is registered. +|=========================== + [[receive-info]] === ReceiveInfo The `ReceiveInfo` entity contains information about the configuration @@ -1322,7 +1334,9 @@ GerritInfo] entity. |`gitweb ` |optional| Information about the link:config-gerrit.html#gitweb[gitweb] -configuration as link:#git-web-info[GitwebInfo] entity. +|`plugin ` || +Information about Gerrit extensions by plugins as +link:#plugin-config-info[PluginConfigInfo] entity. |`receive` |optional| Information about the receive-pack configuration as a link:#receive-info[ReceiveInfo] entity.
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/AvatarImage.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/AvatarImage.java index 7f17f4f..4b29b49 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/AvatarImage.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/AvatarImage.java
@@ -91,6 +91,10 @@ } private void loadAvatar(AccountInfo account, int size, boolean addPopup) { + if (!Gerrit.info().plugin().hasAvatars()) { + return; + } + // TODO Kill /accounts/*/avatar URL. String u = account.email(); if (Gerrit.isSignedIn()
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/MyProfileScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/MyProfileScreen.java index 0c4ed5d..27ff4df 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/MyProfileScreen.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/MyProfileScreen.java
@@ -44,14 +44,16 @@ HorizontalPanel h = new HorizontalPanel(); add(h); - VerticalPanel v = new VerticalPanel(); - v.addStyleName(Gerrit.RESOURCES.css().avatarInfoPanel()); - h.add(v); - avatar = new AvatarImage(); - v.add(avatar); - changeAvatar = new Anchor(Util.C.changeAvatar(), "", "_blank"); - changeAvatar.setVisible(false); - v.add(changeAvatar); + if (Gerrit.info().plugin().hasAvatars()) { + VerticalPanel v = new VerticalPanel(); + v.addStyleName(Gerrit.RESOURCES.css().avatarInfoPanel()); + h.add(v); + avatar = new AvatarImage(); + v.add(avatar); + changeAvatar = new Anchor(Util.C.changeAvatar(), "", "_blank"); + changeAvatar.setVisible(false); + v.add(changeAvatar); + } if (LocaleInfo.getCurrentLocale().isRTL()) { labelIdx = 1; @@ -95,19 +97,21 @@ } void display(final Account account) { - avatar.setAccount(FormatUtil.asInfo(account), 93, false); - new RestApi("/accounts/").id("self").view("avatar.change.url") - .get(new AsyncCallback<NativeString>() { - @Override - public void onSuccess(NativeString changeUrl) { - changeAvatar.setHref(changeUrl.asString()); - changeAvatar.setVisible(true); - } + if (Gerrit.info().plugin().hasAvatars()) { + avatar.setAccount(FormatUtil.asInfo(account), 93, false); + new RestApi("/accounts/").id("self").view("avatar.change.url") + .get(new AsyncCallback<NativeString>() { + @Override + public void onSuccess(NativeString changeUrl) { + changeAvatar.setHref(changeUrl.asString()); + changeAvatar.setVisible(true); + } - @Override - public void onFailure(Throwable caught) { - } - }); + @Override + public void onFailure(Throwable caught) { + } + }); + } int row = 0; if (Gerrit.info().auth().siteHasUsernames()) {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/config/ServerInfo.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/config/ServerInfo.java index 63cf721..1820afb 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/config/ServerInfo.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/config/ServerInfo.java
@@ -23,6 +23,7 @@ public final native DownloadInfo download() /*-{ return this.download; }-*/; public final native GerritInfo gerrit() /*-{ return this.gerrit; }-*/; public final native GitwebInfo gitweb() /*-{ return this.gitweb; }-*/; + public final native PluginConfigInfo plugin() /*-{ return this.plugin; }-*/; public final native SshdInfo sshd() /*-{ return this.sshd; }-*/; public final native SuggestInfo suggest() /*-{ return this.suggest; }-*/; public final native UserConfigInfo user() /*-{ return this.user; }-*/; @@ -59,6 +60,13 @@ } } + public static class PluginConfigInfo extends JavaScriptObject { + public final native boolean hasAvatars() /*-{ return this.has_avatars || false; }-*/; + + protected PluginConfigInfo() { + } + } + public static class SshdInfo extends JavaScriptObject { protected SshdInfo() { }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/config/GetServerInfo.java b/gerrit-server/src/main/java/com/google/gerrit/server/config/GetServerInfo.java index e4a8c34..df4f97e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/config/GetServerInfo.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/config/GetServerInfo.java
@@ -22,11 +22,13 @@ import com.google.gerrit.extensions.config.CloneCommand; import com.google.gerrit.extensions.config.DownloadCommand; import com.google.gerrit.extensions.config.DownloadScheme; +import com.google.gerrit.extensions.registration.DynamicItem; import com.google.gerrit.extensions.registration.DynamicMap; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.AuthType; import com.google.gerrit.server.account.Realm; +import com.google.gerrit.server.avatar.AvatarProvider; import com.google.gerrit.server.change.ArchiveFormat; import com.google.gerrit.server.change.GetArchive; import com.google.gerrit.server.change.Submit; @@ -54,6 +56,7 @@ private final AllUsersName allUsersName; private final String anonymousCowardName; private final GitwebConfig gitwebConfig; + private final DynamicItem<AvatarProvider> avatar; @Inject public GetServerInfo( @@ -67,7 +70,8 @@ AllProjectsName allProjectsName, AllUsersName allUsersName, @AnonymousCowardName String anonymousCowardName, - GitwebConfig gitwebConfig) { + GitwebConfig gitwebConfig, + DynamicItem<AvatarProvider> avatar) { this.config = config; this.authConfig = authConfig; this.realm = realm; @@ -79,6 +83,7 @@ this.allUsersName = allUsersName; this.anonymousCowardName = anonymousCowardName; this.gitwebConfig = gitwebConfig; + this.avatar = avatar; } @Override @@ -92,6 +97,7 @@ archiveFormats); info.gerrit = getGerritInfo(config, allProjectsName, allUsersName); info.gitweb = getGitwebInfo(gitwebConfig); + info.plugin = getPluginInfo(); info.sshd = getSshdInfo(config); info.suggest = getSuggestInfo(config); info.user = getUserInfo(anonymousCowardName); @@ -244,6 +250,12 @@ return info; } + private PluginConfigInfo getPluginInfo() { + PluginConfigInfo info = new PluginConfigInfo(); + info.hasAvatars = toBoolean(avatar.get() != null); + return info; + } + private SshdInfo getSshdInfo(Config cfg) { String[] addr = cfg.getStringList("sshd", null, "listenAddress"); if (addr.length == 1 && isOff(addr[0])) { @@ -287,6 +299,7 @@ public DownloadInfo download; public GerritInfo gerrit; public GitwebInfo gitweb; + public PluginConfigInfo plugin; public SshdInfo sshd; public SuggestInfo suggest; public UserConfigInfo user; @@ -345,6 +358,10 @@ public GitwebType type; } + public static class PluginConfigInfo { + public Boolean hasAvatars; + } + public static class SshdInfo { }