چطور با تایپ‌اسکریپت، فیچرهای پلی‌لیست PotPlayer رو به مک‌آواس آوردم

#typescript#open-source#macos#javascript#iina
یک رابط کاربری تمیز و تاریک از مدیا پلیر که با کدهای تایپ‌اسکریپت ترکیب شده است

جای خالی یه پلیر آشنا تو مک

هر برنامه‌نویسی که از ویندوز به مک اومده باشه، این حس رو خوب می‌شناسه: سخت‌افزار مک عالیه، ترمینال لینوکسی خیلی به کار میاد، اما معمولاً یه نرم‌افزار خاص هست که تو مک جایگزین دقیقی براش پیدا نمی‌کنین.

برای من، اون نرم‌افزار PotPlayer بود.

وقتی ویندوز داشتم، PotPlayer پلیر اصلی من بود. فرقی نمی‌کرد داشتم یه سریال می‌دیدم یا یه دوره آموزشی برنامه‌نویسی با کلی فولدر تو در تو رو نگاه می‌کردم؛ PotPlayer کار رو راحت راه می‌نداخت. می‌تونست ویدیوهای لوکال رو مرتب کنه، محتوای آنلاین رو استریم کنه و مدت زمان کل یه دوره رو هم حساب کنه. همه چیز رو خیلی منظم نگه می‌داشت.

وقتی اومدم روی مک، گشتم دنبال یه جایگزین. نزدیک‌ترین گزینه IINA بود؛ یه پلیر مدرن که روی هسته MPV ساخته شده. ظاهر تمیزی داشت و همه فرمت‌ها رو هم پخش می‌کرد، اما اون مدیریت پلی‌لیستی که بهش عادت داشتم رو نداشت. پشتیبانی از فولدرهای تو در تو و مدیریت پلی‌لیست‌های آنلاین رو نداشت و همین باعث می‌شد پیدا کردن ویدیوهای یه دوره کمی خسته‌کننده بشه.

قدرت و انعطاف جاوااسکریپت

همین‌طور که دنبال راه‌حل می‌گشتم، متوجه یه چیز جالب شدم: IINA به تازگی سیستم پلاگین خودش رو راه انداخته بود. چیزی که توجهم رو جلب کرد این بود که می‌شد این پلاگین‌ها رو با JavaScript و TypeScript نوشت.

به عنوان یه برنامه‌نویس فرانت‌اند و فول‌استک، این برام خیلی جالب بود. ما معمولاً JS/TS رو مختص مرورگرها یا بک‌اند می‌دونیم. اما اینجا فرصتی بود تا با جاوااسکریپت، با APIهای نیتیو مک‌اواس و هسته MPV کار کنم. این موضوع انعطاف‌پذیری این زبان رو تو یه زمینه متفاوت نشون می‌داد.

چون فیچری که می‌خواستم هنوز وجود نداشت، تصمیم گرفتم خودم بنویسمش.

ساخت IINA Playlist Pro

ادیتور رو باز کردم و شروع کردم به نوشتن IINA Playlist Pro. هدفم ساده بود: همون راحتی مدیریت پلی‌لیستی که تو ویندوز داشتم رو بیارم داخل IINA.

کدها رو طوری نوشتم که فولدرهای تو در تو رو هندل کنه، لیست‌های استریم آنلاین رو مدیریت کنه و زمان کل دوره‌ها رو مستقیم تو رابط کاربری خود IINA نشون بده. مشکل من رو حل کرد، برای همین کُدش رو تو گیت‌هاب گذاشتم تا اگه کس دیگه‌ای هم لازم داشت استفاده کنه.

بعد از یه مدت، ریپازیتوری کم‌کم شروع کرد به استار گرفتن. اخیراً هم یه نفر یه Issue باز کرد و درخواست اضافه شدن یه فیچر جدید رو داد. دیدن اینکه این ابزار کوچیک داره کار بقیه رو هم راحت‌تر می‌کنه، حس خیلی خوبی داشت. فیدبک رو پیاده‌سازی کردم و آپدیت رو دادم. الان IINA Playlist Pro تو لیست پلاگین‌های کامیونیتی IINA و ریپازیتوری اصلیش ثبت شده.

گشت و گذار تو کامیونیتی اوپن‌سورس

انتشار این پلاگین باعث شد تا ببینم بقیه دولوپرها برای IINA و MPV چی ساختن.

یکی از پلاگین‌هایی که توجهم رو جلب کرد، Anime4K بود. این ابزار از شیدرهای GLSL استفاده می‌کنه تا کیفیت انیمیشن‌ها و به ویژه انیمه رو در لحظه و موقع پخش ارتقا بده. از روی کنجکاوی تستش کردم و تفاوت کیفیتش واقعاً ملموس بود. یه دولوپر این رو برای MPV ساخته بود و یه نفر دیگه تو کامیونیتی، اون رو برای IINA پورت کرده بود.

این پروژه کوچیک یه یادآوری خوب بود برای اینکه چرا برنامه‌نویسی جذابه: اینکه یه مشکل رو ببینی، متوجه بشی ابزار حل کردنش رو داری، و در نهایت اون راه‌حل رو با بقیه به اشتراک بذاری.

لینک‌ها و منابع