diff --git a/app/src/main/java/com/github/gotify/Utils.java b/app/src/main/java/com/github/gotify/Utils.java index 7a5e304..739c5a1 100644 --- a/app/src/main/java/com/github/gotify/Utils.java +++ b/app/src/main/java/com/github/gotify/Utils.java @@ -18,6 +18,10 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; import okio.Buffer; import org.threeten.bp.OffsetDateTime; @@ -36,6 +40,22 @@ public class Utils { .toString(); } + public static String resolveAbsoluteUrl(String baseURL, String target) { + if (target == null) { + return null; + } + try { + URI targetUri = new URI(target); + if (targetUri.isAbsolute()) { + return target; + } + return new URL(new URL(baseURL), target).toString(); + } catch (MalformedURLException | URISyntaxException e) { + Log.e("Could not resolve absolute url", e); + return target; + } + } + public static Target toDrawable(Resources resources, DrawableReceiver drawableReceiver) { return new Target() { @Override diff --git a/app/src/main/java/com/github/gotify/api/ClientFactory.java b/app/src/main/java/com/github/gotify/api/ClientFactory.java index 021b2f8..1e10e7c 100644 --- a/app/src/main/java/com/github/gotify/api/ClientFactory.java +++ b/app/src/main/java/com/github/gotify/api/ClientFactory.java @@ -11,12 +11,12 @@ import com.github.gotify.client.auth.HttpBasicAuth; public class ClientFactory { public static com.github.gotify.client.ApiClient unauthorized( String baseUrl, SSLSettings sslSettings) { - return defaultClient(new String[0], baseUrl, sslSettings); + return defaultClient(new String[0], baseUrl + "/", sslSettings); } public static ApiClient basicAuth( String baseUrl, SSLSettings sslSettings, String username, String password) { - ApiClient client = defaultClient(new String[] {"basicAuth"}, baseUrl, sslSettings); + ApiClient client = defaultClient(new String[] {"basicAuth"}, baseUrl + "/", sslSettings); HttpBasicAuth auth = (HttpBasicAuth) client.getApiAuthorizations().get("basicAuth"); auth.setUsername(username); auth.setPassword(password); @@ -24,7 +24,8 @@ public class ClientFactory { } public static ApiClient clientToken(String baseUrl, SSLSettings sslSettings, String token) { - ApiClient client = defaultClient(new String[] {"clientTokenHeader"}, baseUrl, sslSettings); + ApiClient client = + defaultClient(new String[] {"clientTokenHeader"}, baseUrl + "/", sslSettings); ApiKeyAuth tokenAuth = (ApiKeyAuth) client.getApiAuthorizations().get("clientTokenHeader"); tokenAuth.setApiKey(token); return client; diff --git a/app/src/main/java/com/github/gotify/messages/ListMessageAdapter.java b/app/src/main/java/com/github/gotify/messages/ListMessageAdapter.java index 5d1eef3..20029d9 100644 --- a/app/src/main/java/com/github/gotify/messages/ListMessageAdapter.java +++ b/app/src/main/java/com/github/gotify/messages/ListMessageAdapter.java @@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView; import butterknife.BindView; import butterknife.ButterKnife; import com.github.gotify.R; +import com.github.gotify.Settings; import com.github.gotify.Utils; import com.github.gotify.client.model.Message; import com.github.gotify.messages.provider.MessageWithImage; @@ -24,11 +25,17 @@ public class ListMessageAdapter extends BaseAdapter { private Picasso picasso; private List items; private Delete delete; + private Settings settings; ListMessageAdapter( - Context context, Picasso picasso, List items, Delete delete) { + Context context, + Settings settings, + Picasso picasso, + List items, + Delete delete) { super(); this.content = context; + this.settings = settings; this.picasso = picasso; this.items = items; this.delete = delete; @@ -65,7 +72,7 @@ public class ListMessageAdapter extends BaseAdapter { final MessageWithImage message = items.get(position); holder.message.setText(message.message.getMessage()); holder.title.setText(message.message.getTitle()); - picasso.load(message.image) + picasso.load(Utils.resolveAbsoluteUrl(settings.url() + "/", message.image)) .error(R.drawable.ic_alarm) .placeholder(R.drawable.ic_placeholder) .into(holder.image); diff --git a/app/src/main/java/com/github/gotify/messages/MessagesActivity.java b/app/src/main/java/com/github/gotify/messages/MessagesActivity.java index 5ee8caa..a0e2f09 100644 --- a/app/src/main/java/com/github/gotify/messages/MessagesActivity.java +++ b/app/src/main/java/com/github/gotify/messages/MessagesActivity.java @@ -125,7 +125,8 @@ public class MessagesActivity extends AppCompatActivity messages = new MessageFacade(client.createService(MessageApi.class), appsHolder); messagesView.setOnScrollListener(this); - messagesView.setAdapter(new ListMessageAdapter(this, picasso, emptyList(), this::delete)); + messagesView.setAdapter( + new ListMessageAdapter(this, settings, picasso, emptyList(), this::delete)); swipeRefreshLayout.setOnRefreshListener(this::onRefresh); drawer.addDrawerListener( @@ -167,7 +168,7 @@ public class MessagesActivity extends AppCompatActivity item.setCheckable(true); Target t = Utils.toDrawable(getResources(), item::setIcon); targetReferences.add(t); - picasso.load(app.getImage()) + picasso.load(Utils.resolveAbsoluteUrl(settings.url() + "/", app.getImage())) .error(R.drawable.ic_alarm) .placeholder(R.drawable.ic_placeholder) .resize(100, 100)