Support URLs with path prefix (#46)
See gotify/server#127 gotify/server#122
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<MessageWithImage> items;
|
||||
private Delete delete;
|
||||
private Settings settings;
|
||||
|
||||
ListMessageAdapter(
|
||||
Context context, Picasso picasso, List<MessageWithImage> items, Delete delete) {
|
||||
Context context,
|
||||
Settings settings,
|
||||
Picasso picasso,
|
||||
List<MessageWithImage> 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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user