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.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.net.URL;
|
||||||
import okio.Buffer;
|
import okio.Buffer;
|
||||||
import org.threeten.bp.OffsetDateTime;
|
import org.threeten.bp.OffsetDateTime;
|
||||||
|
|
||||||
@@ -36,6 +40,22 @@ public class Utils {
|
|||||||
.toString();
|
.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) {
|
public static Target toDrawable(Resources resources, DrawableReceiver drawableReceiver) {
|
||||||
return new Target() {
|
return new Target() {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -11,12 +11,12 @@ import com.github.gotify.client.auth.HttpBasicAuth;
|
|||||||
public class ClientFactory {
|
public class ClientFactory {
|
||||||
public static com.github.gotify.client.ApiClient unauthorized(
|
public static com.github.gotify.client.ApiClient unauthorized(
|
||||||
String baseUrl, SSLSettings sslSettings) {
|
String baseUrl, SSLSettings sslSettings) {
|
||||||
return defaultClient(new String[0], baseUrl, sslSettings);
|
return defaultClient(new String[0], baseUrl + "/", sslSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ApiClient basicAuth(
|
public static ApiClient basicAuth(
|
||||||
String baseUrl, SSLSettings sslSettings, String username, String password) {
|
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");
|
HttpBasicAuth auth = (HttpBasicAuth) client.getApiAuthorizations().get("basicAuth");
|
||||||
auth.setUsername(username);
|
auth.setUsername(username);
|
||||||
auth.setPassword(password);
|
auth.setPassword(password);
|
||||||
@@ -24,7 +24,8 @@ public class ClientFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static ApiClient clientToken(String baseUrl, SSLSettings sslSettings, String token) {
|
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");
|
ApiKeyAuth tokenAuth = (ApiKeyAuth) client.getApiAuthorizations().get("clientTokenHeader");
|
||||||
tokenAuth.setApiKey(token);
|
tokenAuth.setApiKey(token);
|
||||||
return client;
|
return client;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import com.github.gotify.R;
|
import com.github.gotify.R;
|
||||||
|
import com.github.gotify.Settings;
|
||||||
import com.github.gotify.Utils;
|
import com.github.gotify.Utils;
|
||||||
import com.github.gotify.client.model.Message;
|
import com.github.gotify.client.model.Message;
|
||||||
import com.github.gotify.messages.provider.MessageWithImage;
|
import com.github.gotify.messages.provider.MessageWithImage;
|
||||||
@@ -24,11 +25,17 @@ public class ListMessageAdapter extends BaseAdapter {
|
|||||||
private Picasso picasso;
|
private Picasso picasso;
|
||||||
private List<MessageWithImage> items;
|
private List<MessageWithImage> items;
|
||||||
private Delete delete;
|
private Delete delete;
|
||||||
|
private Settings settings;
|
||||||
|
|
||||||
ListMessageAdapter(
|
ListMessageAdapter(
|
||||||
Context context, Picasso picasso, List<MessageWithImage> items, Delete delete) {
|
Context context,
|
||||||
|
Settings settings,
|
||||||
|
Picasso picasso,
|
||||||
|
List<MessageWithImage> items,
|
||||||
|
Delete delete) {
|
||||||
super();
|
super();
|
||||||
this.content = context;
|
this.content = context;
|
||||||
|
this.settings = settings;
|
||||||
this.picasso = picasso;
|
this.picasso = picasso;
|
||||||
this.items = items;
|
this.items = items;
|
||||||
this.delete = delete;
|
this.delete = delete;
|
||||||
@@ -65,7 +72,7 @@ public class ListMessageAdapter extends BaseAdapter {
|
|||||||
final MessageWithImage message = items.get(position);
|
final MessageWithImage message = items.get(position);
|
||||||
holder.message.setText(message.message.getMessage());
|
holder.message.setText(message.message.getMessage());
|
||||||
holder.title.setText(message.message.getTitle());
|
holder.title.setText(message.message.getTitle());
|
||||||
picasso.load(message.image)
|
picasso.load(Utils.resolveAbsoluteUrl(settings.url() + "/", message.image))
|
||||||
.error(R.drawable.ic_alarm)
|
.error(R.drawable.ic_alarm)
|
||||||
.placeholder(R.drawable.ic_placeholder)
|
.placeholder(R.drawable.ic_placeholder)
|
||||||
.into(holder.image);
|
.into(holder.image);
|
||||||
|
|||||||
@@ -125,7 +125,8 @@ public class MessagesActivity extends AppCompatActivity
|
|||||||
messages = new MessageFacade(client.createService(MessageApi.class), appsHolder);
|
messages = new MessageFacade(client.createService(MessageApi.class), appsHolder);
|
||||||
|
|
||||||
messagesView.setOnScrollListener(this);
|
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);
|
swipeRefreshLayout.setOnRefreshListener(this::onRefresh);
|
||||||
drawer.addDrawerListener(
|
drawer.addDrawerListener(
|
||||||
@@ -167,7 +168,7 @@ public class MessagesActivity extends AppCompatActivity
|
|||||||
item.setCheckable(true);
|
item.setCheckable(true);
|
||||||
Target t = Utils.toDrawable(getResources(), item::setIcon);
|
Target t = Utils.toDrawable(getResources(), item::setIcon);
|
||||||
targetReferences.add(t);
|
targetReferences.add(t);
|
||||||
picasso.load(app.getImage())
|
picasso.load(Utils.resolveAbsoluteUrl(settings.url() + "/", app.getImage()))
|
||||||
.error(R.drawable.ic_alarm)
|
.error(R.drawable.ic_alarm)
|
||||||
.placeholder(R.drawable.ic_placeholder)
|
.placeholder(R.drawable.ic_placeholder)
|
||||||
.resize(100, 100)
|
.resize(100, 100)
|
||||||
|
|||||||
Reference in New Issue
Block a user