// ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġorg . jetbrains . plugins . github . pull request Ċ Ċ import Ġcom . intellij . ide . plugins . Dynamic Plugin Listener Ċ import Ġcom . intellij . ide . plugins . Ide a Plugin Descriptor Ċ import Ġcom . intellij . ide . plugins . PluginManager Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . components . Service Ċ import Ġcom . intellij . openapi . components . service Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . project . Project Manager Listener Ċ import Ġcom . intellij . openapi . wm . Tool WindowManager Ċ import Ġorg . jetbrains . annotations . Called In A wt Ċ import Ġorg . jetbrains . plugins . github . api . GH Repository Coordinates Ċ import Ġorg . jetbrains . plugins . github . pull request . config . Github Pull Requests Project UI Settings Ċ import Ġorg . jetbrains . plugins . github . pull request . ui . tool window . GH PR Tool Window Tab Component Controller Ċ import Ġorg . jetbrains . plugins . github . util . Collection Delta Ċ import Ġorg . jetbrains . plugins . github . util . GH Project Repositories Manager Ċ import Ġkotlin . properties . Deleg ates . observable Ċ Ċ @ Service Ċ internal Ġclass ĠGH PR Tool Window Tabs Manager ( private Ġval Ġproject : ĠProject ) Ġ: ĠDis posable Ġ{ ĊĠ Ġprivate Ġval Ġrepository Manager Ġ= Ġproject . service < GH Project Repositories Manager >() ĊĠ Ġprivate Ġval Ġsettings Ġ= ĠGithub Pull Requests Project UI Settings . getInstance ( project ) ĊĊĠ Ġprivate Ġval Ġtab Dis posal Listener Ġ= Ġobject Ġ: ĠGH PR Tool Window Tabs Content Manager . Tab Dis posal Listener Ġ{ ĊĊĠĠĠ Ġvar Ġmut ed Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġtab Disposed ( repository : ĠGH Repository Coordinates ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ(! muted ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( repository Manager . known Repositories . any Ġ{ Ġit . repository Ġ== Ġrepository Ġ}) Ġsettings . add Hidden Url ( repository . to Url ()) ĊĠĠĠĠĠĠĠ Ġupdate Tabs () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinternal Ġvar Ġcontent Manager : ĠGH PR Tool Window Tabs Content Manager ? ĊĠĠĠ Ġby Ġobservable < GH PR Tool Window Tabs Content Manager ? >( null ) Ġ{ Ġ_, Ġold Manager , Ġnew Manager Ġ-> ĊĠĠĠĠĠ Ġold Manager ?. remove Tab Dis posal EventListener ( tab Dis posal Listener ) ĊĠĠĠĠĠ Ġnew Manager ?. add Tab Dis posal EventListener ( tab Dis posal Listener ) ĊĠĠĠĠĠ Ġupdate Tabs () ĊĠĠĠ Ġ} ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġrepository Manager . add Repository List Changed Listener ( this ) Ġ{ ĊĠĠĠĠĠ Ġupdate Tabs () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Called In A wt ĊĠ Ġfun Ġis Available (): ĠBoolean Ġ= Ġget Repositories (). isNotEmpty () ĊĊĠ Ġ@ Called In A wt ĊĠ Ġfun Ġshow Tab ( repository : ĠGH Repository Coordinates , Ġon Shown : Ġ(( GH PR Tool Window Tab Component Controller ?) Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġsettings . remove Hidden Url ( repository . to Url ()) ĊĠĠĠ Ġupdate Tabs Ġ{ ĊĠĠĠĠĠ ĠTool WindowManager . getInstance ( project ). get Tool Window ( GH PR Tool Window Factory . ID )?. show Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent Manager ?. focus Tab ( repository , Ġon Shown ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate Tabs ( after Update : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġval Ġrepositories Ġ= Ġget Repositories (). associate By ({ Ġit . repository Ġ}, Ġ{ Ġit . git Remote Ġ}) ĊĠĠĠ ĠTool WindowManager . getInstance ( project ). get Tool Window ( GH PR Tool Window Factory . ID )?. set Available ( repositories . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġval Ġcontent Manager Ġ= Ġcontent Manager ĊĠĠĠĠĠ Ġif Ġ( content Manager Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdelta Ġ= ĠCollection Delta ( content Manager . current Tabs , Ġrepositories . keys ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġdelta . removed Items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcontent Manager . remove Tab ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġdelta . new Items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcontent Manager . add Tab ( item , Ġrepositories . getValue ( item )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġafter Update ?. invoke () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Repositories () Ġ= Ġrepository Manager . known Repositories . filter Ġ{ ĊĠĠĠ Ġ! settings . get Hidden Urls (). contains ( it . repository . to Url ()) ĊĠ Ġ} ĊĊĠ Ġclass ĠBefore Plugin Unload Listener ( private Ġval Ġproject : ĠProject ) Ġ: ĠDynamic Plugin Listener Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġbefore Plugin Unload ( plugin Descriptor : ĠIde a Plugin Descriptor , Ġis Update : ĠBoolean ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( plugin Descriptor . plugin Id Ġ== ĠPlugin Manager . getInstance (). get Plugin Or Platform By ClassName ( this :: class . java . name )) Ġ{ ĊĠĠĠĠĠĠĠ Ġmute Tab Dis posal Listener ( project ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġclass ĠBefore Project Close Listener Ġ: ĠProject Manager Listener Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġproject Closing ( project : ĠProject ) Ġ= Ġmute Tab Dis posal Listener ( project ) ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġmute Tab Dis posal Listener ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠ Ġproject . service < GH PR Tool Window Tabs Manager >(). tab Dis posal Listener . muted Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠ Ġ} Ċ } Ċ