123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- using MediaBrowser.Controller.Entities;
- using MediaBrowser.Controller.Library;
- using MediaBrowser.Controller.Persistence;
- using MediaBrowser.Model.Querying;
- using MediaBrowser.Model.Serialization;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using SortOrder = MediaBrowser.Model.Entities.SortOrder;
- namespace MediaBrowser.ServerApplication
- {
- public partial class LibraryViewer : Form
- {
- private readonly IJsonSerializer _jsonSerializer;
- private readonly ILibraryManager _libraryManager;
- private readonly IDisplayPreferencesRepository _displayPreferencesManager;
- private readonly IItemRepository _itemRepository;
- private User _currentUser;
- public LibraryViewer(IJsonSerializer jsonSerializer, IUserManager userManager, ILibraryManager libraryManager, IDisplayPreferencesRepository displayPreferencesManager, IItemRepository itemRepo)
- {
- InitializeComponent();
- _jsonSerializer = jsonSerializer;
- _libraryManager = libraryManager;
- _displayPreferencesManager = displayPreferencesManager;
- _itemRepository = itemRepo;
- foreach (var user in userManager.Users)
- selectUser.Items.Add(user);
- selectUser.Items.Insert(0, new User { Name = "Physical" });
- selectUser.SelectedIndex = 0;
- selectUser.SelectedIndexChanged += selectUser_SelectedIndexChanged;
- treeView1.AfterSelect += treeView1_AfterSelect;
- }
- void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
- {
- if (e.Node != null)
- {
- var item = (BaseItem)e.Node.Tag;
- lblType.Text = "Type: " + item.GetType().Name;
- var json = FormatJson(_jsonSerializer.SerializeToString(item));
- if (item is IHasMediaStreams)
- {
- var mediaStreams = _itemRepository.GetMediaStreams(new MediaStreamQuery
- {
- ItemId = item.Id
- }).ToList();
- if (mediaStreams.Count > 0)
- {
- json += "\n\nMedia Streams:\n\n" + FormatJson(_jsonSerializer.SerializeToString(mediaStreams));
- }
- }
- txtJson.Text = json;
- }
- }
- protected override void OnLoad(EventArgs e)
- {
- base.OnLoad(e);
- selectUser_SelectedIndexChanged(null, null);
- }
- void selectUser_SelectedIndexChanged(object sender, EventArgs e)
- {
- _currentUser = selectUser.SelectedItem as User;
- if (_currentUser != null)
- LoadTree();
- }
- private void LoadTree()
- {
- treeView1.Nodes.Clear();
- var isPhysical = _currentUser.Name == "Physical";
- IEnumerable<BaseItem> children = isPhysical ? new[] { _libraryManager.RootFolder } : _libraryManager.RootFolder.GetChildren(_currentUser, true);
- children = OrderByName(children, _currentUser);
- foreach (Folder folder in children)
- {
- var currentFolder = folder;
- var node = new TreeNode { Tag = currentFolder };
- var subChildren = isPhysical ? currentFolder.Children : currentFolder.GetChildren(_currentUser, true);
- subChildren = OrderByName(subChildren, _currentUser);
- AddChildren(node, subChildren, _currentUser, isPhysical);
- node.Text = currentFolder.Name + " (" +
- node.Nodes.Count + ")";
- treeView1.Nodes.Add(node);
- }
- }
- /// <summary>
- /// Adds the children.
- /// </summary>
- /// <param name="parent">The parent.</param>
- /// <param name="children">The children.</param>
- /// <param name="user">The user.</param>
- private void AddChildren(TreeNode parent, IEnumerable<BaseItem> children, User user, bool isPhysical)
- {
- foreach (var item in children)
- {
- var node = new TreeNode { Tag = item };
- var subFolder = item as Folder;
- if (subFolder != null)
- {
- var subChildren = isPhysical ? subFolder.Children : subFolder.GetChildren(_currentUser, true);
- AddChildren(node, OrderBy(subChildren, user, ItemSortBy.SortName), user, isPhysical);
- node.Text = item.Name + " (" + node.Nodes.Count + ")";
- }
- else
- {
- node.Text = item.Name;
- }
- parent.Nodes.Add(node);
- }
- }
- /// <summary>
- /// Orders the name of the by.
- /// </summary>
- /// <param name="items">The items.</param>
- /// <param name="user">The user.</param>
- /// <returns>IEnumerable{BaseItem}.</returns>
- private IEnumerable<BaseItem> OrderByName(IEnumerable<BaseItem> items, User user)
- {
- return OrderBy(items, user, ItemSortBy.SortName);
- }
- /// <summary>
- /// Orders the name of the by.
- /// </summary>
- /// <param name="items">The items.</param>
- /// <param name="user">The user.</param>
- /// <returns>IEnumerable{BaseItem}.</returns>
- private IEnumerable<BaseItem> OrderBy(IEnumerable<BaseItem> items, User user, string order)
- {
- return _libraryManager.Sort(items, user, new[] { order }, SortOrder.Ascending);
- }
- /// <summary>
- /// The INDEN t_ STRING
- /// </summary>
- private const string INDENT_STRING = " ";
- /// <summary>
- /// Formats the json.
- /// </summary>
- /// <param name="str">The STR.</param>
- /// <returns>System.String.</returns>
- private static string FormatJson(string str)
- {
- var indent = 0;
- var quoted = false;
- var sb = new StringBuilder();
- for (var i = 0; i < str.Length; i++)
- {
- var ch = str[i];
- switch (ch)
- {
- case '{':
- case '[':
- sb.Append(ch);
- if (!quoted)
- {
- sb.AppendLine();
- Enumerable.Range(0, ++indent).ForEach(item => sb.Append(INDENT_STRING));
- }
- break;
- case '}':
- case ']':
- if (!quoted)
- {
- sb.AppendLine();
- Enumerable.Range(0, --indent).ForEach(item => sb.Append(INDENT_STRING));
- }
- sb.Append(ch);
- break;
- case '"':
- sb.Append(ch);
- bool escaped = false;
- var index = i;
- while (index > 0 && str[--index] == '\\')
- escaped = !escaped;
- if (!escaped)
- quoted = !quoted;
- break;
- case ',':
- sb.Append(ch);
- if (!quoted)
- {
- sb.AppendLine();
- Enumerable.Range(0, indent).ForEach(item => sb.Append(INDENT_STRING));
- }
- break;
- case ':':
- sb.Append(ch);
- if (!quoted)
- sb.Append(" ");
- break;
- default:
- sb.Append(ch);
- break;
- }
- }
- return sb.ToString();
- }
- }
- /// <summary>
- /// Class Extensions
- /// </summary>
- static class Extensions
- {
- /// <summary>
- /// Fors the each.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="ie">The ie.</param>
- /// <param name="action">The action.</param>
- public static void ForEach<T>(this IEnumerable<T> ie, Action<T> action)
- {
- foreach (var i in ie)
- {
- action(i);
- }
- }
- }
- }
|