<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>thornbill.dev</title>
  <subtitle>The ramblings of a developer and Linux enthusiast.</subtitle>
  <link href="https://thornbill.dev/feed.xml" rel="self"/>
  <link href="https://thornbill.dev/"/>
  <updated>2024-01-16T00:00:00Z</updated>
  <id>https://thornbill.dev/</id>
  <author>
    <name>Bill Thornton</name>
    <email>bill@thornbill.dev</email>
  </author>
  
  <entry>
    <title>Favorite Things of 2023</title>
    <link href="https://thornbill.dev/posts/favorite-things-of-2023/"/>
    <updated>2024-01-16T00:00:00Z</updated>
    <id>https://thornbill.dev/posts/favorite-things-of-2023/</id>
    <content type="html">&lt;p&gt;I started making lists of my favorite (new to me) things for the year 2020, inspired by the series from &lt;a href=&quot;https://www.tested.com/&quot;&gt;Tested&lt;/a&gt;.
I have always had the intention of publishing these lists to this blog, but I was uncertain if anyone would find them interesting.
If nothing else, publishing these here will be easier for me to reference than being locked away inside various note-taking apps.&lt;/p&gt;
&lt;h2&gt;Hardware&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.anker.com/products/a7852&quot;&gt;Vertical mouse&lt;/a&gt; — I have dealt with some wrist pain for some time that tends to flare up after long sessions of computer usage or driving. This strange-looking mouse seems to have alleviated a lot of that discomfort for me.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Development&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://tanstack.com/query/latest&quot;&gt;TanStack (React) Query&lt;/a&gt; — This library for server state management makes a lot of complex problems (caching, refreshing, and de-duping API requests) really simple.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.pmnd.rs/zustand&quot;&gt;Zustand&lt;/a&gt; — This library is a refreshing take on client-side state management. It is really everything that I wanted from mobx, with official support for features like state persistence.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Technology&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://joinmastodon.org/&quot;&gt;Mastodon&lt;/a&gt; | &lt;a href=&quot;https://github.com/Dimillian/IceCubesApp&quot;&gt;IceCubesApp&lt;/a&gt; (app) — I have never been a very active user of Twitter, but the anti-features that have been rolled out in the past 1-2 years have led me to completely stop using the service this year. Mastodon was not entirely new to me. (I had an account several years ago on a now-defunct server.) However, this year I setup a new account (thanks to the folks at &lt;a href=&quot;https://fosstodon.org/&quot;&gt;Fosstodon&lt;/a&gt; for hosting their public instance!) and started using the excellent Ice Cubes app as a client on iOS. There may not be as much content available as there was on Twitter, but I really don&#39;t care as I find the quality of content much higher (at least for my general interests in open-source software and self-hosting).&lt;/li&gt;
&lt;li&gt;RSS | &lt;a href=&quot;https://www.freshrss.org/&quot;&gt;FreshRSS&lt;/a&gt; (server) | &lt;a href=&quot;https://netnewswire.com/&quot;&gt;NetNewsWire&lt;/a&gt; (app) — Another service that effectively died for me this year was Reddit. Their open hostility toward users, moderators, and third-party developers prompted me to stop using the service. This left me looking for a replacement for following current events, and I found myself returning to using RSS for the first time in several years. I set up FreshRSS to use as an RSS aggregator and web reader. The experience is much nicer than the aggregator I used years ago. Coupled with NetNewsWire on iOS, it has &lt;em&gt;mostly&lt;/em&gt; replaced the use case I had for Reddit, but entirely using open-source software and open web standards!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.inaturalist.org/pages/seek_app&quot;&gt;Seek&lt;/a&gt; (app) — This is probably a bit of an outlier compared to the other apps on this list. Seek is an augmented reality-type app that attempts to identify animal and plant life. I have found it very useful while on hikes and outings with Scouts or just while in my yard.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Entertainment&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.themoviedb.org/tv/222023-jury-duty&quot;&gt;Jury Duty&lt;/a&gt; — This is just a fun situational comedy show with a different take on a &amp;quot;reality&amp;quot; style show.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.themoviedb.org/tv/71912-the-witcher&quot;&gt;The Witcher&lt;/a&gt; — I&#39;m a bit late to this one and entirely unfamiliar with the related books and games, but I still really enjoyed this sci-fi/fantasy series. Although I am somewhat concerned about the next season&#39;s transition to a new actor playing the main role.&lt;/li&gt;
&lt;li&gt;Ready Player One (book) — Definitely not a new book, but it was a really fun read. I had previously watched the movie, and while they are substantially different, I think the movie did a decent job of capturing the spirit of the book.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wargroove.com/&quot;&gt;Wargroove&lt;/a&gt; — My son randomly picked up this game on the Xbox, and it immediately became one of my favorites. The game play reminds me a lot of the Advance Wars games for the Game Boy Advance, and the developer even lists this as a source of inspiration for them. They released a sequel (Wargroove 2) this year also, but I have not picked it up yet.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Miscellaneous&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Record player — I think that owning physical media is really important in the age of everything being digital and &lt;a href=&quot;https://pluralistic.net/2023/12/08/playstationed/&quot;&gt;ownership rights generally disappearing&lt;/a&gt;. I was given a vintage record player in 2022, but I didn&#39;t really have speakers for it until the end of the year. Now I have it all setup in my office and have a few records from my favorite artists to switch out during my work day.&lt;/li&gt;
&lt;li&gt;Hot Wheels Batmobiles — These are just desk toys for me to fidget with during meetings, because who doesn&#39;t like the Batmobile??? (My personal favorite is the Batmobile from Batman the Animated Series.)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://funko.com/&quot;&gt;Funko Pop&lt;/a&gt; — Yes, they can be rather silly-looking, but they are affordable and cover a huge range of different fandoms. I think they are fun.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://brickset.com/sets/76200-1/Bro-Thor-s-New-Asgard&quot;&gt;Bro Thor&#39;s New Asgard&lt;/a&gt; (LEGO set) — This is a small set that packs in a &lt;strong&gt;ton&lt;/strong&gt; of detail, and &amp;quot;Bro Thor&amp;quot; is one of the funniest characters in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Marvel_Cinematic_Universe&quot;&gt;Marvel Cinematic Universe&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
</content>
  </entry>
  
  <entry>
    <title>Work In Progress — March 2022</title>
    <link href="https://thornbill.dev/posts/wip-march-2022/"/>
    <updated>2022-04-12T00:00:00Z</updated>
    <id>https://thornbill.dev/posts/wip-march-2022/</id>
    <content type="html">&lt;p&gt;It has been a little while since my last update… in addition to the usual holiday craziness,
I was dealing with some sickness at the end 2021 that seriously reduced my open-source activity.
Then at the end of January I started a position with a new employer.
It has taken me awhile to get back into the full swing of things,
but I believe I am getting there now.&lt;/p&gt;
&lt;p&gt;Here are some of the open-source contributions I made in the month of March.&lt;/p&gt;
&lt;p&gt;This month I have reviewed a total of 74 PRs in 10 repositories.&lt;/p&gt;
&lt;h2&gt;Jellyfin&lt;/h2&gt;
&lt;p&gt;There have been some major new releases for Jellyfin projects in March!&lt;/p&gt;
&lt;p&gt;Android TV v0.13 was released this month.
A huge shout out to &lt;a href=&quot;https://github.com/nielsvanvelzen&quot;&gt;Niels&lt;/a&gt;, &lt;a href=&quot;https://github.com/mueslimak3r&quot;&gt;Cameron&lt;/a&gt;, and all the other contributors for this release.
(I really only fixed one minor bug for this release.)
You can read the &lt;a href=&quot;https://jellyfin.org/posts/android-tv-13/&quot;&gt;release post&lt;/a&gt; for additional information about the new features and improvements.&lt;/p&gt;
&lt;p&gt;The long awaited Beta 1 release for Jellyfin 10.8.0 is now available.
As usual, make sure you have proper backups available before trying any pre-release builds.
Details can be found in the &lt;a href=&quot;https://old.reddit.com/r/jellyfin/comments/tpqrfm/the_first_beta_for_1080_is_up_were_getting_there/&quot;&gt;release announcement&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;jellyfin-web&lt;/h3&gt;
&lt;p&gt;The majority of my focus has been towards jellyfin-web recently.
A lot of this has been geared towards fixing minor issues in 10.8 in hopes of making it our most polished release to date.
A release branch for 10.8 was created as part of the release process for the first beta.
This means that work on 10.9 has already started on the master branch.
I have started working on some general code cleanup and minor refactoring as part of 10.9.
There is still a long way to go, but my hope is that cleaner code will foster new contributions in the future.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3538&quot;&gt;jellyfin-web#3538&lt;/a&gt;:
Move screensavermanager to scripts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3537&quot;&gt;jellyfin-web#3537&lt;/a&gt;:
Update libraries comments that reference Vue migration&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3536&quot;&gt;jellyfin-web#3536&lt;/a&gt;:
Remove setTitle function in app router&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3534&quot;&gt;jellyfin-web#3534&lt;/a&gt;:
Cleanup duplication in webpack dev config&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3531&quot;&gt;jellyfin-web#3531&lt;/a&gt;:
Remove broken method of registering routes for plugins&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3527&quot;&gt;jellyfin-web#3527&lt;/a&gt;:
Fix rewatching next up status&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3498&quot;&gt;jellyfin-web#3498&lt;/a&gt;:
Restore missing MessageUnauthorizedUser error message&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3495&quot;&gt;jellyfin-web#3495&lt;/a&gt;:
Fix any type warning&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3493&quot;&gt;jellyfin-web#3493&lt;/a&gt;:
Add default-case-last rule and fix issues&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3489&quot;&gt;jellyfin-web#3489&lt;/a&gt;:
Add headings to display settings screen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3480&quot;&gt;jellyfin-web#3480&lt;/a&gt;:
Fix more accessibility issues&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3478&quot;&gt;jellyfin-web#3478&lt;/a&gt;:
Fix click on item details poster playing wrong item&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3473&quot;&gt;jellyfin-web#3473&lt;/a&gt;:
Move rewatching in next up to display option and remove home section&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;jellyfin-expo&lt;/h3&gt;
&lt;p&gt;I made some updates to the jellyfin-expo project to support Jellyfin 10.8, fix some minor issues and warnings,
improve test coverage, and make some tooling updates.
A new app release will happen sometime before Jellyfin 10.8 is released to ensure compatibility.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/356&quot;&gt;jellyfin-expo#356&lt;/a&gt;:
Add basic render tests for screen components&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/355&quot;&gt;jellyfin-expo#355&lt;/a&gt;:
Update npm cache in GH actions&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/354&quot;&gt;jellyfin-expo#354&lt;/a&gt;:
Add tooling support for typescript&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/353&quot;&gt;jellyfin-expo#353&lt;/a&gt;:
Refactor fetch with timeout to separate utility&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/352&quot;&gt;jellyfin-expo#352&lt;/a&gt;:
Remove support for server versions &amp;lt;10.3&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/350&quot;&gt;jellyfin-expo#350&lt;/a&gt;:
Use uuids for internal server ids&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/349&quot;&gt;jellyfin-expo#349&lt;/a&gt;:
Add eslint rules for sonarqube issues&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/348&quot;&gt;jellyfin-expo#348&lt;/a&gt;:
Fix react-native version&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/347&quot;&gt;jellyfin-expo#347&lt;/a&gt;:
Fix native-stack warning&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/345&quot;&gt;jellyfin-expo#345&lt;/a&gt;:
Remove exitmenu as a supported feature&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;jellyfin-sdk-typescript&lt;/h3&gt;
&lt;p&gt;Work on the TypeScript SDK is still ongoing.
I thought I was more or less finalized with the API of the SDK,
but the approach I had taken did not allow the SDK to be tree-shaken properly.
This was a pretty big issue due to the size of the generated client.
The new API can be seen in &lt;a href=&quot;https://github.com/thornbill/jellyfin-sdk-typescript/pull/149&quot;&gt;jellyfin-sdk-typescript#149&lt;/a&gt;
which is still in progress since I need to add some documentation for upgrading.&lt;/p&gt;
&lt;p&gt;My plan is to work towards moving the SDK to the Jellyfin organization after the next release,
since this will (hopefully) be the last major change needed for the API.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(In Progress) &lt;a href=&quot;https://github.com/thornbill/jellyfin-sdk-typescript/pull/149&quot;&gt;jellyfin-sdk-typescript#149&lt;/a&gt;:
Fix tree-shaking of the SDK&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/thornbill/jellyfin-sdk-typescript/pull/148&quot;&gt;jellyfin-sdk-typescript#148&lt;/a&gt;:
Remove unnecessary exports&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/thornbill/jellyfin-sdk-typescript/pull/147&quot;&gt;jellyfin-sdk-typescript#147&lt;/a&gt;:
Move output directory to lib&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;jellyfin&lt;/h3&gt;
&lt;p&gt;I did manage to contribute a few small updates to the Jellyfin server codebase this month despite my lack of experience with C#.
I made some adjustments to the behavior of the new &amp;quot;rewatching&amp;quot; feature in the next up home section
(although it is still buggy in some cases).
I also made some updates to how studio images are provided and where they are sourced from.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin/pull/7423&quot;&gt;jellyfin#7423&lt;/a&gt;:
Remove unused poster support from StudiosImageProvider&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin/pull/7396&quot;&gt;jellyfin#7396&lt;/a&gt;:
Update artwork repository urls&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin/pull/7383&quot;&gt;jellyfin#7383&lt;/a&gt;:
Include played and unplayed results in the same next up request&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;jellyfin-androidtv&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/1560&quot;&gt;jellyfin-androidtv#1560&lt;/a&gt;:
Fix crash getting badge image with null base item&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;If you are interested in supporting my work, you can &lt;a href=&quot;https://github.com/sponsors/thornbill&quot;&gt;sponsor me on GitHub&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Work In Progress — October 2021</title>
    <link href="https://thornbill.dev/posts/wip-october-2021/"/>
    <updated>2021-11-16T00:00:00Z</updated>
    <id>https://thornbill.dev/posts/wip-october-2021/</id>
    <content type="html">&lt;p&gt;Here are some of the open-source projects I have been working on in the month of October.&lt;/p&gt;
&lt;p&gt;Eventually this has to stop, but I did set another personal record for the number of pull requests I reviewed in a month.
I reviewed a total of &lt;strong&gt;122 pull requests&lt;/strong&gt; across 8 repositories! 🚀&lt;/p&gt;
&lt;h2&gt;mobx-sync-lite&lt;/h2&gt;
&lt;p&gt;I started a new project this month called &lt;code&gt;mobx-sync-lite&lt;/code&gt;!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mobx.js.org/&quot;&gt;MobX&lt;/a&gt; is a state management library for JavaScript/TypeScript projects.
&lt;code&gt;mobx-sync-lite&lt;/code&gt; is a hard-fork of the &lt;code&gt;mobx-sync&lt;/code&gt; library that is used to sync MobX state to a storage backend.
I started using &lt;code&gt;mobx-sync&lt;/code&gt; in &lt;code&gt;jellyfin-expo&lt;/code&gt; and I really like the simple API and feature set that it provides.
Unfortunately, the original author had &lt;a href=&quot;https://github.com/acrazing/mobx-sync/issues/43&quot;&gt;no plans to continue support&lt;/a&gt; due to some significant changes made in the latest version of MobX.
This fork aims to continue development and add support for new versions of MobX (eventually).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/thornbill/mobx-sync-lite/pull/1&quot;&gt;mobx-sync-lite#1&lt;/a&gt;: Fix the example project&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/thornbill/mobx-sync-lite/pull/3&quot;&gt;mobx-sync-lite#3&lt;/a&gt;: Add dependabot and github actions&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/thornbill/mobx-sync-lite/pull/15&quot;&gt;mobx-sync-lite#15&lt;/a&gt;: Ignore major version updates for mobx&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/thornbill/mobx-sync-lite/pull/16&quot;&gt;mobx-sync-lite#16&lt;/a&gt;: Add rollup build check&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/thornbill/mobx-sync-lite/pull/17&quot;&gt;mobx-sync-lite#17&lt;/a&gt;: Add badges and compatibility table to README&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Jellyfin&lt;/h2&gt;
&lt;p&gt;The first alpha release of Jellyfin 10.8 &lt;a href=&quot;https://old.reddit.com/r/jellyfin/comments/qk2ekf/the_first_alpha_for_1080_is_up_please_read_and/&quot;&gt;has been released&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Most of my Jellyfin time has been working on updating dependencies and making some quality of life changes for the Jellyfin iOS app (jellyfin-expo).
I also fixed a few small bugs in jellyfin-web for 10.8.&lt;/p&gt;
&lt;h3&gt;jellyfin-expo&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/297&quot;&gt;jellyfin-expo#297&lt;/a&gt;: Add lint rules&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/298&quot;&gt;jellyfin-expo#298&lt;/a&gt;: Fix import order warnings&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/299&quot;&gt;jellyfin-expo#299&lt;/a&gt;: Fix eslint issues on save in vscode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/300&quot;&gt;jellyfin-expo#300&lt;/a&gt;: Update codecov config to be less strict on coverage changes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/301&quot;&gt;jellyfin-expo#301&lt;/a&gt;: Update to Expo 42&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/303&quot;&gt;jellyfin-expo#303&lt;/a&gt;: Remove feature request link&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/304&quot;&gt;jellyfin-expo#304&lt;/a&gt;: Update icons&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/305&quot;&gt;jellyfin-expo#305&lt;/a&gt;: Update dependencies&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/306&quot;&gt;jellyfin-expo#306&lt;/a&gt;: Update react-navigation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/307&quot;&gt;jellyfin-expo#307&lt;/a&gt;: Add beta badge&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/308&quot;&gt;jellyfin-expo#308&lt;/a&gt;: No scroll indicators&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/311&quot;&gt;jellyfin-expo#311&lt;/a&gt;: Update AsyncStorage&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/312&quot;&gt;jellyfin-expo#312&lt;/a&gt;: Remove deprecated device id&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/315&quot;&gt;jellyfin-expo#315&lt;/a&gt;: Remove duplicate eslint override&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/316&quot;&gt;jellyfin-expo#316&lt;/a&gt;: Use mobx-react-lite&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo/pull/317&quot;&gt;jellyfin-expo#317&lt;/a&gt;: Use mobx-sync-lite&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;jellyfin-web&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;(In Review) &lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3017&quot;&gt;jellyfin-web#3017&lt;/a&gt;: Fix header centering on large mobile devices&lt;/li&gt;
&lt;li&gt;(In Review) &lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3018&quot;&gt;jellyfin-web#3018&lt;/a&gt;: Fix audio player overlapping on small screens&lt;/li&gt;
&lt;li&gt;(In Review) &lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3019&quot;&gt;jellyfin-web#3019&lt;/a&gt;: Enable multiserver in development environments&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;jellyfin-sdk-typescript&lt;/h2&gt;
&lt;p&gt;As promised last month, I did write a &lt;a href=&quot;https://thornbill.dev/posts/introducing-jellyfin-sdk-ts/&quot;&gt;dedicated post&lt;/a&gt; about the reasoning behind and current state of the TypeScript SDK for Jellyfin.&lt;/p&gt;
&lt;p&gt;Some new functionality for finding the best potential server address and getting image URLs was added to the SDK.
There were also some changes made to how URLs were being parsed internally.
The SDK should be in good state for anyone to start using it and begin reporting any issues or missing features!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/thornbill/jellyfin-sdk-typescript/pull/26&quot;&gt;jellyfin-sdk-typescript#26&lt;/a&gt;: Add server recommendations&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/thornbill/jellyfin-sdk-typescript/pull/42&quot;&gt;jellyfin-sdk-typescript#42&lt;/a&gt;: Remove usage of parse-url&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/thornbill/jellyfin-sdk-typescript/pull/43&quot;&gt;jellyfin-sdk-typescript#43&lt;/a&gt;: Add method for getting an item image url&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;If you are interested in supporting my work, you can &lt;a href=&quot;https://github.com/sponsors/thornbill&quot;&gt;sponsor me on GitHub&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>A New TypeScript SDK for Jellyfin</title>
    <link href="https://thornbill.dev/posts/introducing-jellyfin-sdk-ts/"/>
    <updated>2021-10-13T00:00:00Z</updated>
    <id>https://thornbill.dev/posts/introducing-jellyfin-sdk-ts/</id>
    <content type="html">&lt;p&gt;I recently published a new project that I have been working on, a &lt;a href=&quot;https://github.com/thornbill/jellyfin-sdk-typescript&quot;&gt;TypeScript SDK for Jellyfin&lt;/a&gt;.
This project is &lt;strong&gt;not&lt;/strong&gt; (currently) an official Jellyfin project.
I wanted the project to have a solid set of basic functionality before proposing it to be moved into the organization.
This allows me some freedom in making larger changes as I deem necessary while the project is still in early development.&lt;/p&gt;
&lt;p&gt;The goal of the SDK is to provide a generated API client with some additional helpers and utility functions for &lt;strong&gt;all&lt;/strong&gt; TypeScript and JavaScript environments (browsers, node.js, React Native, etc.).
It is &lt;strong&gt;very&lt;/strong&gt; heavily inspired by the excellent work &lt;a href=&quot;https://github.com/nielsvanvelzen&quot;&gt;@Niels&lt;/a&gt; has done on the &lt;a href=&quot;https://github.com/jellyfin/jellyfin-sdk-kotlin&quot;&gt;Kotlin SDK&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Why another SDK / API client?&lt;/h2&gt;
&lt;p&gt;I was motivated to start working on a new TypeScript SDK, because in my opinion, the current API clients had some pretty fundamental flaws.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/jellyfin/jellyfin-apiclient-javascript&quot;&gt;Jellyfin API Client for JavaScript&lt;/a&gt; began as a fork of an Emby project that is used throughout jellyfin-web.
The project relies heavily on browser APIs which makes it poorly suited for a modern JavaScript ecosystem where JavaScript is run in environments such as servers and mobile applications.
It also includes utilities that seem completely unrelated to interacting with a Jellyfin server such as an event bus implementation and a data store.
There is no way for changes to the Jellyfin API to be automatically added to this API client.
Any change in the API must be made manually which is tedious and error prone.
The project is also very poorly organized.
It consists of thousands of lines of JavaScript but is only divided into &lt;strong&gt;six&lt;/strong&gt; files.
Finally, very little documentation is available to help other projects make use of this API client.&lt;/p&gt;
&lt;p&gt;Next is the &lt;a href=&quot;https://github.com/jellyfin/jellyfin-client-axios&quot;&gt;Jellyfin API Client for Axios&lt;/a&gt;.
This API client was just recently created by &lt;a href=&quot;https://github.com/ferferga&quot;&gt;@ferferga&lt;/a&gt; and is a massive improvement over the older JavaScript API client.
The project is automatically generated from the Jellyfin OpenAPI specification.
This means that any API changes will be included in the client without requiring any manual changes.
This is great, but... it &lt;em&gt;only&lt;/em&gt; provides the generated client.
That means that any application using the client needs to write a lot of boilerplate and utility functions for common functionality.&lt;/p&gt;
&lt;p&gt;I thought the best option would be to use some of what we learned from the Jellyfin API Client for Axios and make it more like the Kotlin SDK.
The core could be generated from the OpenAPI specification but with all the boilerplate and some common utilities included.&lt;/p&gt;
&lt;h2&gt;What is the current state of the project?&lt;/h2&gt;
&lt;p&gt;The new TypeScript SDK is at a point where it should be usable and fairly stable.
It can be installed from &lt;a href=&quot;https://www.npmjs.com/package/@thornbill/jellyfin-sdk&quot;&gt;npm&lt;/a&gt; today!
A basic demo of how to use the SDK can be found in this &lt;a href=&quot;https://codepen.io/thornbill/full/mdwjVEo&quot;&gt;CodePen&lt;/a&gt;.
There is also &lt;a href=&quot;https://github.com/thornbill/jellyfin-sdk-typescript/blob/095b469cecf8592e9ae566ae62fd16ad8b5c51ad/README.md#usage&quot;&gt;usage documentation&lt;/a&gt; in the README and the &lt;a href=&quot;https://github.com/thornbill/jellyfin-sdk-typescript/blob/15329b3eb97040dc60481cceb453462189865683/src/__tests__/integration.test.ts&quot;&gt;integration tests&lt;/a&gt; can be used as a reference.
TypeDoc documentation is available in the &lt;a href=&quot;https://github.com/thornbill/jellyfin-sdk-typescript/blob/386ca8ffbf452bb42134aedbacc8c8370365713f/docs/modules/index.md&quot;&gt;repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The SDK currently includes utilities for authentication and server discovery and validation.
Also included is initial support for device playback profile generation added by &lt;a href=&quot;https://github.com/ThibaultNocchi&quot;&gt;@ThibaultNocchi&lt;/a&gt;.
Generating a complete profile is still a long ways off, but it will be great to handle device profiles in a common place as they are notoriously difficult to get right.
I am currently working on a utility to generate item image URLs, so that should be available in the next release.&lt;/p&gt;
&lt;p&gt;If you are working on a TypeScript or JavaScript project that integrates with Jellyfin, I would encourage you to give my new SDK a try.
Of course if you think the SDK is missing some utility or find a bug, feel free to &lt;a href=&quot;https://github.com/thornbill/jellyfin-sdk-typescript/issues&quot;&gt;open an issue&lt;/a&gt;.
Hopefully this will make it much easier for anyone who wants to make a project connect to Jellyfin!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;If you are interested in supporting my work, you can &lt;a href=&quot;https://github.com/sponsors/thornbill&quot;&gt;sponsor me on GitHub&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Work In Progress — September 2021</title>
    <link href="https://thornbill.dev/posts/wip-september-2021/"/>
    <updated>2021-10-05T00:00:00Z</updated>
    <id>https://thornbill.dev/posts/wip-september-2021/</id>
    <content type="html">&lt;p&gt;Here are some of the open-source projects I have been working on in the month of September.&lt;/p&gt;
&lt;h2&gt;Jellyfin&lt;/h2&gt;
&lt;p&gt;The biggest update for Jellyfin is that the 0.12 release of the Android TV app is finally live!
This was a massive effort taking over a year since the 0.11 release.
More information can be found on the &lt;a href=&quot;https://jellyfin.org/posts/android-tv-12/&quot;&gt;Jellyfin blog&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A quick note to any Fire TV users, at the time of writing the app is still pending approval from Amazon,
but your devices should automatically update once it is approved.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin/releases/tag/v10.7.7&quot;&gt;Jellyfin 10.7.7&lt;/a&gt; was also released in September.
The release consisted of a couple minor bugfixes and a fix for an issue where user settings could get in an invalid state which could prevent clients from loading.&lt;/p&gt;
&lt;p&gt;I once again set a new personal record for the number of pull requests I reviewed in a month.
I reviewed a total of &lt;strong&gt;119 pull requests&lt;/strong&gt; across 11 repositories! 🚀&lt;/p&gt;
&lt;h3&gt;jellyfin-web&lt;/h3&gt;
&lt;p&gt;Most of my development time was spent trying to get jellyfin-web ready for a beta release of Jellyfin 10.8.
The biggest change needed was to fix the direct play logic to match some server-side changes.
Most pull requests were for minor improvements to make the user experience more polished.
One nice feature for iOS 15 users is the addition of theme color support in Safari.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2912&quot;&gt;jellyfin-web#2912&lt;/a&gt;: Disable warnings in webpack dev server overlay&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2913&quot;&gt;jellyfin-web#2913&lt;/a&gt;: Reorder item details sections&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2939&quot;&gt;jellyfin-web#2939&lt;/a&gt;: Log warning instead of error when dictionary has not loaded&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2940&quot;&gt;jellyfin-web#2940&lt;/a&gt;: Fix direct play logic when direct stream is disabled&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2943&quot;&gt;jellyfin-web#2943&lt;/a&gt;: Fix play all and shuffle buttons&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2945&quot;&gt;jellyfin-web#2945&lt;/a&gt;: Fix media indicator color&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2946&quot;&gt;jellyfin-web#2946&lt;/a&gt;: Disable sync correction by default on mobile&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2948&quot;&gt;jellyfin-web#2948&lt;/a&gt;: Restore missing placeholder error message&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3001&quot;&gt;jellyfin-web#3001&lt;/a&gt;: Update apiclient&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3002&quot;&gt;jellyfin-web#3002&lt;/a&gt;: Add theme color support&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3016&quot;&gt;jellyfin-web#3016&lt;/a&gt;: Remove unused sass mixins&lt;/li&gt;
&lt;li&gt;(In Review) &lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3017&quot;&gt;jellyfin-web#3017&lt;/a&gt;: Fix header centering on large mobile devices&lt;/li&gt;
&lt;li&gt;(In Review) &lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3018&quot;&gt;jellyfin-web#3018&lt;/a&gt;: Fix audio player overlapping on small screens&lt;/li&gt;
&lt;li&gt;(In Review) &lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3019&quot;&gt;jellyfin-web#3019&lt;/a&gt;: Enable multiserver in development environments&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/3021&quot;&gt;jellyfin-web#3021&lt;/a&gt;: Move the selected player name next to cast icon&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;jellyfin-apiclient-javascript&lt;/h3&gt;
&lt;p&gt;The JavaScript API client needed a new version published to include some required changes for Jellyfin 10.8.
The first version did not properly target ES5 environments, so a fix for that was published as a bugfix release.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-apiclient-javascript/pull/288&quot;&gt;jellyfin-apiclient-javascript#288&lt;/a&gt;: Bump version to 1.9.0&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-apiclient-javascript/pull/304&quot;&gt;jellyfin-apiclient-javascript#304&lt;/a&gt;: Fix babel target&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-apiclient-javascript/pull/306&quot;&gt;jellyfin-apiclient-javascript#306&lt;/a&gt;: Bump version to 1.9.1&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;jellyfin-androidtv&lt;/h3&gt;
&lt;p&gt;I only had a couple pull requests for the Android TV app this month to fix some last minute issues in the 0.12 release.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/1125&quot;&gt;jellyfin-androidtv#1125&lt;/a&gt;: Fix now playing bug layout&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/1138&quot;&gt;jellyfin-androidtv#1138&lt;/a&gt;: Remove unused tile colors and update default theme&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;jellyfin-sdk-typescript&lt;/h2&gt;
&lt;p&gt;This month I published a new project that I have been working on, a &lt;a href=&quot;https://github.com/thornbill/jellyfin-sdk-typescript&quot;&gt;TypeScript SDK for Jellyfin&lt;/a&gt;.
This project is &lt;strong&gt;not&lt;/strong&gt; (currently) an official Jellyfin project.
This was my first time doing much in TypeScript, and I am loving it.
More information about this project will be published in a separate post soon!&lt;/p&gt;
&lt;h2&gt;thornbill.dev&lt;/h2&gt;
&lt;p&gt;I have made a few updates to this website this month also.
Since I updated the layout of the blog post pages, I have wanted to apply a similar layout to the home page, and now it has been updated.
I also added a footer to every page of the website that specifies the license.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;If you are interested in supporting my work, you can &lt;a href=&quot;https://github.com/sponsors/thornbill&quot;&gt;sponsor me on GitHub&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Work In Progress — August 2021</title>
    <link href="https://thornbill.dev/posts/wip-august-2021/"/>
    <updated>2021-09-13T00:00:00Z</updated>
    <id>https://thornbill.dev/posts/wip-august-2021/</id>
    <content type="html">&lt;p&gt;It may be a little later than usual, but here is a summary of the open-source contributions I made in August.&lt;/p&gt;
&lt;h2&gt;Jellyfin&lt;/h2&gt;
&lt;p&gt;August was a (relatively) slow coding month for me. However I think I set a new personal record for the number of pull requests I reviewed. I reviewed a total of &lt;strong&gt;107 pull requests&lt;/strong&gt; across 7 repositories in the Jellyfin organization! 🚀&lt;/p&gt;
&lt;h3&gt;jellyfin-androidtv&lt;/h3&gt;
&lt;p&gt;The Jellyfin Android TV app is continuing to prepare for the final release of the 0.12 version of the app. The pull requests I worked on this month focused on improving codec support, fixing some bugs, and a little bit of code cleanup. We released three updates to the 0.12 beta in the month of August and are getting very close now to a final release.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/1076&quot;&gt;jellyfin-androidtv#1076&lt;/a&gt;: Allow user sessions to be set to null again&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/1102&quot;&gt;jellyfin-androidtv#1102&lt;/a&gt;: Restore direct play support for avi with libvlc&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/1103&quot;&gt;jellyfin-androidtv#1103&lt;/a&gt;: Enable multichannel audio support for Fire TVs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/1108&quot;&gt;jellyfin-androidtv#1108&lt;/a&gt;: Add guide card to live tv library views&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/1110&quot;&gt;jellyfin-androidtv#1110&lt;/a&gt;: Downmix audio by default on Chromecast with Google TV&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/1111&quot;&gt;jellyfin-androidtv#1111&lt;/a&gt;: Remove useless check method&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;jellyfin-web&lt;/h3&gt;
&lt;p&gt;The changes I worked on in jellyfin-web this month focused mainly on developer experience. Several improvements were made to our CI workflow and reduce the amount of build time warnings that were produced. I also fixed a minor regression in unstable that caused the &amp;quot;continue watching&amp;quot; section of the home screen to show images in the wrong aspect ratio.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2821&quot;&gt;jellyfin-web#2821&lt;/a&gt;: Update merge conflict action trigger&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2829&quot;&gt;jellyfin-web#2829&lt;/a&gt;: Fix continue watching card shapes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2848&quot;&gt;jellyfin-web#2848&lt;/a&gt;: Update dependabot frequency to run weekly&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2853&quot;&gt;jellyfin-web#2853&lt;/a&gt;: Update workbox&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2858&quot;&gt;jellyfin-web#2858&lt;/a&gt;: Fix build warnings&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;If you are interested in supporting my work, you can &lt;a href=&quot;https://github.com/sponsors/thornbill&quot;&gt;sponsor me on GitHub&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Work In Progress — July 2021</title>
    <link href="https://thornbill.dev/posts/wip-july-2021/"/>
    <updated>2021-08-04T00:00:00Z</updated>
    <id>https://thornbill.dev/posts/wip-july-2021/</id>
    <content type="html">&lt;p&gt;Another month has passed, so it is time for another report of the projects I have been working on. I spent some time visiting family this month, so I made noticeably fewer contributions in July.&lt;/p&gt;
&lt;h2&gt;Jellyfin&lt;/h2&gt;
&lt;p&gt;The beta release of Android TV app version 0.12 is now live! A huge shoutout to &lt;a href=&quot;https://github.com/nielsvanvelzen&quot;&gt;Niels&lt;/a&gt; for all his work making this release possible! 🎉 This release includes over a year of work including a completely revamped login workflow, design improvements throughout the app, and a ton of bug fixes. Additional information and installation instructions can be found on the &lt;a href=&quot;https://jellyfin.org/posts/android-betas/&quot;&gt;Jellyfin blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In addition to the changes below, I reviewed 48 pull requests in 7 different Jellyfin repositories this month.&lt;/p&gt;
&lt;h3&gt;jellyfin-androidtv&lt;/h3&gt;
&lt;p&gt;The changes for Android TV that I made this month were mostly polishing the user experience for the pending 0.12 release. The most significant was probably some playback profile fixes for Fire TV devices. The profile was limiting codec support to what was supported by the first generation Fire Stick devices when newer devices support additional codecs. There was also an issue where the maximum supported resolution was not included in the device profiles.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/993&quot;&gt;jellyfin-androidtv#993&lt;/a&gt;: Fix audio delay popup positioning&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/994&quot;&gt;jellyfin-androidtv#994&lt;/a&gt;: Change default step value in NumberSpinner&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/995&quot;&gt;jellyfin-androidtv#995&lt;/a&gt;: Remove unnecessary createPopupMenu util&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/1013&quot;&gt;jellyfin-androidtv#1013&lt;/a&gt;: Playback fixes for Fire TVs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/1019&quot;&gt;jellyfin-androidtv#1019&lt;/a&gt;: Change default screen&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;jellyfin-web&lt;/h3&gt;
&lt;p&gt;You may have noticed that sometimes after updating Jellyfin the web interface will not load properly until you refresh a few times or clear the browser cache. This was due to some issues with how caching was setup in our webpack configuration. After 10.8.0 this should no longer be an issue as the main JavaScript file name will not change, but will instead use a URL parameter for cache-busting. Hopefully this will make your update process go more smoothly. 🙂&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2784&quot;&gt;jellyfin-web#2784&lt;/a&gt;: Fix ATV 0.11 using wrong icon&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2789&quot;&gt;jellyfin-web#2789&lt;/a&gt;: Update stalebot configuration&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2790&quot;&gt;jellyfin-web#2790&lt;/a&gt;: Fix webpack config for bundle caching&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;jellyfin&lt;/h3&gt;
&lt;p&gt;I found a server issue introduced in 10.7 that caused the server to not honor a device&#39;s maximum supported resolution for video playback while working on the Android TV app. Luckily this was a pretty easy bug caused by an API migration, so I was able to submit a fix.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin/pull/6274&quot;&gt;jellyfin#6274&lt;/a&gt;: Restore max width and height params&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin/pull/6300&quot;&gt;jellyfin#6300&lt;/a&gt;: Update stalebot configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;ossgit&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://ossgit.org/&quot;&gt;Ossgit&lt;/a&gt; has been updated to the latest version of Gitea once again. There were a few minutes of downtime during the update due to some template changes that needed to be made for the new version.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;If you are interested in supporting my work, you can &lt;a href=&quot;https://github.com/sponsors/thornbill&quot;&gt;sponsor me on GitHub&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Work In Progress — June 2021</title>
    <link href="https://thornbill.dev/posts/wip-june-2021/"/>
    <updated>2021-07-02T00:00:00Z</updated>
    <id>https://thornbill.dev/posts/wip-june-2021/</id>
    <content type="html">&lt;p&gt;Happy Independence Day 🇺🇸 to those in the US and a happy (belated) Canada Day 🇨🇦 to our friends to the north!&lt;/p&gt;
&lt;p&gt;Here are some of the open-source projects I have been working on in the month of June.&lt;/p&gt;
&lt;h2&gt;Interdoc — A “new” open-source project&lt;/h2&gt;
&lt;p&gt;Interdoc is a project that I wrote several years ago and I finally decided to release it under an open-source license.
Interdoc is a RESTful API and minimal web interface for converting HTML and/or Markdown to a multitude of different formats including DOCX, EPUB, LaTeX, ODT, PDF, various wiki formats, and more!
The project relies on the powerful &lt;a href=&quot;https://pandoc.org/&quot;&gt;Pandoc&lt;/a&gt; command line utility on the backend.
I primarily used this to convert from Markdown to MediaWiki Markup because I could never get the syntax right. 😂&lt;/p&gt;
&lt;p&gt;Considering the source had been sitting untouched for &lt;strong&gt;three years&lt;/strong&gt;, getting everything up to date on a modern version of Node and updated dependencies was fairly painless.
A demo is currently hosted at &lt;a href=&quot;https://interdoc.thornbill.dev/&quot;&gt;interdoc.thornbill.dev&lt;/a&gt; and the source can be found on &lt;a href=&quot;https://gitlab.com/thornbill/interdoc&quot;&gt;my GitLab profile&lt;/a&gt;.
Hopefully someone will find it useful!&lt;/p&gt;
&lt;h2&gt;Jellyfin&lt;/h2&gt;
&lt;p&gt;This month I made it a priority to review pull requests for the projects I work on regularly for Jellyfin.
In particular jellyfin-web has fallen a bit behind with reviews and dependabot can be a bit ruthless.
In total it looks like I reviewed &lt;strong&gt;95&lt;/strong&gt; pull requests this month.
Unsurprisingly most of those were in jellyfin-androidtv (41) and jellyfin-web (41). 🚀&lt;/p&gt;
&lt;h3&gt;jellyfin-androidtv&lt;/h3&gt;
&lt;p&gt;We are still working towards that fabled 0.12 release for Android TV.
To that end, a lot of the ongoing work on the app has been focused on polish and stability.&lt;/p&gt;
&lt;p&gt;This month I have worked on updating the appearance of the user and clock view shown in the upper right corner of the screen so that it matches the new toolbar used on the home screen.
Also the player overlay received some minor layout tweaks for the text and logo as well as a fix for the positioning of the audio delay popup.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/920&quot;&gt;jellyfin-androidtv#920&lt;/a&gt;: Refactor clock view&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/921&quot;&gt;jellyfin-androidtv#921&lt;/a&gt;: Fix nullability issues&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/943&quot;&gt;jellyfin-androidtv#943&lt;/a&gt;: Improve null handling in PlaybackHelper.getItemsToPlay&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/947&quot;&gt;jellyfin-androidtv#947&lt;/a&gt;: Fix broken layout on grid pages&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/966&quot;&gt;jellyfin-androidtv#966&lt;/a&gt;: Update clock bug to match toolbar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/973&quot;&gt;jellyfin-androidtv#973&lt;/a&gt;: Update playback overlay layout&lt;/li&gt;
&lt;li&gt;(In Review) &lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/977&quot;&gt;jellyfin-androidtv#977&lt;/a&gt;: Fix user information not reflecting updates&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/978&quot;&gt;jellyfin-androidtv#978&lt;/a&gt;: Fix crash when watching and recording live tv&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/979&quot;&gt;jellyfin-androidtv#979&lt;/a&gt;: Fix crash when previous channel id is empty&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/980&quot;&gt;jellyfin-androidtv#980&lt;/a&gt;: Add glide app module for configuration&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/981&quot;&gt;jellyfin-androidtv#981&lt;/a&gt;: Fix crash due to missing context on grid&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/983&quot;&gt;jellyfin-androidtv#983&lt;/a&gt;: Update background filter transparency&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/993&quot;&gt;jellyfin-androidtv#993&lt;/a&gt;: Fix audio delay popup positioning&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/994&quot;&gt;jellyfin-androidtv#994&lt;/a&gt;: Change default step value in NumberSpinner&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/995&quot;&gt;jellyfin-androidtv#995&lt;/a&gt;: Remove unnecessary createPopupMenu util&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;jellyfin-web&lt;/h3&gt;
&lt;p&gt;React support is in! 🎉
If you run unstable or the master branch of web, the search page is now a React component... and it looks exactly like it did previously.
It is another very exciting step forward to me though as it allows us to move past the limitations and issues inherit with building out all pages in the app using DOM manipulation and HTML string injection.&lt;/p&gt;
&lt;p&gt;Another feature I worked on this month was adding the ability to define custom links to show up in the menu in Jellyfin.
It was apparent after our move to the current webpack build system that a lot of people were manipulating the source files of their Jellyfin install to achieve this.
With my change, links can now be defined in the web config.json file.
Additional details can be found in the &lt;a href=&quot;https://jellyfin.org/docs/general/clients/web-config.html#custom-menu-links&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2683&quot;&gt;jellyfin-web#2683&lt;/a&gt;: Add React support&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2698&quot;&gt;jellyfin-web#2698&lt;/a&gt;: Fix live reload&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2703&quot;&gt;jellyfin-web#2703&lt;/a&gt;: Add error logging for missing translation keys&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2704&quot;&gt;jellyfin-web#2704&lt;/a&gt;: Fix continue reading card shape&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2705&quot;&gt;jellyfin-web#2705&lt;/a&gt;: Add support for custom menu links in config.json&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2706&quot;&gt;jellyfin-web#2706&lt;/a&gt;: Update icon used for syncplay&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2736&quot;&gt;jellyfin-web#2736&lt;/a&gt;: Fix invalid import path&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2742&quot;&gt;jellyfin-web#2742&lt;/a&gt;: Update dependencies&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2743&quot;&gt;jellyfin-web#2743&lt;/a&gt;: Remove html from syncplay toast messages&lt;/li&gt;
&lt;li&gt;(In Review) &lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2758&quot;&gt;jellyfin-web#2758&lt;/a&gt;: Use album artist for listing artist albums&lt;/li&gt;
&lt;li&gt;(Awaiting Backport) &lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2759&quot;&gt;jellyfin-web#2759&lt;/a&gt;: Fix serviceworker paths&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;thornbill.dev&lt;/h2&gt;
&lt;p&gt;You may notice I have made some updates to this website this month also!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There is now an &lt;a href=&quot;https://thornbill.dev/feed.xml&quot;&gt;RSS feed&lt;/a&gt; available so you can follow my posts.&lt;/li&gt;
&lt;li&gt;Post pages have been redesigned slightly and now sport a navigation header.&lt;/li&gt;
&lt;li&gt;Tag support has been added including a basic page listing &lt;a href=&quot;https://thornbill.dev/tags/&quot;&gt;all tags&lt;/a&gt; for browsing.&lt;/li&gt;
&lt;li&gt;Licenses have been updated. All code for this site is available under the &lt;a href=&quot;https://gitlab.com/thornbill/thornbill.dev/-/blob/master/LICENSE&quot;&gt;BSD-2-Clause License&lt;/a&gt; and all other content is provided under &lt;a href=&quot;https://creativecommons.org/licenses/by-sa/4.0/&quot;&gt;CC-BY-SA&lt;/a&gt; unless otherwise specified.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The source for this site is also available on &lt;a href=&quot;https://gitlab.com/thornbill/thornbill.dev&quot;&gt;my GitLab profile&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;ossgit&lt;/h2&gt;
&lt;p&gt;Things have been a little quiet for &lt;a href=&quot;https://ossgit.org/&quot;&gt;ossgit.org&lt;/a&gt; this month.
There are a few new repositories being mirrored there including the newest project to join the Jellyfin organization: &lt;a href=&quot;https://github.com/jellyfin/swiftfin&quot;&gt;Swiftfin&lt;/a&gt;.
Otherwise there is not much to report on this front. 🦗&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;If you are interested in supporting my work, you can &lt;a href=&quot;https://github.com/sponsors/thornbill&quot;&gt;sponsor me on GitHub&lt;/a&gt;.
An option for custom amounts and one-time contributions is now available.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Work In Progress — May 2021</title>
    <link href="https://thornbill.dev/posts/wip-may-2021/"/>
    <updated>2021-06-07T00:00:00Z</updated>
    <id>https://thornbill.dev/posts/wip-may-2021/</id>
    <content type="html">&lt;p&gt;Here are some of the things I have been working on in the month of May.&lt;/p&gt;
&lt;h2&gt;jellyfin-androidtv&lt;/h2&gt;
&lt;p&gt;Most of my time this month has been spent working on the Jellyfin Android TV app in hopes that the 0.12 update will release at some point in 2021… 🤞&lt;/p&gt;
&lt;p&gt;I have mainly been focusing on UX issues and regressions in the app. This has included some improvements for subtitles, focus issues on Fire OS, and improving performance of rendering blur hash placeholders.&lt;/p&gt;
&lt;p&gt;I also worked on refactoring the player profiles. This should make it easier for people to contribute fixes for issues when the profile is inaccurate.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/861&quot;&gt;jellyfin-androidtv#861&lt;/a&gt;: Improve subtitle rendering&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/862&quot;&gt;jellyfin-androidtv#862&lt;/a&gt;: Add workaround for koin logging issue&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/870&quot;&gt;jellyfin-androidtv#870&lt;/a&gt;: Fix null media url crash&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/873&quot;&gt;jellyfin-androidtv#873&lt;/a&gt;: Add horizontal padding to subtitles&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/874&quot;&gt;jellyfin-androidtv#874&lt;/a&gt;: Fix Fire OS focus issues on login&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/875&quot;&gt;jellyfin-androidtv#875&lt;/a&gt;: Fix default value for DefaultView preference&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/876&quot;&gt;jellyfin-androidtv#876&lt;/a&gt;: Change subtitle delivery method for dvdsubs in exoplayer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/877&quot;&gt;jellyfin-androidtv#877&lt;/a&gt;: Remove text dimming on inactive cards&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/888&quot;&gt;jellyfin-androidtv#888&lt;/a&gt;: Refactor alpha picker in Kotlin and fix Fire OS compatability&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/895&quot;&gt;jellyfin-androidtv#895&lt;/a&gt;: Fix subtitles out of bounds crash&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/898&quot;&gt;jellyfin-androidtv#898&lt;/a&gt;: Remove transparency from card badges&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/899&quot;&gt;jellyfin-androidtv#899&lt;/a&gt;: Refactor player profiles&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/903&quot;&gt;jellyfin-androidtv#903&lt;/a&gt;: Grid view improvements&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/905&quot;&gt;jellyfin-androidtv#905&lt;/a&gt;: Decode blur hashes in background thread&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/907&quot;&gt;jellyfin-androidtv#907&lt;/a&gt;: Disable AC3 for Fire Stick Gen 1 devices&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/911&quot;&gt;jellyfin-androidtv#911&lt;/a&gt;: Add flac support to exoplayer profile&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/917&quot;&gt;jellyfin-androidtv#917&lt;/a&gt;: Allow wildcard imports in detekt&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/919&quot;&gt;jellyfin-androidtv#919&lt;/a&gt;: Hide live TV section when unavailable&lt;/li&gt;
&lt;li&gt;(In Review) &lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/920&quot;&gt;jellyfin-androidtv#920&lt;/a&gt;: Refactor clock view&lt;/li&gt;
&lt;li&gt;(In Progress) &lt;a href=&quot;https://github.com/jellyfin/jellyfin-androidtv/pull/921&quot;&gt;jellyfin-androidtv#921&lt;/a&gt;: WIP: Crash fixes&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;jellyfin-web&lt;/h2&gt;
&lt;p&gt;Some very exciting changes are in the works on the Jellyfin Web side of things also.&lt;/p&gt;
&lt;p&gt;For developers, I recently found a fix for live reload when running the site with the webpack dev server. I also have an open PR to add support for rendering pages with &lt;a href=&quot;https://reactjs.org/&quot;&gt;React&lt;/a&gt;. Hopefully this will improve security and make it easier to develop new pages!&lt;/p&gt;
&lt;p&gt;Speaking of security, a fix was made for an XSS vulnerability that was disclosed. This also prompted me to cleanup some of the code for toast notifications.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2647&quot;&gt;jellyfin-web#2647&lt;/a&gt;: Fix mov support in Safari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2648&quot;&gt;jellyfin-web#2648&lt;/a&gt;: Fix alpine python package&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2657&quot;&gt;jellyfin-web#2657&lt;/a&gt;: Bump jellyfin-apiclient to 1.8.0&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2675&quot;&gt;jellyfin-web#2675&lt;/a&gt;: Fix sharing url&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2676&quot;&gt;jellyfin-web#2676&lt;/a&gt;: Fix xss via displaymessage&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2681&quot;&gt;jellyfin-web#2681&lt;/a&gt;: Cleanup toast messages&lt;/li&gt;
&lt;li&gt;(In Review) &lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2683&quot;&gt;jellyfin-web#2683&lt;/a&gt;: Add React support&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/2698&quot;&gt;jellyfin-web#2698&lt;/a&gt;: Fix live reload&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;jellyfin-apiclient-javascript&lt;/h2&gt;
&lt;p&gt;For the JavaScript apiclient, changes were made to make our npm publishes automated. This should prevent some of the issues we have had around releases of jellyfin-web in the past.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-apiclient-javascript/pull/208&quot;&gt;jellyfin-apiclient-javascript#208&lt;/a&gt;: Add GH Action for npm publishing&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-apiclient-javascript/pull/209&quot;&gt;jellyfin-apiclient-javascript#209&lt;/a&gt;: Bump version to 1.8.0&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-apiclient-javascript/pull/210&quot;&gt;jellyfin-apiclient-javascript#210&lt;/a&gt;: Remove unused typescript configuration&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jellyfin/jellyfin-apiclient-javascript/pull/211&quot;&gt;jellyfin-apiclient-javascript#211&lt;/a&gt;: Add dependabot config for GH Actions&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Other Jellyfin contributions&lt;/h2&gt;
&lt;p&gt;A few other minor changes were made to &lt;a href=&quot;https://github.com/jellyfin/jellyfin-expo&quot;&gt;jellyfin-expo&lt;/a&gt;, &lt;a href=&quot;https://github.com/jellyfin/.github&quot;&gt;jellyfin/.github&lt;/a&gt;, and &lt;a href=&quot;https://github.com/jellyfin/jellyfin&quot;&gt;jellyfin&lt;/a&gt; although nothing of note in my opinion. 😉&lt;/p&gt;
&lt;h2&gt;ossgit&lt;/h2&gt;
&lt;p&gt;Just a couple updates on &lt;a href=&quot;https://ossgit.org/&quot;&gt;ossgit&lt;/a&gt;. If you noticed any instability or long load times, there was a server misconfiguration causing some issues that has finally been resolved. ossgit has also been updated to use the latest release of Gitea.&lt;/p&gt;
&lt;p&gt;If you are interested in supporting my work, you can &lt;a href=&quot;https://github.com/sponsors/thornbill&quot;&gt;sponsor me on GitHub&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Jellyfin on iOS Hack Week Retrospective</title>
    <link href="https://thornbill.dev/posts/jellyfin-ios-hack-week-2020-08-30/"/>
    <updated>2020-09-09T00:00:00Z</updated>
    <id>https://thornbill.dev/posts/jellyfin-ios-hack-week-2020-08-30/</id>
    <content type="html">&lt;p&gt;I decided to take the last week (30 August 2020) to hack on some of the issues with the iOS experience on recent versions of Jellyfin. Below is a summary of the progress made.&lt;/p&gt;
&lt;h2&gt;Quick Wins in Jellyfin-Web&lt;/h2&gt;
&lt;p&gt;Support for Picture-in-Picture (PiP) will be properly detected in future Jellyfin versions! This will prevent the PiP control from showing in the video playback controls on devices when it is not actually supported by the device (iPhones and older iPads). See the &lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/1873&quot;&gt;pull request&lt;/a&gt; for additional details.&lt;/p&gt;
&lt;p&gt;iPad detection will now be more robust in future Jellyfin versions! Recent iOS versions made it more difficult to detect if a website was opened on an iPad. It is important for Jellyfin to be able to accurately determine what device it is running on in order to properly report what media the device can support. This &lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/1880&quot;&gt;pull request&lt;/a&gt; added some logic to improve our ability to detect iPads in these cases.&lt;/p&gt;
&lt;h2&gt;Playback Issues&lt;/h2&gt;
&lt;p&gt;If you have tried Jellyfin on an older iOS device and found that nothing would play, you will be glad to hear that a fix was found! There was an assumption in jellyfin-web that all iOS devices would support the AC-3 and E-AC-3 audio codecs. Based on this &lt;a href=&quot;https://developer.dolby.com/platforms/apple/ios/device-support/&quot;&gt;support matrix&lt;/a&gt;, older iPhones and iPads lack support for these codecs though. A change was added in jellyfin-web to properly report those codecs as unsupported for these devices. More details can be found in the &lt;a href=&quot;https://github.com/jellyfin/jellyfin-web/pull/1893&quot;&gt;pull request&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Another issue was discovered that caused progressive playback of audio transcoded to the AAC codec to fail to play. This was resolved by this &lt;a href=&quot;https://github.com/jellyfin/jellyfin/pull/4053&quot;&gt;pull request&lt;/a&gt; in the server repository.&lt;/p&gt;
&lt;p&gt;Additional transcoding issues are still being investigated. If you are encountering video playback failures on iOS when transcoding, please provide details in this &lt;a href=&quot;https://github.com/jellyfin/jellyfin/issues/3815&quot;&gt;issue&lt;/a&gt; including the media format information and any server and ffmpeg logs.&lt;/p&gt;
&lt;h2&gt;iPad Rotation in the Jellyfin App&lt;/h2&gt;
&lt;p&gt;The issue that causes iPads to switch orientation when launching the Jellyfin app was fixed upstream by a contributor to the Expo project. I had hoped we could upgrade the library and release a fix for the Jellyfin app, but Expo &lt;a href=&quot;https://github.com/expo/expo/issues/10055&quot;&gt;did not release&lt;/a&gt; the update for the current Expo SDK version. As a result, this will be on-hold until the next release of the Expo SDK.&lt;/p&gt;
</content>
  </entry>
</feed>