From c89c8b7d6657262ea60a3211d8c6f52a099e32ac Mon Sep 17 00:00:00 2001 From: sifacaii Date: Sun, 28 Aug 2022 18:19:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96login?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/sifacai/vlcjellyfin/BaseActivity.java | 50 ++---- .../vlcjellyfin/CollectionActivity.java | 37 ++--- .../java/org/sifacai/vlcjellyfin/Config.java | 143 ++++++++++++++++++ .../sifacai/vlcjellyfin/DetailActivity.java | 12 +- .../org/sifacai/vlcjellyfin/MainActivity.java | 23 ++- .../java/org/sifacai/vlcjellyfin/Utils.java | 53 +------ 6 files changed, 184 insertions(+), 134 deletions(-) create mode 100644 app/src/main/java/org/sifacai/vlcjellyfin/Config.java diff --git a/app/src/main/java/org/sifacai/vlcjellyfin/BaseActivity.java b/app/src/main/java/org/sifacai/vlcjellyfin/BaseActivity.java index 68d26e9..b23455c 100644 --- a/app/src/main/java/org/sifacai/vlcjellyfin/BaseActivity.java +++ b/app/src/main/java/org/sifacai/vlcjellyfin/BaseActivity.java @@ -29,6 +29,8 @@ public class BaseActivity extends AppCompatActivity implements CustomAdapt { protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + Utils.config = new Config(this); + ActionBar actionBar = getSupportActionBar(); if (null != actionBar) { actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); @@ -100,6 +102,12 @@ public class BaseActivity extends AppCompatActivity implements CustomAdapt { mAA.runOnUiThread(new Runnable() { @Override public void run() { + if(null != progressDialog){ + if(progressDialog.isShowing()){ + progressDialog.dismiss(); + } + progressDialog = null; + } progressDialog = new ProgressDialog(mAA); progressDialog.setMessage(title); progressDialog.show(); @@ -160,53 +168,13 @@ public class BaseActivity extends AppCompatActivity implements CustomAdapt { }); } - /** - * 读取配置 - */ - public void getConfigFromSP() { - SharedPreferences sp = this.getSharedPreferences("Jellyfin", this.MODE_PRIVATE); - Utils.JellyfinUrl = sp.getString("url", ""); - Utils.UserName = sp.getString("username", ""); - Utils.PassWord = sp.getString("password", ""); - Utils.SortBy = sp.getString("sortby",""); - Utils.SortOrder = sp.getString("sortorder",""); - } - /** - * 保存配置 - * - * @param url - * @param username - * @param password - */ - public void saveConfigToSP(String url, String username, String password) { - SharedPreferences sp = this.getSharedPreferences("Jellyfin", this.MODE_PRIVATE); - SharedPreferences.Editor editor = sp.edit(); - editor.putString("url", url); - editor.putString("username", username); - editor.putString("password", password); - editor.commit(); - } - - /** - * 保存单项配置 - */ - public void saveConfigToSP(String key, String value) { - SharedPreferences sp = this.getSharedPreferences("Jellyfin", this.MODE_PRIVATE); - SharedPreferences.Editor editor = sp.edit(); - editor.putString(key, value); - editor.putString(key, value); - editor.commit(); - } /** * 登 出 */ private void logout() { - SharedPreferences sp = this.getSharedPreferences("Jellyfin", this.MODE_PRIVATE); - SharedPreferences.Editor editor = sp.edit(); - editor.clear(); - editor.commit(); + Utils.config.clear(); Utils.UserId = ""; Utils.AccessToken = ""; System.exit(0); diff --git a/app/src/main/java/org/sifacai/vlcjellyfin/CollectionActivity.java b/app/src/main/java/org/sifacai/vlcjellyfin/CollectionActivity.java index 641c977..6e6260b 100644 --- a/app/src/main/java/org/sifacai/vlcjellyfin/CollectionActivity.java +++ b/app/src/main/java/org/sifacai/vlcjellyfin/CollectionActivity.java @@ -107,7 +107,7 @@ public class CollectionActivity extends BaseActivity { String ItemsUrl = "/Users/" + Utils.UserId + "/Items?ParentId=" + ItemId + "&Limit=" + limit; ItemsUrl += "&Recursive=true&Fields=PrimaryImageAspectRatio,BasicSyncInfo,Seasons,Episodes&ImageTypeLimit=1"; ItemsUrl += "&EnableImageTypes=Primary,Backdrop,Banner,Thumb"; - ItemsUrl += "&SortBy="+Utils.SortBy+"%2CSortName%2CProductionYear&SortOrder=" + Utils.SortOrder; + ItemsUrl += "&SortBy="+Utils.config.getSortBy()+"%2CSortName%2CProductionYear&SortOrder=" + Utils.config.getSortOrder(); if (Type.equals("tvshows")) { ItemsUrl += "&IncludeItemTypes=Series"; } else if (Type.equals("movies")) { @@ -186,8 +186,8 @@ public class CollectionActivity extends BaseActivity { @Override public void onClick(View view) { int i = 0; - for(Utils.SortByType sbt : Utils.SortByType.values()){ - if(sbt.value.equals(Utils.SortBy)){ + for(Config.SortByType sbt : Config.SortByType.values()){ + if(sbt.value.equals(Utils.config.getSortBy())){ i = sbt.ordinal(); } } @@ -199,20 +199,20 @@ public class CollectionActivity extends BaseActivity { setSortMenuBtnText(); SortByMenu = new PopupMenu(this,sortMenuBtn); Menu menu = SortByMenu.getMenu(); - Utils.SortByType[] Ss = Utils.SortByType.values(); - for (Utils.SortByType sortby:Ss) { + Config.SortByType[] Ss = Config.SortByType.values(); + for (Config.SortByType sortby:Ss) { menu.add(0,sortby.ordinal(),sortby.ordinal(),sortby.name()); } - for (Utils.SotrOrderType sot:Utils.SotrOrderType.values()){ + for (Config.SotrOrderType sot:Config.SotrOrderType.values()){ menu.add(1,sot.ordinal() + Ss.length,sot.ordinal() + Ss.length,sot.name()); } SortByMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem menuItem) { if(menuItem.getGroupId() == 0) { - Utils.SortBy = Utils.SortByType.valueOf(menuItem.getTitle().toString()).value; + Utils.config.setSortBy(Config.SortByType.valueOf(menuItem.getTitle().toString()).value); }else{ - Utils.SortOrder = Utils.SotrOrderType.valueOf(menuItem.getTitle().toString()).value; + Utils.config.setSortOrder(Config.SotrOrderType.valueOf(menuItem.getTitle().toString()).value); } setSortMenuBtnText(); currAdapter.clearItems(); @@ -228,26 +228,9 @@ public class CollectionActivity extends BaseActivity { } private void setSortMenuBtnText(){ - String s = ""; - Log.d(TAG, "setSortMenuBtnText: 排序规则:" + Utils.SortBy + "-" + Utils.SortOrder); - for (Utils.SortByType Sb:Utils.SortByType.values()) { - if(Sb.value.equals(Utils.SortBy)){ - s += Sb.name(); - } - } + String s = Config.SortByType.findName(Utils.config.getSortBy()); s += "-"; - for (Utils.SotrOrderType Sot:Utils.SotrOrderType.values()) { - if(Sot.value.equals(Utils.SortOrder)){ - s += Sot.name(); - } - } + s += Config.SotrOrderType.findName(Utils.config.getSortOrder()); sortMenuBtn.setText(s); } - - @Override - public void finish() { - saveConfigToSP("sortby",Utils.SortBy); - saveConfigToSP("sortorder",Utils.SortOrder); - super.finish(); - } } \ No newline at end of file diff --git a/app/src/main/java/org/sifacai/vlcjellyfin/Config.java b/app/src/main/java/org/sifacai/vlcjellyfin/Config.java new file mode 100644 index 0000000..98d7f97 --- /dev/null +++ b/app/src/main/java/org/sifacai/vlcjellyfin/Config.java @@ -0,0 +1,143 @@ +package org.sifacai.vlcjellyfin; + +import android.content.Context; +import android.content.SharedPreferences; + +public class Config { + private Context context; + private String JellyfinUrl = ""; + private String UserName = ""; + private String PassWord = ""; + private String SortBy = "DateCreated"; + private String SortOrder = "Descending"; + + public Config(Context context) { + this.context = context; + getConfigFromSP(); + } + + public String getJellyfinUrl() { + return JellyfinUrl; + } + + public void setJellyfinUrl(String jellyfinUrl) { + JellyfinUrl = jellyfinUrl; + saveConfigToSP("url",jellyfinUrl); + } + + public String getUserName() { + return UserName; + } + + public void setUserName(String userName) { + UserName = userName; + saveConfigToSP("username",userName); + } + + public String getPassWord() { + return PassWord; + } + + public void setPassWord(String passWord) { + PassWord = passWord; + saveConfigToSP("password",passWord); + } + + public String getSortBy() { + return SortBy; + } + + public void setSortBy(String sortBy) { + SortBy = sortBy; + saveConfigToSP("sortby",sortBy); + } + + public String getSortOrder() { + return SortOrder; + } + + public void setSortOrder(String sortOrder) { + SortOrder = sortOrder; + saveConfigToSP("sortorder",sortOrder); + } + + /** + * 读取配置 + */ + public void getConfigFromSP() { + SharedPreferences sp = context.getSharedPreferences("Jellyfin", context.MODE_PRIVATE); + this.JellyfinUrl = sp.getString("url", ""); + this.UserName = sp.getString("username", ""); + this.PassWord = sp.getString("password", ""); + this.SortBy = sp.getString("sortby","DateCreated"); + this.SortOrder = sp.getString("sortorder","Descending"); + } + + /** + * 保存单项配置 + */ + public void saveConfigToSP(String key, String value) { + SharedPreferences sp = context.getSharedPreferences("Jellyfin", context.MODE_PRIVATE); + SharedPreferences.Editor editor = sp.edit(); + editor.putString(key, value); + editor.putString(key, value); + editor.commit(); + } + + /** + * 清除 + */ + public void clear() { + SharedPreferences sp = context.getSharedPreferences("Jellyfin", context.MODE_PRIVATE); + SharedPreferences.Editor editor = sp.edit(); + editor.clear(); + editor.commit(); + } + + public enum SortByType { + 评分("CommunityRating"), + 加入日期("DateCreated"), + 播放日期("DatePlayed"), + 家长分级("OfficialRating"), + 播放次数("PlayCount"), + 发行日期("PremiereDate"), + 播放时长("Runtime"); + + public String value; + + SortByType(String value) { + this.value = value; + } + + public static String findName(String value){ + String name = ""; + for (SortByType sbt:SortByType.values()) { + if(sbt.value.equals(value)){ + name = sbt.name(); + } + } + return name; + } + } + + public enum SotrOrderType{ + 升序("Ascending"), + 降序("Descending"); + + public String value; + + SotrOrderType(String value) { + this.value = value; + } + + public static String findName(String value){ + String name = ""; + for (SotrOrderType sot:SotrOrderType.values()) { + if(sot.value.equals(value)){ + name = sot.name(); + } + } + return name; + } + } +} diff --git a/app/src/main/java/org/sifacai/vlcjellyfin/DetailActivity.java b/app/src/main/java/org/sifacai/vlcjellyfin/DetailActivity.java index 95d6f94..4025697 100644 --- a/app/src/main/java/org/sifacai/vlcjellyfin/DetailActivity.java +++ b/app/src/main/java/org/sifacai/vlcjellyfin/DetailActivity.java @@ -75,6 +75,7 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick new Thread(new Runnable() { @Override public void run() { + showLoadingDialog("加载中……"); initData(ItemId); } }).start(); @@ -82,13 +83,6 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick } private void initData(String itemId) { - mActivity.runOnUiThread(new Runnable() { - @Override - public void run() { - showLoadingDialog(); - } - }); - String detailUrl = "/Users/" + Utils.UserId + "/Items/" + itemId; String detailStr = Utils.okhttpSend(detailUrl); @@ -219,6 +213,8 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick fillItems(AddPartStr); } }).start(); + }else { + dismissLoadingDialog(); } } @@ -280,7 +276,7 @@ public class DetailActivity extends BaseActivity implements JAdapter.OnItemClick String imgid = ImageTags.get("Primary").getAsString(); media.cover = Utils.getImgUrl(media.Id, imgid); } - media.Url = Utils.JellyfinUrl + "/videos/" + media.Id + "/stream.mp4?static=true&a"; + media.Url = Utils.config.getJellyfinUrl() + "/videos/" + media.Id + "/stream.mp4?static=true&a"; if (item.has("UserData")) { JsonObject userdata = item.get("UserData").getAsJsonObject(); media.startPositionTicks = userdata.get("PlaybackPositionTicks").getAsLong(); diff --git a/app/src/main/java/org/sifacai/vlcjellyfin/MainActivity.java b/app/src/main/java/org/sifacai/vlcjellyfin/MainActivity.java index fb7703c..5d01a04 100644 --- a/app/src/main/java/org/sifacai/vlcjellyfin/MainActivity.java +++ b/app/src/main/java/org/sifacai/vlcjellyfin/MainActivity.java @@ -42,7 +42,6 @@ public class MainActivity extends BaseActivity { mActivity = this; tvLoginOut = findViewById(R.id.tvLoginOut); tvContiner = findViewById(R.id.tvItems); - getConfigFromSP(); } @Override @@ -158,16 +157,10 @@ public class MainActivity extends BaseActivity { private void login() { boolean notL = true; - if (ValidUrl(Utils.JellyfinUrl)) { + if (ValidUrl(Utils.config.getJellyfinUrl())) { Log.d(TAG, "initView: Url有效"); - if (authenticateByName(Utils.UserName, Utils.PassWord)) { + if (authenticateByName(Utils.config.getUserName(), Utils.config.getPassWord())) { Log.d(TAG, "initView: 用户名密码有效"); - mActivity.runOnUiThread(new Runnable() { - @Override - public void run() { - //showLogoutBtn(); - } - }); notL = false; } } @@ -199,11 +192,13 @@ public class MainActivity extends BaseActivity { ll.setPadding(pd,pd,pd,pd); EditText urlInput = new EditText(ll.getContext()); urlInput.setHint("服务器地址"); - urlInput.setText(Utils.JellyfinUrl); + urlInput.setText(Utils.config.getJellyfinUrl()); EditText unInput = new EditText(ll.getContext()); unInput.setHint("用户名"); + unInput.setText(Utils.config.getUserName()); EditText pwInput = new EditText(ll.getContext()); pwInput.setHint("密码"); + pwInput.setText(Utils.config.getPassWord()); Button commitBtn = new Button(ll.getContext()); commitBtn.setText("确定"); commitBtn.setOnClickListener(new View.OnClickListener() { @@ -215,9 +210,13 @@ public class MainActivity extends BaseActivity { new Thread(new Runnable() { @Override public void run() { + showLoadingDialog("正在验证服务器链接……"); if (ValidUrl(url)) { + showLoadingDialog("正在验证用户名密码……"); + Utils.config.setJellyfinUrl(url); if (authenticateByName(un, pw)) { - saveConfigToSP(url, un, pw); + Utils.config.setUserName(un); + Utils.config.setPassWord(pw); dialog.dismiss(); initData(); //刷新首页 } else { @@ -226,6 +225,7 @@ public class MainActivity extends BaseActivity { } else { showMessage("服务器地址无效,请重新输入!"); } + dismissLoadingDialog(); } }).start(); } @@ -270,7 +270,6 @@ public class MainActivity extends BaseActivity { if (ServerId == null || ServerId.length() == 0) { return false; } else { - Utils.JellyfinUrl = url; return true; } } diff --git a/app/src/main/java/org/sifacai/vlcjellyfin/Utils.java b/app/src/main/java/org/sifacai/vlcjellyfin/Utils.java index e14c4d3..462a9e6 100644 --- a/app/src/main/java/org/sifacai/vlcjellyfin/Utils.java +++ b/app/src/main/java/org/sifacai/vlcjellyfin/Utils.java @@ -37,14 +37,10 @@ import okhttp3.RequestBody; import okhttp3.Response; public class Utils { - public static final String XEmbyAuthorization = "MediaBrowser Client=\"CatTv\", Device=\"CatTv\", DeviceId=\"TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXa\", Version=\"10.8.1\""; - public static String JellyfinUrl = ""; - public static String UserName = ""; - public static String PassWord = ""; + public static final String XEmbyAuthorization = "MediaBrowser Client=\"Vlc_J_TV\", Device=\"Vlc_J_TV\", DeviceId=\"TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXa\", Version=\"10.8.1\""; + public static Config config; public static String UserId = ""; public static String AccessToken = ""; - public static String SortBy = "DateCreated"; - public static String SortOrder = "Descending"; public static int playIndex = 0; //当前播放 public static ArrayList