Support URLs with path prefix (#46)

See gotify/server#127 gotify/server#122
This commit is contained in:
饺子w
2019-02-18 02:05:30 +08:00
committed by Jannis Mattheis
parent f74e79232b
commit 67daf8dc2f
4 changed files with 36 additions and 7 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -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);

View File

@@ -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)