From f0fbed8e8243c0c530f602338cd754ed9738cd11 Mon Sep 17 00:00:00 2001 From: sifacaii Date: Thu, 1 Sep 2022 11:05:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0jellyfin=20client?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 2 +- .../sifacai/vlcjellyfin/DetailActivity.java | 137 ++++++++++++------ .../org/sifacai/vlcjellyfin/JfClient.java | 22 +++ app/src/main/res/layout/activity_detail.xml | 55 +------ 4 files changed, 120 insertions(+), 96 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 6f107f7..a995b43 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -23,7 +23,7 @@ - + diff --git a/app/src/main/java/org/sifacai/vlcjellyfin/DetailActivity.java b/app/src/main/java/org/sifacai/vlcjellyfin/DetailActivity.java index f9fcbc8..ff76cae 100644 --- a/app/src/main/java/org/sifacai/vlcjellyfin/DetailActivity.java +++ b/app/src/main/java/org/sifacai/vlcjellyfin/DetailActivity.java @@ -25,18 +25,14 @@ import com.owen.tvrecyclerview.widget.V7LinearLayoutManager; import com.squareup.picasso.Picasso; import java.util.ArrayList; +import java.util.HashMap; public class DetailActivity extends BaseActivity implements JAdapter.OnItemClickListener { private String TAG = "详情:"; private String ItemId; private ImageView tvCover; private TextView tvTitle; - private TextView tvGenres; - private TextView tvRating; - private TextView tvVideo; - private TextView tvAudio; - private TextView tvSubtitle; - private TextView tvOverview; + private TextView tvDetails; private ImageView tvPlay; private JRecyclerView mGridView; private JRecyclerView mPeopleGridView; @@ -58,12 +54,7 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick private void init() { tvCover = findViewById(R.id.tvCover); tvTitle = findViewById(R.id.tvTitle); - tvGenres = findViewById(R.id.tvGenres); - tvRating = findViewById(R.id.tvRating); - tvVideo = findViewById(R.id.tvVideo); - tvAudio = findViewById(R.id.tvAudio); - tvSubtitle = findViewById(R.id.tvSubtitle); - tvOverview = findViewById(R.id.tvOverview); + tvDetails = findViewById(R.id.tvDetails); tvPlay = findViewById(R.id.tvPlay); mGridView = findViewById(R.id.mGridView); tvPeopleLayout = findViewById(R.id.tvPersonLayout); @@ -112,9 +103,11 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick String Overview = JfClient.strFromGson(detailObj, "Overview"); tvTitle.setText(Name); - tvGenres.setText("年份:" + ProductionYear + " 风格:" + Genres); - tvRating.setText("评分:" + CommunityRating + " 评级:" + OfficialRating); - tvOverview.setText("简介: " + Overview); + tvDetails.append(ProductionYear.equals("") ? "" : "年份:" + ProductionYear + " "); + tvDetails.append(Genres.equals("") ? "" : "风格:" + Genres + "\n"); + tvDetails.append(CommunityRating.equals("") ? "" : "评分:" + CommunityRating + " "); + tvDetails.append(OfficialRating.equals("") ? "" : "评级:" + OfficialRating + "\n"); + JsonArray MediaStreams = null; if (detailObj.has("MediaStreams")) { @@ -135,13 +128,11 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick else subtitle += JfClient.strFromGson(ms, "Codec") + ";"; } } - String finalVideo = video; - String finalAudio = audio; - String finalSubtitle = subtitle; - tvVideo.setText("视频:" + finalVideo); - tvAudio.setText("音频:" + finalAudio); - tvSubtitle.setText("字幕:" + finalSubtitle); + tvDetails.append(video.equals("") ? "" : "视频:" + video + "\n"); + tvDetails.append(audio.equals("") ? "" : "音频:" + audio + "\n"); + tvDetails.append(subtitle.equals("") ? "" : "字幕:" + subtitle + "\n"); } + tvDetails.append("简介: " + Overview ); //填充列表 String type = JfClient.strFromGson(detailObj, "Type"); @@ -156,47 +147,64 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick fillEpisodes(SeriesId, SeasonId); } else if (type.equals("Movie")) { fillMovie(detailObj); + } else if (type.equals("Person")){ + JsonElement ProductionLocations = JfClient.jeFromGson(detailObj,"ProductionLocations"); + String PremiereDate = JfClient.strFromGson(detailObj,"PremiereDate"); + tvDetails.append("出生日期:" +PremiereDate+"\n"); + tvDetails.append("出生地:" + ProductionLocations == null ? "" : ProductionLocations.toString()); + fillItemsByPerson(Id); } JsonElement People = JfClient.jeFromGson(detailObj,"People"); if(People != null){ - fillPeople(People.getAsJsonArray()); + JsonArray peoples = People.getAsJsonArray(); + if(peoples.size() > 0) { + fillPeople(People.getAsJsonArray()); + } } } private void fillMovie(JsonObject item) { - tvPlay.setVisibility(View.VISIBLE); - tvPlay.setOnFocusChangeListener(new View.OnFocusChangeListener() { - @Override - public void onFocusChange(View view, boolean b) { - if (view.hasFocus()) { - view.animate().scaleX(1.05f).scaleY(1.05f).setDuration(300).setInterpolator(new BounceInterpolator()).start(); - } else { - view.animate().scaleX(1.0f).scaleY(1.0f).setDuration(300).setInterpolator(new BounceInterpolator()).start(); - } - } - }); - tvPlay.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - JfClient.playList.clear(); - JfClient.playList.add(getMedia(item)); - JfClient.playIndex = 0; - toVlcPlayer(); - } - }); - tvPlay.requestFocus(); +// tvPlay.setVisibility(View.VISIBLE); +// tvPlay.setOnFocusChangeListener(new View.OnFocusChangeListener() { +// @Override +// public void onFocusChange(View view, boolean b) { +// if (view.hasFocus()) { +// view.animate().scaleX(1.05f).scaleY(1.05f).setDuration(300).setInterpolator(new BounceInterpolator()).start(); +// } else { +// view.animate().scaleX(1.0f).scaleY(1.0f).setDuration(300).setInterpolator(new BounceInterpolator()).start(); +// } +// } +// }); +// tvPlay.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View view) { +// JfClient.playList.clear(); +// JfClient.playList.add(getMedia(item)); +// JfClient.playIndex = 0; +// toVlcPlayer(); +// } +// }); +// tvPlay.requestFocus(); + String Name = JfClient.strFromGson(item,"Name"); + Name = "播放: " + Name; + item.remove("Name"); + item.addProperty("Name" ,Name); + + JsonArray plja = new JsonArray(); + plja.add(item); if (item.has("PartCount")) { String Id = JfClient.strFromGson(item, "Id"); JfClient.GetAddPart(Id, new JfClient.JJCallBack() { @Override public void onSuccess(JsonArray parts) { - fillItems(parts); + plja.addAll(parts); + fillItems(plja); } }, null); } else { - dismissLoadingDialog(); + fillItems(plja); } } @@ -241,6 +249,10 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick dismissLoadingDialog(); } + /** + * 填充定员表 + * @param items + */ private void fillPeople(JsonArray items) { tvPeopleLayout.setVisibility(View.VISIBLE); JAdapter jAdapter = new JAdapter(items, false); @@ -251,6 +263,37 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick mPeopleGridView.setAdapter(jAdapter); } + /** + * 填充演员作品 + * @param personid + */ + private void fillItemsByPerson(String personid) { + String Term = "&SortBy=DateCreated&SortOrder=Descending&PersonIds=" + personid; + JfClient.GetItemsByTerm(Term,new JfClient.JJCallBack(){ + @Override + public void onSuccess(JsonObject jsonObject) { + JsonArray items = jsonObject.get("Items").getAsJsonArray(); + JAdapter jAdapter = new JAdapter(items, false); + V7GridLayoutManager layoutManager = new V7GridLayoutManager(mGridView.getContext(),4); + jAdapter.setOnItemClickListener(new JAdapter.OnItemClickListener() { + @Override + public void onClick(JsonObject jo) { + //点击 + } + }); + mGridView.setVisibility(View.VISIBLE); + mGridView.setLayoutManager(layoutManager); + mGridView.setAdapter(jAdapter); + dismissLoadingDialog(); + } + },new JfClient.JJCallBack(){ + @Override + public void onError(String str) { + dismissLoadingDialog(); + } + }); + } + @Override public void onClick(JsonObject jo) { String itemId = jo.get("Id").getAsString(); @@ -281,7 +324,9 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick JfClient.playIndex = 0; toVlcPlayer(); }else if(type.equals("Actor")){ - + intent = new Intent(this, DetailActivity.class); + intent.putExtra("itemId", itemId); + startActivity(intent); } } diff --git a/app/src/main/java/org/sifacai/vlcjellyfin/JfClient.java b/app/src/main/java/org/sifacai/vlcjellyfin/JfClient.java index 70e2205..5b68802 100644 --- a/app/src/main/java/org/sifacai/vlcjellyfin/JfClient.java +++ b/app/src/main/java/org/sifacai/vlcjellyfin/JfClient.java @@ -227,6 +227,28 @@ public class JfClient { }, errcb); } + /** + * 根据条件获取条目列表 + * @param term 可以是 &Limit、&SortBy、&IncludeItemTypes、&PersonIds 等 + * @param scb + * @param errcb + */ + public static void GetItemsByTerm(String term,JJCallBack scb,JJCallBack errcb){ + String BaseUrl = config.getJellyfinUrl() + "/Users/"+UserId+"/Items?Recursive=true&StartIndex=0&CollapseBoxSetItems=false"; + BaseUrl += term; + SendGet(BaseUrl,new JJCallBack(){ + @Override + public void onSuccess(String str) { + JsonObject items = strToGson(str,JsonObject.class); + if(items == null){ + errcb.onError("内容空!"); + }else{ + scb.onSuccess(items); + } + } + },errcb); + } + /** * 获取合集条目 * diff --git a/app/src/main/res/layout/activity_detail.xml b/app/src/main/res/layout/activity_detail.xml index f6950b3..c6fcfbf 100644 --- a/app/src/main/res/layout/activity_detail.xml +++ b/app/src/main/res/layout/activity_detail.xml @@ -48,55 +48,11 @@ android:textSize="30dp" /> - - - - - - - - - - +