Skip to content

[no squash] Use DI container to inject ContentFetchers class#2910

Closed
jtojnar wants to merge 10 commits intoRSS-Bridge:masterfrom
jtojnar:cache-di
Closed

[no squash] Use DI container to inject ContentFetchers class#2910
jtojnar wants to merge 10 commits intoRSS-Bridge:masterfrom
jtojnar:cache-di

Conversation

@jtojnar
Copy link
Copy Markdown
Contributor

@jtojnar jtojnar commented Jul 9, 2022

Motivation

  1. The DI container will solve passing the dependencies for “cross-cutting concerns” for us: Individual classes just have to request their dependencies (Cache, Logger) in a constructor and the container will pass them automatically upon instantiation.
  2. Reduction of global state for making the testing easier: instead of formatters relying on $_SERVER superglobal and having to hustle with it in tests, they will just take RequestInfo object as a dependency and in tests, we will pass a custom one through the container.
  3. The ability to customize e.g. CacheInterface implementation for library consumers: As simple as $dic->add(CacheInterface::class, fn () => new MyCustomCache());

What this PR does

This is in preparation to allow us injecting Cache instance, commits to be reviewed independently:

  1. Implemented a very stupid dependency injection container that creates requested objects and passes them dependencies based on typehints of constructor method.
  2. Moved most of the stuff in lib/contents.php into a new ContentsFetcher class so that it can receive Cache.
  3. Injected ContentsFetcher into the BridgeAbstract via a constructor and made BridgeFactory use the Container to create bridges.
  4. Used a custom Rector rule to switch to the methods of contentsFetcher.

RSS-Bridge should be fully functional at each of the commits.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Jul 9, 2022

Pull request artifacts

file last change
ABCNewsBridge-current-context1 2022-07-24, 21:21:17
AO3Bridge-current-context1 2022-07-24, 21:21:17
AO3Bridge-current-context2 2022-07-24, 21:21:17
AO3Bridge-current-context3 2022-07-24, 21:21:17
ARDMediathekBridge-current-context1 2022-07-24, 21:21:17
ASRockNewsBridge-current-context1 2022-07-24, 21:21:17
AcrimedBridge-current-context1 2022-07-24, 21:21:17
AirBreizhBridge-current-context1 2022-07-24, 21:21:17
AlbionOnlineBridge-current-context1 2022-07-24, 21:21:17
AlfaBankByBridge-current-context1 2022-07-24, 21:21:17
AllocineFRBridge-current-context1 2022-07-24, 21:21:17
AmazonBridge-current-context1 2022-07-24, 21:21:17
AmazonPriceTrackerBridge-current-context1 2022-07-24, 21:21:17
AnidexBridge-current-context1 2022-07-24, 21:21:17
AnimeUltimeBridge-current-context1 2022-07-24, 21:21:17
AppleAppStoreBridge-current-context1 2022-07-24, 21:21:17
AppleMusicBridge-current-context1 2022-07-24, 21:21:17
ArtStationBridge-current-context1 2022-07-24, 21:21:17
Arte7Bridge-current-context1 2022-07-24, 21:21:17
Arte7Bridge-current-context2 2022-07-24, 21:21:17
AsahiShimbunAJWBridge-current-context1 2022-07-24, 21:21:17
AskfmBridge-current-context1 2022-07-24, 21:21:17
AssociatedPressNewsBridge-current-context1 2022-07-24, 21:21:17
AssociatedPressNewsBridge-current-context2 2022-07-24, 21:21:17
AstrophysicsDataSystemBridge-current-context1 2022-07-24, 21:21:17
AtmoNouvelleAquitaineBridge-current-context1 2022-07-24, 21:21:17
AtmoOccitanieBridge-current-context1 2022-07-24, 21:21:17
AutoJMBridge-current-context1 2022-07-24, 21:21:17
AwwwardsBridge-current-context1 2022-07-24, 21:21:17
BAEBridge-current-context1 2022-07-24, 21:21:17
BadDragonBridge-current-context1 2022-07-24, 21:21:17
BadDragonBridge-current-context2 2022-07-24, 21:21:17
BakaUpdatesMangaReleasesBridge-current-context1 2022-07-24, 21:21:17
BakaUpdatesMangaReleasesBridge-current-context2 2022-07-24, 21:21:17
BandcampBridge-current-context1 2022-07-24, 21:21:17
BandcampBridge-current-context2 2022-07-24, 21:21:17
BandcampBridge-current-context3 2022-07-24, 21:21:17
BandcampBridge-current-context4 2022-07-24, 21:21:17
BandcampDailyBridge-current-context1 2022-07-24, 21:21:17
BandcampDailyBridge-current-context2 2022-07-24, 21:21:17
BandcampDailyBridge-current-context3 2022-07-24, 21:21:17
BandcampDailyBridge-current-context4 2022-07-24, 21:21:17
BastaBridge-current-context1 2022-07-24, 21:21:17
BinanceBridge-current-context1 2022-07-24, 21:21:17
BlaguesDeMerdeBridge-current-context1 2022-07-24, 21:21:17
BleepingComputerBridge-current-context1 2022-07-24, 21:21:17
BookMyShowBridge-current-context1 2022-07-24, 21:21:17
BrutBridge-current-context1 2022-07-24, 21:21:17
BugzillaBridge-current-context1 2022-07-24, 21:21:17
BukowskisBridge-current-context1 2022-07-24, 21:21:17
BundesbankBridge-current-context1 2022-07-24, 21:21:17
BundestagParteispendenBridge-current-context1 2022-07-24, 21:21:17
CBCEditorsBlogBridge-current-context1 2022-07-24, 21:21:17
CNETBridge-current-context1 2022-07-24, 21:21:17
CVEDetailsBridge-current-context1 2022-07-24, 21:21:17
CachetBridge-current-context1 2022-07-24, 21:21:17
CarThrottleBridge-current-context1 2022-07-24, 21:21:17
CastorusBridge-current-context1 2022-07-24, 21:21:17
CastorusBridge-current-context2 2022-07-24, 21:21:17
CastorusBridge-current-context3 2022-07-24, 21:21:17
CdactionBridge-current-context1 2022-07-24, 21:21:17
CeskaTelevizeBridge-current-context1 2022-07-24, 21:21:17
CodebergBridge-current-context1 2022-07-24, 21:21:17
CodebergBridge-current-context2 2022-07-24, 21:21:17
CodebergBridge-current-context3 2022-07-24, 21:21:17
CodebergBridge-current-context4 2022-07-24, 21:21:17
CodebergBridge-current-context5 2022-07-24, 21:21:17
CollegeDeFranceBridge-current-context1 2022-07-24, 21:21:17
ComboiosDePortugalBridge-current-context1 2022-07-24, 21:21:17
ComicsKingdomBridge-current-context1 2022-07-24, 21:21:17
CommonDreamsBridge-current-context1 2022-07-24, 21:21:17
CopieDoubleBridge-current-context1 2022-07-24, 21:21:17
CourrierInternationalBridge-current-context1 2022-07-24, 21:21:17
CraigslistBridge-current-context1 2022-07-24, 21:21:17
CrewbayBridge-current-context1 2022-07-24, 21:21:17
CryptomeBridge-current-context1 2022-07-24, 21:21:17
CubariBridge-current-context1 2022-07-24, 21:21:17
CuriousCatBridge-current-context1 2022-07-24, 21:21:17
DailymotionBridge-current-context1 2022-07-24, 21:21:17
DailymotionBridge-current-context2 2022-07-24, 21:21:17
DailymotionBridge-current-context3 2022-07-24, 21:21:17
DanbooruBridge-current-context1 2022-07-24, 21:21:17
DansTonChatBridge-current-context1 2022-07-24, 21:21:17
DarkReadingBridge-current-context1 2022-07-24, 21:21:17
DauphineLibereBridge-current-context1 2022-07-24, 21:21:17
DavesTrailerPageBridge-current-context1 2022-07-24, 21:21:17
DerpibooruBridge-current-context1 2022-07-24, 21:21:17
DesoutterBridge-current-context1 2022-07-24, 21:21:17
DesoutterBridge-current-context2 2022-07-24, 21:21:17
DevToBridge-current-context1 2022-07-24, 21:21:17
DeveloppezDotComBridge-current-context1 2022-07-24, 21:21:17
DiarioDeNoticiasBridge-current-context1 2022-07-24, 21:21:17
DiarioDoAlentejoBridge-current-context1 2022-07-24, 21:21:17
DiceBridge-current-context1 2022-07-24, 21:21:17
DilbertBridge-current-context1 2022-07-24, 21:21:17
DiscogsBridge-current-context1 2022-07-24, 21:21:17
DiscogsBridge-current-context2 2022-07-24, 21:21:17
DiscogsBridge-current-context3 2022-07-24, 21:21:17
DiscogsBridge-current-context4 2022-07-24, 21:21:17
DockerHubBridge-current-context1 2022-07-24, 21:21:17
DockerHubBridge-current-context2 2022-07-24, 21:21:17
DonnonsBridge-current-context1 2022-07-24, 21:21:17
DribbbleBridge-current-context1 2022-07-24, 21:21:17
Drive2ruBridge-current-context1 2022-07-24, 21:21:17
Drive2ruBridge-current-context2 2022-07-24, 21:21:17
Drive2ruBridge-current-context3 2022-07-24, 21:21:17
Drive2ruBridge-current-context4 2022-07-24, 21:21:17
DuckDuckGoBridge-current-context1 2022-07-24, 21:21:17
EZTVBridge-current-context1 2022-07-24, 21:21:17
EconomistBridge-current-context1 2022-07-24, 21:21:17
EconomistBridge-current-context2 2022-07-24, 21:21:17
EconomistWorldInBriefBridge-current-context1 2022-07-24, 21:21:17
EliteDangerousGalnetBridge-current-context1 2022-07-24, 21:21:17
ElloBridge-current-context1 2022-07-24, 21:21:17
ElloBridge-current-context2 2022-07-24, 21:21:17
ElsevierBridge-current-context1 2022-07-24, 21:21:17
EngadgetBridge-current-context1 2022-07-24, 21:21:17
EpicgamesBridge-current-context1 2022-07-24, 21:21:17
EsquerdaNetBridge-current-context1 2022-07-24, 21:21:17
EstCeQuonMetEnProdBridge-current-context1 2022-07-24, 21:21:17
EtsyBridge-current-context1 2022-07-24, 21:21:17
EuronewsBridge-current-context1 2022-07-24, 21:21:17
ExecuteProgramBridge-current-context1 2022-07-24, 21:21:17
ExplosmBridge-current-context1 2022-07-24, 21:21:17
ExtremeDownloadBridge-current-context1 2022-07-24, 21:21:17
FB2Bridge-current-context1 2022-07-24, 21:21:17
FDroidBridge-current-context1 2022-07-24, 21:21:17
FDroidRepoBridge-current-context1 2022-07-24, 21:21:17
FDroidRepoBridge-current-context2 2022-07-24, 21:21:17
FM4Bridge-current-context1 2022-07-24, 21:21:17
FSecureBlogBridge-current-context1 2022-07-24, 21:21:17
FabriceBellardBridge-current-context1 2022-07-24, 21:21:17
FacebookBridge-current-context1 2022-07-24, 21:21:17
FacebookBridge-current-context2 2022-07-24, 21:21:17
FicbookBridge-current-context1 2022-07-24, 21:21:17
FicbookBridge-current-context2 2022-07-24, 21:21:17
FicbookBridge-current-context3 2022-07-24, 21:21:17
FindACrewBridge-current-context1 2022-07-24, 21:21:17
FirefoxAddonsBridge-current-context1 2022-07-24, 21:21:17
FirstLookMediaTechBridge-current-context1 2022-07-24, 21:21:17
FlaschenpostBridge-current-context1 2022-07-24, 21:21:17
FlashbackBridge-current-context1 2022-07-24, 21:21:17
FlashbackBridge-current-context2 2022-07-24, 21:21:17
FlashbackBridge-current-context3 2022-07-24, 21:21:17
FlashbackBridge-current-context4 2022-07-24, 21:21:17
FlickrBridge-current-context1 2022-07-24, 21:21:17
FlickrBridge-current-context2 2022-07-24, 21:21:17
FlickrBridge-current-context3 2022-07-24, 21:21:17
FolhaDeSaoPauloBridge-current-context1 2022-07-24, 21:21:17
Formula1Bridge-current-context1 2022-07-24, 21:21:17
FourchanBridge-current-context1 2022-07-24, 21:21:17
FreeCodeCampBridge-current-context1 2022-07-24, 21:21:17
FunkBridge-current-context1 2022-07-24, 21:21:17
FurAffinityBridge-current-context1 2022-07-24, 21:21:17
FurAffinityBridge-current-context2 2022-07-24, 21:21:17
FurAffinityBridge-current-context3 2022-07-24, 21:21:17
FurAffinityBridge-current-context4 2022-07-24, 21:21:17
FurAffinityBridge-current-context5 2022-07-24, 21:21:17
FurAffinityBridge-current-context6 2022-07-24, 21:21:17
FurAffinityBridge-current-context7 2022-07-24, 21:21:17
FurAffinityBridge-current-context8 2022-07-24, 21:21:17
FurAffinityUserBridge-current-context1 2022-07-24, 21:21:17
FuturaSciencesBridge-current-context1 2022-07-24, 21:21:17
GBAtempBridge-current-context1 2022-07-24, 21:21:17
GOGBridge-current-context1 2022-07-24, 21:21:17
GQMagazineBridge-current-context1 2022-07-24, 21:21:17
GatesNotesBridge-current-context1 2022-07-24, 21:21:17
GelbooruBridge-current-context1 2022-07-24, 21:21:17
GenshinImpactBridge-current-context1 2022-07-24, 21:21:17
GettrBridge-current-context1 2022-07-24, 21:21:17
GiphyBridge-current-context1 2022-07-24, 21:21:17
GitHubGistBridge-current-context1 2022-07-24, 21:21:17
GiteaBridge-current-context1 2022-07-24, 21:21:17
GiteaBridge-current-context2 2022-07-24, 21:21:17
GiteaBridge-current-context3 2022-07-24, 21:21:17
GiteaBridge-current-context4 2022-07-24, 21:21:17
GiteaBridge-current-context5 2022-07-24, 21:21:17
GiteaBridge-current-context6 2022-07-24, 21:21:17
GiteaBridge-current-context7 2022-07-24, 21:21:17
GithubIssueBridge-current-context1 2022-07-24, 21:21:17
GithubIssueBridge-current-context2 2022-07-24, 21:21:17
GithubSearchBridge-current-context1 2022-07-24, 21:21:17
GithubTrendingBridge-current-context1 2022-07-24, 21:21:17
GitlabIssueBridge-current-context1 2022-07-24, 21:21:17
GitlabIssueBridge-current-context2 2022-07-24, 21:21:17
GizmodoBridge-current-context1 2022-07-24, 21:21:17
GlassdoorBridge-current-context1 2022-07-24, 21:21:17
GlassdoorBridge-current-context2 2022-07-24, 21:21:17
GlowficBridge-current-context1 2022-07-24, 21:21:17
GoComicsBridge-current-context1 2022-07-24, 21:21:17
GogsBridge-current-context1 2022-07-24, 21:21:17
GogsBridge-current-context2 2022-07-24, 21:21:17
GogsBridge-current-context3 2022-07-24, 21:21:17
GogsBridge-current-context4 2022-07-24, 21:21:17
GolemBridge-current-context1 2022-07-24, 21:21:17
GoodreadsBridge-current-context1 2022-07-24, 21:21:17
GoogleGroupsBridge-current-context1 2022-07-24, 21:21:17
GooglePlayStoreBridge-current-context1 2022-07-24, 21:21:17
GoogleSearchBridge-current-context1 2022-07-24, 21:21:17
GrandComicsDatabaseBridge-current-context1 2022-07-24, 21:21:17
HDWallpapersBridge-current-context1 2022-07-24, 21:21:17
HackerNewsUserThreadsBridge-current-context1 2022-07-24, 21:21:17
HardwareInfoBridge-current-context1 2022-07-24, 21:21:17
HashnodeBridge-current-context1 2022-07-24, 21:21:17
HaveIBeenPwnedBridge-current-context1 2022-07-24, 21:21:17
HeiseBridge-current-context1 2022-07-24, 21:21:17
HytaleBridge-current-context1 2022-07-24, 21:21:17
IGNBridge-current-context1 2022-07-24, 21:21:17
IKWYDBridge-current-context1 2022-07-24, 21:21:17
IPBBridge-current-context1 2022-07-24, 21:21:17
IdenticaBridge-current-context1 2022-07-24, 21:21:17
IndeedBridge-current-context1 2022-07-24, 21:21:17
IndiegogoBridge-current-context1 2022-07-24, 21:21:17
IndiegogoBridge-current-context2 2022-07-24, 21:21:17
IndiegogoBridge-current-context3 2022-07-24, 21:21:17
IndiegogoBridge-current-context4 2022-07-24, 21:21:17
InstagramBridge-current-context1 2022-07-24, 21:21:17
InstagramBridge-current-context2 2022-07-24, 21:21:17
InstagramBridge-current-context3 2022-07-24, 21:21:17
InstructablesBridge-current-context1 2022-07-24, 21:21:17
InternetArchiveBridge-current-context1 2022-07-24, 21:21:17
ItchioBridge-current-context1 2022-07-24, 21:21:17
IvooxBridge-current-context1 2022-07-24, 21:21:17
JapanExpoBridge-current-context1 2022-07-24, 21:21:17
JornalDeNoticiasBridge-current-context1 2022-07-24, 21:21:17
JustETFBridge-current-context1 2022-07-24, 21:21:17
JustETFBridge-current-context2 2022-07-24, 21:21:17
KernelBugTrackerBridge-current-context1 2022-07-24, 21:21:17
KhinsiderBridge-current-context1 2022-07-24, 21:21:17
KilledbyGoogleBridge-current-context1 2022-07-24, 21:21:17
KoreusBridge-current-context1 2022-07-24, 21:21:17
KununuBridge-current-context1 2022-07-24, 21:21:17
LWNprevBridge-current-context1 2022-07-24, 21:21:17
LaCentraleBridge-current-context1 2022-07-24, 21:21:17
LaTeX3ProjectNewslettersBridge-current-context1 2022-07-24, 21:21:17
LeBonCoinBridge-current-context1 2022-07-24, 21:21:17
LeMondeInformatiqueBridge-current-context1 2022-07-24, 21:21:17
LegifranceJOBridge-current-context1 2022-07-24, 21:21:17
LegoIdeasBridge-current-context1 2022-07-24, 21:21:17
LesJoiesDuCodeBridge-current-context1 2022-07-24, 21:21:17
ListverseBridge-current-context1 2022-07-24, 21:21:17
Mailman2Bridge-current-context1 2022-07-24, 21:21:17
MallTvBridge-current-context1 2022-07-24, 21:21:17
MangaDexBridge-current-context1 2022-07-24, 21:21:17
MangaDexBridge-current-context2 2022-07-24, 21:21:17
MarktplaatsBridge-current-context1 2022-07-24, 21:21:17
MastodonBridge-current-context1 2022-07-24, 21:21:17
MediapartBlogsBridge-current-context1 2022-07-24, 21:21:17
MediapartBridge-current-context1 2022-07-24, 21:21:17
MixCloudBridge-current-context1 2022-07-24, 21:21:17
ModelKarteiBridge-current-context1 2022-07-24, 21:21:17
MoebooruBridge-current-context1 2022-07-24, 21:21:17
MoinMoinBridge-current-context1 2022-07-24, 21:21:17
MondeDiploBridge-current-context1 2022-07-24, 21:21:17
MozillaBugTrackerBridge-current-context1 2022-07-24, 21:21:17
MozillaSecurityBridge-current-context1 2022-07-24, 21:21:17
MsnMondeBridge-current-context1 2022-07-24, 21:21:17
N26Bridge-current-context1 2022-07-24, 21:21:17
NFLRUSBridge-current-context1 2022-07-24, 21:21:17
NYTBridge-current-context1 2022-07-24, 21:21:17
NasaApodBridge-current-context1 2022-07-24, 21:21:17
NationalGeographicBridge-current-context1 2022-07-24, 21:21:17
NewOnNetflixBridge-current-context1 2022-07-24, 21:21:17
NewgroundsBridge-current-context1 2022-07-24, 21:21:17
NextInpactBridge-current-context1 2022-07-24, 21:21:17
NextgovBridge-current-context1 2022-07-24, 21:21:17
NiceMatinBridge-current-context1 2022-07-24, 21:21:17
NikonDownloadCenterBridge-current-context1 2022-07-24, 21:21:17
NineGagBridge-current-context1 2022-07-24, 21:21:17
NineGagBridge-current-context2 2022-07-24, 21:21:17
NordbayernBridge-current-context1 2022-07-24, 21:21:17
NotAlwaysBridge-current-context1 2022-07-24, 21:21:17
NovayaGazetaEuropeBridge-current-context1 2022-07-24, 21:21:17
NovelUpdatesBridge-current-context1 2022-07-24, 21:21:17
NpciBridge-current-context1 2022-07-24, 21:21:17
NyaaTorrentsBridge-current-context1 2022-07-24, 21:21:17
OnVaSortirBridge-current-context1 2022-07-24, 21:21:17
OpenlyBridge-current-context1 2022-07-24, 21:21:17
OpenlyBridge-current-context2 2022-07-24, 21:21:17
OpenlyBridge-current-context3 2022-07-24, 21:21:17
OpenlyBridge-current-context4 2022-07-24, 21:21:17
OpenlyBridge-current-context5 2022-07-24, 21:21:17
OpenwhydBridge-current-context1 2022-07-24, 21:21:17
OpenwrtSecurityBridge-current-context1 2022-07-24, 21:21:17
OtrkeyFinderBridge-current-context1 2022-07-24, 21:21:17
PCGWNewsBridge-current-context1 2022-07-24, 21:21:17
PanacheDigitalGamesBridge-current-context1 2022-07-24, 21:21:17
PanneauPocketBridge-current-context1 2022-07-24, 21:21:17
ParksOnTheAirBridge-current-context1 2022-07-24, 21:21:17
ParlerBridge-current-context1 2022-07-24, 21:21:17
ParuVenduImmoBridge-current-context1 2022-07-24, 21:21:17
PatreonBridge-current-context1 2022-07-24, 21:21:17
PcGamerBridge-current-context1 2022-07-24, 21:21:17
PhoronixBridge-current-context1 2022-07-24, 21:21:17
PicalaBridge-current-context1 2022-07-24, 21:21:17
PickyWallpapersBridge-current-context1 2022-07-24, 21:21:17
PicukiBridge-current-context1 2022-07-24, 21:21:17
PicukiBridge-current-context2 2022-07-24, 21:21:17
PikabuBridge-current-context1 2022-07-24, 21:21:17
PikabuBridge-current-context2 2022-07-24, 21:21:17
PikabuBridge-current-context3 2022-07-24, 21:21:17
PillowfortBridge-current-context1 2022-07-24, 21:21:17
PirateCommunityBridge-current-context1 2022-07-24, 21:21:17
PixivBridge-current-context1 2022-07-24, 21:21:17
PixivBridge-current-context2 2022-07-24, 21:21:17
PlantUMLReleasesBridge-current-context1 2022-07-24, 21:21:17
PokemonTVBridge-current-context1 2022-07-24, 21:21:17
PornhubBridge-current-context1 2022-07-24, 21:21:17
PresidenciaPTBridge-current-context1 2022-07-24, 21:21:17
RaceDepartmentBridge-current-context1 2022-07-24, 21:21:17
RadioMelodieBridge-current-context1 2022-07-24, 21:21:17
RainbowSixSiegeBridge-current-context1 2022-07-24, 21:21:17
RedditBridge-current-context1 2022-07-24, 21:21:17
RedditBridge-current-context2 2022-07-24, 21:21:17
RedditBridge-current-context3 2022-07-24, 21:21:17
Releases3DSBridge-current-context1 2022-07-24, 21:21:17
ReporterreBridge-current-context1 2022-07-24, 21:21:17
ReutersBridge-current-context1 2022-07-24, 21:21:17
RoadAndTrackBridge-current-context1 2022-07-24, 21:21:17
RobinhoodSnacksBridge-current-context1 2022-07-24, 21:21:17
RoosterTeethBridge-current-context1 2022-07-24, 21:21:17
RtsBridge-current-context1 2022-07-24, 21:21:17
RtsBridge-current-context2 2022-07-24, 21:21:17
Rue89Bridge-current-context1 2022-07-24, 21:21:17
RutubeBridge-current-context1 2022-07-24, 21:21:17
RutubeBridge-current-context2 2022-07-24, 21:21:17
SIMARBridge-current-context1 2022-07-24, 21:21:17
ScmbBridge-current-context1 2022-07-24, 21:21:17
ScoopItBridge-current-context1 2022-07-24, 21:21:17
ScribdBridge-current-context1 2022-07-24, 21:21:17
SensCritiqueBridge-current-context1 2022-07-24, 21:21:17
SeznamZpravyBridge-current-context1 2022-07-24, 21:21:17
ShanaprojectBridge-current-context1 2022-07-24, 21:21:17
SkimfeedBridge-current-context1 2022-07-24, 21:21:17
SkimfeedBridge-current-context2 2022-07-24, 21:21:17
SkimfeedBridge-current-context3 2022-07-24, 21:21:17
SkimfeedBridge-current-context4 2022-07-24, 21:21:17
SlusheBridge-current-context1 2022-07-24, 21:21:17
SlusheBridge-current-context2 2022-07-24, 21:21:17
SlusheBridge-current-context3 2022-07-24, 21:21:17
SoundcloudBridge-current-context1 2022-07-24, 21:21:17
SplCenterBridge-current-context1 2022-07-24, 21:21:17
SpottschauBridge-current-context1 2022-07-24, 21:21:17
StanfordSIRbookreviewBridge-current-context1 2022-07-24, 21:21:17
SteamBridge-current-context1 2022-07-24, 21:21:17
SteamCommunityBridge-current-context1 2022-07-24, 21:21:17
StockFilingsBridge-current-context1 2022-07-24, 21:21:17
StripeAPIChangeLogBridge-current-context1 2022-07-24, 21:21:17
SummitsOnTheAirBridge-current-context1 2022-07-24, 21:21:17
SuperSmashBlogBridge-current-context1 2022-07-24, 21:21:17
SymfonyCastsBridge-current-context1 2022-07-24, 21:21:17
TebeoBridge-current-context1 2022-07-24, 21:21:17
TelegramBridge-current-context1 2022-07-24, 21:21:17
TheFarSideBridge-current-context1 2022-07-24, 21:21:17
TheGuardianBridge-current-context1 2022-07-24, 21:21:17
TheHackerNewsBridge-current-context1 2022-07-24, 21:21:17
ThePirateBayBridge-current-context1 2022-07-24, 21:21:17
TheWhiteboardBridge-current-context1 2022-07-24, 21:21:17
TheYeteeBridge-current-context1 2022-07-24, 21:21:17
TikTokBridge-current-context1 2022-07-24, 21:21:17
TinyLetterBridge-current-context1 2022-07-24, 21:21:17
TorrentGalaxyBridge-current-context1 2022-07-24, 21:21:17
TrelloBridge-current-context1 2022-07-24, 21:21:17
TrelloBridge-current-context2 2022-07-24, 21:21:17
TwitScoopBridge-current-context1 2022-07-24, 21:21:17
TwitchBridge-current-context1 2022-07-24, 21:21:17
TwitterBridge-current-context1 2022-07-24, 21:21:17
TwitterBridge-current-context2 2022-07-24, 21:21:17
TwitterBridge-current-context3 2022-07-24, 21:21:17
TwitterBridge-current-context4 2022-07-24, 21:21:17
TwitterEngineeringBridge-current-context1 2022-07-24, 21:21:17
TwitterV2Bridge-current-context1 2022-07-24, 21:21:17
TwitterV2Bridge-current-context2 2022-07-24, 21:21:17
TwitterV2Bridge-current-context3 2022-07-24, 21:21:17
UberNewsroomBridge-current-context1 2022-07-24, 21:21:17
UnogsBridge-current-context1 2022-07-24, 21:21:17
UnogsBridge-current-context2 2022-07-24, 21:21:17
UnraidCommunityApplicationsBridge-current-context1 2022-07-24, 21:21:17
UnsplashBridge-current-context1 2022-07-24, 21:21:17
UrlebirdBridge-current-context1 2022-07-24, 21:21:17
UsbekEtRicaBridge-current-context1 2022-07-24, 21:21:17
UsenixBridge-current-context1 2022-07-24, 21:21:17
VarietyBridge-current-context1 2022-07-24, 21:21:17
ViadeoCompanyBridge-current-context1 2022-07-24, 21:21:17
ViceBridge-current-context1 2022-07-24, 21:21:17
VieDeMerdeBridge-current-context1 2022-07-24, 21:21:17
VimeoBridge-current-context1 2022-07-24, 21:21:17
VixenBridge-current-context1 2022-07-24, 21:21:17
VkBridge-current-context1 2022-07-24, 21:21:17
WallmineNewsBridge-current-context1 2022-07-24, 21:21:17
WeLiveSecurityBridge-current-context1 2022-07-24, 21:21:17
WebfailBridge-current-context1 2022-07-24, 21:21:17
WikiLeaksBridge-current-context1 2022-07-24, 21:21:17
WikipediaBridge-current-context1 2022-07-24, 21:21:17
WiredBridge-current-context1 2022-07-24, 21:21:17
WordPressBridge-current-context1 2022-07-24, 21:21:17
WordPressMadaraBridge-current-context1 2022-07-24, 21:21:17
WordPressPluginUpdateBridge-current-context1 2022-07-24, 21:21:17
WorldCosplayBridge-current-context1 2022-07-24, 21:21:17
WorldCosplayBridge-current-context2 2022-07-24, 21:21:17
WorldCosplayBridge-current-context3 2022-07-24, 21:21:17
WorldCosplayBridge-current-context4 2022-07-24, 21:21:17
WorldOfTanksBridge-current-context1 2022-07-24, 21:21:17
XenForoBridge-current-context1 2022-07-24, 21:21:17
YGGTorrentBridge-current-context1 2022-07-24, 21:21:17
YandexZenBridge-current-context1 2022-07-24, 21:21:17
YeggiBridge-current-context1 2022-07-24, 21:21:17
YouTubeCommunityTabBridge-current-context1 2022-07-24, 21:21:17
YouTubeCommunityTabBridge-current-context2 2022-07-24, 21:21:17
YoutubeBridge-current-context1 2022-07-24, 21:21:17
YoutubeBridge-current-context2 2022-07-24, 21:21:17
YoutubeBridge-current-context3 2022-07-24, 21:21:17
YoutubeBridge-current-context4 2022-07-24, 21:21:17
YoutubeBridge-current-context5 2022-07-24, 21:21:17
ZDNetBridge-current-context1 2022-07-24, 21:21:17
ZenodoBridge-current-context1 2022-07-24, 21:21:17
ABCNewsBridge-pr-context1 2022-07-24, 21:21:17
AO3Bridge-pr-context1 2022-07-24, 21:21:17
AO3Bridge-pr-context2 2022-07-24, 21:21:17
AO3Bridge-pr-context3 2022-07-24, 21:21:17
ARDMediathekBridge-pr-context1 2022-07-24, 21:21:17
ASRockNewsBridge-pr-context1 2022-07-24, 21:21:17
AcrimedBridge-pr-context1 2022-07-24, 21:21:17
AirBreizhBridge-pr-context1 2022-07-24, 21:21:17
AlbionOnlineBridge-pr-context1 2022-07-24, 21:21:17
AlfaBankByBridge-pr-context1 2022-07-24, 21:21:17
AllocineFRBridge-pr-context1 2022-07-24, 21:21:17
AmazonBridge-pr-context1 2022-07-24, 21:21:17
AmazonPriceTrackerBridge-pr-context1 2022-07-24, 21:21:17
AnidexBridge-pr-context1 2022-07-24, 21:21:17
AnimeUltimeBridge-pr-context1 2022-07-24, 21:21:17
AppleAppStoreBridge-pr-context1 2022-07-24, 21:21:17
AppleMusicBridge-pr-context1 2022-07-24, 21:21:17
ArtStationBridge-pr-context1 2022-07-24, 21:21:17
Arte7Bridge-pr-context1 2022-07-24, 21:21:17
Arte7Bridge-pr-context2 2022-07-24, 21:21:17
AsahiShimbunAJWBridge-pr-context1 2022-07-24, 21:21:17
AskfmBridge-pr-context1 2022-07-24, 21:21:17
AssociatedPressNewsBridge-pr-context1 2022-07-24, 21:21:17
AssociatedPressNewsBridge-pr-context2 2022-07-24, 21:21:17
AstrophysicsDataSystemBridge-pr-context1 2022-07-24, 21:21:17
AtmoNouvelleAquitaineBridge-pr-context1 2022-07-24, 21:21:17
AtmoOccitanieBridge-pr-context1 2022-07-24, 21:21:17
AutoJMBridge-pr-context1 2022-07-24, 21:21:17
AwwwardsBridge-pr-context1 2022-07-24, 21:21:17
BAEBridge-pr-context1 2022-07-24, 21:21:17
BadDragonBridge-pr-context1 2022-07-24, 21:21:17
BadDragonBridge-pr-context2 2022-07-24, 21:21:17
BakaUpdatesMangaReleasesBridge-pr-context1 2022-07-24, 21:21:17
BakaUpdatesMangaReleasesBridge-pr-context2 2022-07-24, 21:21:17
BandcampBridge-pr-context1 2022-07-24, 21:21:17
BandcampBridge-pr-context2 2022-07-24, 21:21:17
BandcampBridge-pr-context3 2022-07-24, 21:21:17
BandcampBridge-pr-context4 2022-07-24, 21:21:17
BandcampDailyBridge-pr-context1 2022-07-24, 21:21:17
BandcampDailyBridge-pr-context2 2022-07-24, 21:21:17
BandcampDailyBridge-pr-context3 2022-07-24, 21:21:17
BandcampDailyBridge-pr-context4 2022-07-24, 21:21:17
BastaBridge-pr-context1 2022-07-24, 21:21:17
BinanceBridge-pr-context1 2022-07-24, 21:21:17
BlaguesDeMerdeBridge-pr-context1 2022-07-24, 21:21:17
BleepingComputerBridge-pr-context1 2022-07-24, 21:21:17
BookMyShowBridge-pr-context1 2022-07-24, 21:21:17
BrutBridge-pr-context1 2022-07-24, 21:21:17
BugzillaBridge-pr-context1 2022-07-24, 21:21:17
BukowskisBridge-pr-context1 2022-07-24, 21:21:17
BundesbankBridge-pr-context1 2022-07-24, 21:21:17
BundestagParteispendenBridge-pr-context1 2022-07-24, 21:21:17
CBCEditorsBlogBridge-pr-context1 2022-07-24, 21:21:17
CNETBridge-pr-context1 2022-07-24, 21:21:17
CVEDetailsBridge-pr-context1 2022-07-24, 21:21:17
CachetBridge-pr-context1 2022-07-24, 21:21:17
CarThrottleBridge-pr-context1 2022-07-24, 21:21:17
CastorusBridge-pr-context1 2022-07-24, 21:21:17
CastorusBridge-pr-context2 2022-07-24, 21:21:17
CastorusBridge-pr-context3 2022-07-24, 21:21:17
CdactionBridge-pr-context1 2022-07-24, 21:21:17
CeskaTelevizeBridge-pr-context1 2022-07-24, 21:21:17
CodebergBridge-pr-context1 2022-07-24, 21:21:17
CodebergBridge-pr-context2 2022-07-24, 21:21:17
CodebergBridge-pr-context3 2022-07-24, 21:21:17
CodebergBridge-pr-context4 2022-07-24, 21:21:17
CodebergBridge-pr-context5 2022-07-24, 21:21:17
CollegeDeFranceBridge-pr-context1 2022-07-24, 21:21:17
ComboiosDePortugalBridge-pr-context1 2022-07-24, 21:21:17
ComicsKingdomBridge-pr-context1 2022-07-24, 21:21:17
CommonDreamsBridge-pr-context1 2022-07-24, 21:21:17
CopieDoubleBridge-pr-context1 2022-07-24, 21:21:17
CourrierInternationalBridge-pr-context1 2022-07-24, 21:21:17
CraigslistBridge-pr-context1 2022-07-24, 21:21:17
CrewbayBridge-pr-context1 2022-07-24, 21:21:17
CryptomeBridge-pr-context1 2022-07-24, 21:21:17
CubariBridge-pr-context1 2022-07-24, 21:21:17
CuriousCatBridge-pr-context1 2022-07-24, 21:21:17
DailymotionBridge-pr-context1 2022-07-24, 21:21:17
DailymotionBridge-pr-context2 2022-07-24, 21:21:17
DailymotionBridge-pr-context3 2022-07-24, 21:21:17
DanbooruBridge-pr-context1 2022-07-24, 21:21:17
DansTonChatBridge-pr-context1 2022-07-24, 21:21:17
DarkReadingBridge-pr-context1 2022-07-24, 21:21:17
DauphineLibereBridge-pr-context1 2022-07-24, 21:21:17
DavesTrailerPageBridge-pr-context1 2022-07-24, 21:21:17
DerpibooruBridge-pr-context1 2022-07-24, 21:21:17
DesoutterBridge-pr-context1 2022-07-24, 21:21:17
DesoutterBridge-pr-context2 2022-07-24, 21:21:17
DevToBridge-pr-context1 2022-07-24, 21:21:17
DeveloppezDotComBridge-pr-context1 2022-07-24, 21:21:17
DiarioDeNoticiasBridge-pr-context1 2022-07-24, 21:21:17
DiarioDoAlentejoBridge-pr-context1 2022-07-24, 21:21:17
DiceBridge-pr-context1 2022-07-24, 21:21:17
DilbertBridge-pr-context1 2022-07-24, 21:21:17
DiscogsBridge-pr-context1 2022-07-24, 21:21:17
DiscogsBridge-pr-context2 2022-07-24, 21:21:17
DiscogsBridge-pr-context3 2022-07-24, 21:21:17
DiscogsBridge-pr-context4 2022-07-24, 21:21:17
DockerHubBridge-pr-context1 2022-07-24, 21:21:17
DockerHubBridge-pr-context2 2022-07-24, 21:21:17
DonnonsBridge-pr-context1 2022-07-24, 21:21:17
DribbbleBridge-pr-context1 2022-07-24, 21:21:17
Drive2ruBridge-pr-context1 2022-07-24, 21:21:17
Drive2ruBridge-pr-context2 2022-07-24, 21:21:17
Drive2ruBridge-pr-context3 2022-07-24, 21:21:17
Drive2ruBridge-pr-context4 2022-07-24, 21:21:17
DuckDuckGoBridge-pr-context1 2022-07-24, 21:21:17
EZTVBridge-pr-context1 2022-07-24, 21:21:17
EconomistBridge-pr-context1 2022-07-24, 21:21:17
EconomistBridge-pr-context2 2022-07-24, 21:21:17
EconomistWorldInBriefBridge-pr-context1 2022-07-24, 21:21:17
EliteDangerousGalnetBridge-pr-context1 2022-07-24, 21:21:17
ElloBridge-pr-context1 2022-07-24, 21:21:17
ElloBridge-pr-context2 2022-07-24, 21:21:17
ElsevierBridge-pr-context1 2022-07-24, 21:21:17
EngadgetBridge-pr-context1 2022-07-24, 21:21:17
EpicgamesBridge-pr-context1 2022-07-24, 21:21:17
EsquerdaNetBridge-pr-context1 2022-07-24, 21:21:17
EstCeQuonMetEnProdBridge-pr-context1 2022-07-24, 21:21:17
EtsyBridge-pr-context1 2022-07-24, 21:21:17
EuronewsBridge-pr-context1 2022-07-24, 21:21:17
ExecuteProgramBridge-pr-context1 2022-07-24, 21:21:17
ExplosmBridge-pr-context1 2022-07-24, 21:21:17
ExtremeDownloadBridge-pr-context1 2022-07-24, 21:21:17
FB2Bridge-pr-context1 2022-07-24, 21:21:17
FDroidBridge-pr-context1 2022-07-24, 21:21:17
FDroidRepoBridge-pr-context1 2022-07-24, 21:21:17
FDroidRepoBridge-pr-context2 2022-07-24, 21:21:17
FM4Bridge-pr-context1 2022-07-24, 21:21:17
FSecureBlogBridge-pr-context1 2022-07-24, 21:21:17
FabriceBellardBridge-pr-context1 2022-07-24, 21:21:17
FacebookBridge-pr-context1 2022-07-24, 21:21:17
FacebookBridge-pr-context2 2022-07-24, 21:21:17
FicbookBridge-pr-context1 2022-07-24, 21:21:17
FicbookBridge-pr-context2 2022-07-24, 21:21:17
FicbookBridge-pr-context3 2022-07-24, 21:21:17
FindACrewBridge-pr-context1 2022-07-24, 21:21:17
FirefoxAddonsBridge-pr-context1 2022-07-24, 21:21:17
FirstLookMediaTechBridge-pr-context1 2022-07-24, 21:21:17
FlaschenpostBridge-pr-context1 2022-07-24, 21:21:17
FlashbackBridge-pr-context1 2022-07-24, 21:21:17
FlashbackBridge-pr-context2 2022-07-24, 21:21:17
FlashbackBridge-pr-context3 2022-07-24, 21:21:17
FlashbackBridge-pr-context4 2022-07-24, 21:21:17
FlickrBridge-pr-context1 2022-07-24, 21:21:17
FlickrBridge-pr-context2 2022-07-24, 21:21:17
FlickrBridge-pr-context3 2022-07-24, 21:21:17
FolhaDeSaoPauloBridge-pr-context1 2022-07-24, 21:21:17
Formula1Bridge-pr-context1 2022-07-24, 21:21:17
FourchanBridge-pr-context1 2022-07-24, 21:21:17
FreeCodeCampBridge-pr-context1 2022-07-24, 21:21:17
FunkBridge-pr-context1 2022-07-24, 21:21:17
FurAffinityBridge-pr-context1 2022-07-24, 21:21:17
FurAffinityBridge-pr-context2 2022-07-24, 21:21:17
FurAffinityBridge-pr-context3 2022-07-24, 21:21:17
FurAffinityBridge-pr-context4 2022-07-24, 21:21:17
FurAffinityBridge-pr-context5 2022-07-24, 21:21:17
FurAffinityBridge-pr-context6 2022-07-24, 21:21:17
FurAffinityBridge-pr-context7 2022-07-24, 21:21:17
FurAffinityBridge-pr-context8 2022-07-24, 21:21:17
FurAffinityUserBridge-pr-context1 2022-07-24, 21:21:17
FuturaSciencesBridge-pr-context1 2022-07-24, 21:21:17
GBAtempBridge-pr-context1 2022-07-24, 21:21:17
GOGBridge-pr-context1 2022-07-24, 21:21:17
GQMagazineBridge-pr-context1 2022-07-24, 21:21:17
GatesNotesBridge-pr-context1 2022-07-24, 21:21:17
GelbooruBridge-pr-context1 2022-07-24, 21:21:17
GenshinImpactBridge-pr-context1 2022-07-24, 21:21:17
GettrBridge-pr-context1 2022-07-24, 21:21:17
GiphyBridge-pr-context1 2022-07-24, 21:21:17
GitHubGistBridge-pr-context1 2022-07-24, 21:21:17
GiteaBridge-pr-context1 2022-07-24, 21:21:17
GiteaBridge-pr-context2 2022-07-24, 21:21:17
GiteaBridge-pr-context3 2022-07-24, 21:21:17
GiteaBridge-pr-context4 2022-07-24, 21:21:17
GiteaBridge-pr-context5 2022-07-24, 21:21:17
GiteaBridge-pr-context6 2022-07-24, 21:21:17
GiteaBridge-pr-context7 2022-07-24, 21:21:17
GithubIssueBridge-pr-context1 2022-07-24, 21:21:17
GithubIssueBridge-pr-context2 2022-07-24, 21:21:17
GithubSearchBridge-pr-context1 2022-07-24, 21:21:17
GithubTrendingBridge-pr-context1 2022-07-24, 21:21:17
GitlabIssueBridge-pr-context1 2022-07-24, 21:21:17
GitlabIssueBridge-pr-context2 2022-07-24, 21:21:17
GizmodoBridge-pr-context1 2022-07-24, 21:21:17
GlassdoorBridge-pr-context1 2022-07-24, 21:21:17
GlassdoorBridge-pr-context2 2022-07-24, 21:21:17
GlowficBridge-pr-context1 2022-07-24, 21:21:17
GoComicsBridge-pr-context1 2022-07-24, 21:21:17
GogsBridge-pr-context1 2022-07-24, 21:21:17
GogsBridge-pr-context2 2022-07-24, 21:21:17
GogsBridge-pr-context3 2022-07-24, 21:21:17
GogsBridge-pr-context4 2022-07-24, 21:21:17
GolemBridge-pr-context1 2022-07-24, 21:21:17
GoodreadsBridge-pr-context1 2022-07-24, 21:21:17
GoogleGroupsBridge-pr-context1 2022-07-24, 21:21:17
GooglePlayStoreBridge-pr-context1 2022-07-24, 21:21:17
GoogleSearchBridge-pr-context1 2022-07-24, 21:21:17
GrandComicsDatabaseBridge-pr-context1 2022-07-24, 21:21:17
HDWallpapersBridge-pr-context1 2022-07-24, 21:21:17
HackerNewsUserThreadsBridge-pr-context1 2022-07-24, 21:21:17
HardwareInfoBridge-pr-context1 2022-07-24, 21:21:17
HashnodeBridge-pr-context1 2022-07-24, 21:21:17
HaveIBeenPwnedBridge-pr-context1 2022-07-24, 21:21:17
HeiseBridge-pr-context1 2022-07-24, 21:21:17
HytaleBridge-pr-context1 2022-07-24, 21:21:17
IGNBridge-pr-context1 2022-07-24, 21:21:17
IKWYDBridge-pr-context1 2022-07-24, 21:21:17
IPBBridge-pr-context1 2022-07-24, 21:21:17
IdenticaBridge-pr-context1 2022-07-24, 21:21:17
IndeedBridge-pr-context1 2022-07-24, 21:21:17
IndiegogoBridge-pr-context1 2022-07-24, 21:21:17
IndiegogoBridge-pr-context2 2022-07-24, 21:21:17
IndiegogoBridge-pr-context3 2022-07-24, 21:21:17
IndiegogoBridge-pr-context4 2022-07-24, 21:21:17
InstagramBridge-pr-context1 2022-07-24, 21:21:17
InstagramBridge-pr-context2 2022-07-24, 21:21:17
InstagramBridge-pr-context3 2022-07-24, 21:21:17
InstructablesBridge-pr-context1 2022-07-24, 21:21:17
InternetArchiveBridge-pr-context1 2022-07-24, 21:21:17
ItchioBridge-pr-context1 2022-07-24, 21:21:17
IvooxBridge-pr-context1 2022-07-24, 21:21:17
JapanExpoBridge-pr-context1 2022-07-24, 21:21:17
JornalDeNoticiasBridge-pr-context1 2022-07-24, 21:21:17
JustETFBridge-pr-context1 2022-07-24, 21:21:17
JustETFBridge-pr-context2 2022-07-24, 21:21:17
KernelBugTrackerBridge-pr-context1 2022-07-24, 21:21:17
KhinsiderBridge-pr-context1 2022-07-24, 21:21:17
KilledbyGoogleBridge-pr-context1 2022-07-24, 21:21:17
KoreusBridge-pr-context1 2022-07-24, 21:21:17
KununuBridge-pr-context1 2022-07-24, 21:21:17
LWNprevBridge-pr-context1 2022-07-24, 21:21:17
LaCentraleBridge-pr-context1 2022-07-24, 21:21:17
LaTeX3ProjectNewslettersBridge-pr-context1 2022-07-24, 21:21:17
LeBonCoinBridge-pr-context1 2022-07-24, 21:21:17
LeMondeInformatiqueBridge-pr-context1 2022-07-24, 21:21:17
LegifranceJOBridge-pr-context1 2022-07-24, 21:21:17
LegoIdeasBridge-pr-context1 2022-07-24, 21:21:17
LesJoiesDuCodeBridge-pr-context1 2022-07-24, 21:21:17
ListverseBridge-pr-context1 2022-07-24, 21:21:17
Mailman2Bridge-pr-context1 2022-07-24, 21:21:17
MallTvBridge-pr-context1 2022-07-24, 21:21:17
MangaDexBridge-pr-context1 2022-07-24, 21:21:17
MangaDexBridge-pr-context2 2022-07-24, 21:21:17
MarktplaatsBridge-pr-context1 2022-07-24, 21:21:17
MastodonBridge-pr-context1 2022-07-24, 21:21:17
MediapartBlogsBridge-pr-context1 2022-07-24, 21:21:17
MediapartBridge-pr-context1 2022-07-24, 21:21:17
MixCloudBridge-pr-context1 2022-07-24, 21:21:17
ModelKarteiBridge-pr-context1 2022-07-24, 21:21:17
MoebooruBridge-pr-context1 2022-07-24, 21:21:17
MoinMoinBridge-pr-context1 2022-07-24, 21:21:17
MondeDiploBridge-pr-context1 2022-07-24, 21:21:17
MozillaBugTrackerBridge-pr-context1 2022-07-24, 21:21:17
MozillaSecurityBridge-pr-context1 2022-07-24, 21:21:17
MsnMondeBridge-pr-context1 2022-07-24, 21:21:17
N26Bridge-pr-context1 2022-07-24, 21:21:17
NFLRUSBridge-pr-context1 2022-07-24, 21:21:17
NYTBridge-pr-context1 2022-07-24, 21:21:17
NasaApodBridge-pr-context1 2022-07-24, 21:21:17
NationalGeographicBridge-pr-context1 2022-07-24, 21:21:17
NewOnNetflixBridge-pr-context1 2022-07-24, 21:21:17
NewgroundsBridge-pr-context1 2022-07-24, 21:21:17
NextInpactBridge-pr-context1 2022-07-24, 21:21:17
NextgovBridge-pr-context1 2022-07-24, 21:21:17
NiceMatinBridge-pr-context1 2022-07-24, 21:21:17
NikonDownloadCenterBridge-pr-context1 2022-07-24, 21:21:17
NineGagBridge-pr-context1 2022-07-24, 21:21:17
NineGagBridge-pr-context2 2022-07-24, 21:21:17
NordbayernBridge-pr-context1 2022-07-24, 21:21:17
NotAlwaysBridge-pr-context1 2022-07-24, 21:21:17
NovayaGazetaEuropeBridge-pr-context1 2022-07-24, 21:21:17
NovelUpdatesBridge-pr-context1 2022-07-24, 21:21:17
NpciBridge-pr-context1 2022-07-24, 21:21:17
NyaaTorrentsBridge-pr-context1 2022-07-24, 21:21:17
OnVaSortirBridge-pr-context1 2022-07-24, 21:21:17
OpenlyBridge-pr-context1 2022-07-24, 21:21:17
OpenlyBridge-pr-context2 2022-07-24, 21:21:17
OpenlyBridge-pr-context3 2022-07-24, 21:21:17
OpenlyBridge-pr-context4 2022-07-24, 21:21:17
OpenlyBridge-pr-context5 2022-07-24, 21:21:17
OpenwhydBridge-pr-context1 2022-07-24, 21:21:17
OpenwrtSecurityBridge-pr-context1 2022-07-24, 21:21:17
OtrkeyFinderBridge-pr-context1 2022-07-24, 21:21:17
PCGWNewsBridge-pr-context1 2022-07-24, 21:21:17
PanacheDigitalGamesBridge-pr-context1 2022-07-24, 21:21:17
PanneauPocketBridge-pr-context1 2022-07-24, 21:21:17
ParksOnTheAirBridge-pr-context1 2022-07-24, 21:21:17
ParlerBridge-pr-context1 2022-07-24, 21:21:17
ParuVenduImmoBridge-pr-context1 2022-07-24, 21:21:17
PatreonBridge-pr-context1 2022-07-24, 21:21:17
PcGamerBridge-pr-context1 2022-07-24, 21:21:17
PhoronixBridge-pr-context1 2022-07-24, 21:21:17
PicalaBridge-pr-context1 2022-07-24, 21:21:17
PickyWallpapersBridge-pr-context1 2022-07-24, 21:21:17
PicukiBridge-pr-context1 2022-07-24, 21:21:17
PicukiBridge-pr-context2 2022-07-24, 21:21:17
PikabuBridge-pr-context1 2022-07-24, 21:21:17
PikabuBridge-pr-context2 2022-07-24, 21:21:17
PikabuBridge-pr-context3 2022-07-24, 21:21:17
PillowfortBridge-pr-context1 2022-07-24, 21:21:17
PirateCommunityBridge-pr-context1 2022-07-24, 21:21:17
PixivBridge-pr-context1 2022-07-24, 21:21:17
PixivBridge-pr-context2 2022-07-24, 21:21:17
PlantUMLReleasesBridge-pr-context1 2022-07-24, 21:21:17
PokemonTVBridge-pr-context1 2022-07-24, 21:21:17
PornhubBridge-pr-context1 2022-07-24, 21:21:17
PresidenciaPTBridge-pr-context1 2022-07-24, 21:21:17
RaceDepartmentBridge-pr-context1 2022-07-24, 21:21:17
RadioMelodieBridge-pr-context1 2022-07-24, 21:21:17
RainbowSixSiegeBridge-pr-context1 2022-07-24, 21:21:17
RedditBridge-pr-context1 2022-07-24, 21:21:17
RedditBridge-pr-context2 2022-07-24, 21:21:17
RedditBridge-pr-context3 2022-07-24, 21:21:17
Releases3DSBridge-pr-context1 2022-07-24, 21:21:17
ReporterreBridge-pr-context1 2022-07-24, 21:21:17
ReutersBridge-pr-context1 2022-07-24, 21:21:17
RoadAndTrackBridge-pr-context1 2022-07-24, 21:21:17
RobinhoodSnacksBridge-pr-context1 2022-07-24, 21:21:17
RoosterTeethBridge-pr-context1 2022-07-24, 21:21:17
RtsBridge-pr-context1 2022-07-24, 21:21:17
RtsBridge-pr-context2 2022-07-24, 21:21:17
Rue89Bridge-pr-context1 2022-07-24, 21:21:17
RutubeBridge-pr-context1 2022-07-24, 21:21:17
RutubeBridge-pr-context2 2022-07-24, 21:21:17
SIMARBridge-pr-context1 2022-07-24, 21:21:17
ScmbBridge-pr-context1 2022-07-24, 21:21:17
ScoopItBridge-pr-context1 2022-07-24, 21:21:17
ScribdBridge-pr-context1 2022-07-24, 21:21:17
SensCritiqueBridge-pr-context1 2022-07-24, 21:21:17
SeznamZpravyBridge-pr-context1 2022-07-24, 21:21:17
ShanaprojectBridge-pr-context1 2022-07-24, 21:21:17
SkimfeedBridge-pr-context1 2022-07-24, 21:21:17
SkimfeedBridge-pr-context2 2022-07-24, 21:21:17
SkimfeedBridge-pr-context3 2022-07-24, 21:21:17
SkimfeedBridge-pr-context4 2022-07-24, 21:21:17
SlusheBridge-pr-context1 2022-07-24, 21:21:17
SlusheBridge-pr-context2 2022-07-24, 21:21:17
SlusheBridge-pr-context3 2022-07-24, 21:21:17
SoundcloudBridge-pr-context1 2022-07-24, 21:21:17
SplCenterBridge-pr-context1 2022-07-24, 21:21:17
SpottschauBridge-pr-context1 2022-07-24, 21:21:17
StanfordSIRbookreviewBridge-pr-context1 2022-07-24, 21:21:17
SteamBridge-pr-context1 2022-07-24, 21:21:17
SteamCommunityBridge-pr-context1 2022-07-24, 21:21:17
StockFilingsBridge-pr-context1 2022-07-24, 21:21:17
StripeAPIChangeLogBridge-pr-context1 2022-07-24, 21:21:17
SummitsOnTheAirBridge-pr-context1 2022-07-24, 21:21:17
SuperSmashBlogBridge-pr-context1 2022-07-24, 21:21:17
SymfonyCastsBridge-pr-context1 2022-07-24, 21:21:17
TebeoBridge-pr-context1 2022-07-24, 21:21:17
TelegramBridge-pr-context1 2022-07-24, 21:21:17
TheFarSideBridge-pr-context1 2022-07-24, 21:21:17
TheGuardianBridge-pr-context1 2022-07-24, 21:21:17
TheHackerNewsBridge-pr-context1 2022-07-24, 21:21:17
ThePirateBayBridge-pr-context1 2022-07-24, 21:21:17
TheWhiteboardBridge-pr-context1 2022-07-24, 21:21:17
TheYeteeBridge-pr-context1 2022-07-24, 21:21:17
TikTokBridge-pr-context1 2022-07-24, 21:21:17
TinyLetterBridge-pr-context1 2022-07-24, 21:21:17
TorrentGalaxyBridge-pr-context1 2022-07-24, 21:21:17
TrelloBridge-pr-context1 2022-07-24, 21:21:17
TrelloBridge-pr-context2 2022-07-24, 21:21:17
TwitScoopBridge-pr-context1 2022-07-24, 21:21:17
TwitchBridge-pr-context1 2022-07-24, 21:21:17
TwitterBridge-pr-context1 2022-07-24, 21:21:17
TwitterBridge-pr-context2 2022-07-24, 21:21:17
TwitterBridge-pr-context3 2022-07-24, 21:21:17
TwitterBridge-pr-context4 2022-07-24, 21:21:17
TwitterEngineeringBridge-pr-context1 2022-07-24, 21:21:17
TwitterV2Bridge-pr-context1 2022-07-24, 21:21:17
TwitterV2Bridge-pr-context2 2022-07-24, 21:21:17
TwitterV2Bridge-pr-context3 2022-07-24, 21:21:17
UberNewsroomBridge-pr-context1 2022-07-24, 21:21:17
UnogsBridge-pr-context1 2022-07-24, 21:21:17
UnogsBridge-pr-context2 2022-07-24, 21:21:17
UnraidCommunityApplicationsBridge-pr-context1 2022-07-24, 21:21:17
UnsplashBridge-pr-context1 2022-07-24, 21:21:17
UrlebirdBridge-pr-context1 2022-07-24, 21:21:17
UsbekEtRicaBridge-pr-context1 2022-07-24, 21:21:17
UsenixBridge-pr-context1 2022-07-24, 21:21:17
VarietyBridge-pr-context1 2022-07-24, 21:21:17
ViadeoCompanyBridge-pr-context1 2022-07-24, 21:21:17
ViceBridge-pr-context1 2022-07-24, 21:21:17
VieDeMerdeBridge-pr-context1 2022-07-24, 21:21:17
VimeoBridge-pr-context1 2022-07-24, 21:21:17
VixenBridge-pr-context1 2022-07-24, 21:21:17
VkBridge-pr-context1 2022-07-24, 21:21:17
WallmineNewsBridge-pr-context1 2022-07-24, 21:21:17
WeLiveSecurityBridge-pr-context1 2022-07-24, 21:21:17
WebfailBridge-pr-context1 2022-07-24, 21:21:17
WikiLeaksBridge-pr-context1 2022-07-24, 21:21:17
WikipediaBridge-pr-context1 2022-07-24, 21:21:17
WiredBridge-pr-context1 2022-07-24, 21:21:17
WordPressBridge-pr-context1 2022-07-24, 21:21:17
WordPressMadaraBridge-pr-context1 2022-07-24, 21:21:17
WordPressPluginUpdateBridge-pr-context1 2022-07-24, 21:21:17
WorldCosplayBridge-pr-context1 2022-07-24, 21:21:17
WorldCosplayBridge-pr-context2 2022-07-24, 21:21:17
WorldCosplayBridge-pr-context3 2022-07-24, 21:21:17
WorldCosplayBridge-pr-context4 2022-07-24, 21:21:17
WorldOfTanksBridge-pr-context1 2022-07-24, 21:21:17
XenForoBridge-pr-context1 2022-07-24, 21:21:17
YGGTorrentBridge-pr-context1 2022-07-24, 21:21:17
YandexZenBridge-pr-context1 2022-07-24, 21:21:17
YeggiBridge-pr-context1 2022-07-24, 21:21:17
YouTubeCommunityTabBridge-pr-context1 2022-07-24, 21:21:17
YouTubeCommunityTabBridge-pr-context2 2022-07-24, 21:21:17
YoutubeBridge-pr-context1 2022-07-24, 21:21:17
YoutubeBridge-pr-context2 2022-07-24, 21:21:17
YoutubeBridge-pr-context3 2022-07-24, 21:21:17
YoutubeBridge-pr-context4 2022-07-24, 21:21:17
YoutubeBridge-pr-context5 2022-07-24, 21:21:17
ZDNetBridge-pr-context1 2022-07-24, 21:21:17
ZenodoBridge-pr-context1 2022-07-24, 21:21:17

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We do not need the PSR-11 interface for now – it will become important once we want to allow library consumers to use their own DI container.

@dvikan
Copy link
Copy Markdown
Contributor

dvikan commented Jul 10, 2022

It's a good pr. Won't merge because of too much introduced complexity and enterprisey logic.

@jtojnar jtojnar changed the title Use DI container to inject ContentFetchers class [no squash] Use DI container to inject ContentFetchers class Jul 24, 2022
@jtojnar jtojnar marked this pull request as ready for review July 24, 2022 15:44
@jtojnar
Copy link
Copy Markdown
Contributor Author

jtojnar commented Jul 24, 2022

I removed the PSR 11 interface and constructors of individual bridges (they can get the ContentsFetcher from BridgeAbstract). I also made sure the individual commits still work (including the old functions as shims and removing them after the the commit automatically generated by Rector).

@dvikan
Copy link
Copy Markdown
Contributor

dvikan commented Jul 24, 2022

Sorry too much complexity. Don't want that container. If were to use a container it's not gonna do autowiring. Also I want to preserve getContents as a function not belonging to an object.

This is just a very stupid DI container that creates requested objects
and passes them dependencies based on typehints of their constructor methods.

In the future, we may want to implement PSR-11 so that consumers of the library
can re-use their own dependency container instead of relying on this one.

https://www.php-fig.org/psr/psr-11/

Use singleton for now, until we can use DI everywhere.
@jtojnar
Copy link
Copy Markdown
Contributor Author

jtojnar commented Jul 24, 2022

Can’t really say I like it but here it is without a container: #2939

jtojnar added 9 commits July 24, 2022 23:12
In the future, we will inject it a Cache instance.
So that the lines do not overflow once we apply the refactoring.
They need to be regular methods to have access fetcher property we are going to add next.
So that bridges do not need to inject it themselves and we do not need to use global functions.
So that we do not need to use global functions.
```
$ composer require --dev rector/rector

$ vendor/bin/rector --version
Rector 0.13.9

$ echo > rector.php '<?php

declare(strict_types=1);

namespace Rules {
    use PhpParser\Node;
    use PhpParser\Node\Expr\FuncCall;
    use PhpParser\Node\Expr\MethodCall;
    use PhpParser\Node\Expr\PropertyFetch;
    use PhpParser\Node\Expr\Variable;
    use PhpParser\Node\Identifier;
    use PhpParser\Node\Name;
    use PhpParser\Node\Stmt\Class_;
    use PHPStan\Type\ObjectType;
    use Rector\Core\Exception\ShouldNotHappenException;
    use Rector\Core\NodeManipulator\ClassDependencyManipulator;
    use Rector\Core\Rector\AbstractRector;
    use Rector\NodeTypeResolver\Node\AttributeKey;
    use Rector\PostRector\Collector\PropertyToAddCollector;
    use Rector\PostRector\ValueObject\PropertyMetadata;
    use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;

    // Rector seems to re-import the file for some reason.
    if (!class_exists(RenameContentsFunctions::class)) {
        class RenameContentsFunctions extends AbstractRector
        {
            private const FUNCTIONS_TO_RENAME = [
                "getContents",
                "getSimpleHTMLDOM",
                "getSimpleHTMLDOMCached",
            ];

            private const FETCHER_PROPERTY_NAME = "fetcher";

            public function __construct(
                private readonly ClassDependencyManipulator $classDependencyManipulator,
                private readonly PropertyToAddCollector $propertyToAddCollector,
            ) {
            }

            public function getRuleDefinition(): RuleDefinition
            {
                return new RuleDefinition("Updates references to contents functions.", []);
            }

            /**
             * @return array<class-string<Node>>
             */
            public function getNodeTypes(): array
            {
                return [FuncCall::class];
            }

            /**
             * @param FuncCall $node
             */
            public function refactor(Node $node): ?Node
            {
                foreach (self::FUNCTIONS_TO_RENAME as $function) {
                    if (! $this->isName($node, $function)) {
                        continue;
                    }

                    // not to refactor here
                    $isVirtual = (bool) $node->name->getAttribute(AttributeKey::VIRTUAL_NODE);
                    if ($isVirtual) {
                        continue;
                    }

                    // $this->addFetcherInjection($node);
                    $fetcher = new PropertyFetch(new Variable("this"), new Identifier(self::FETCHER_PROPERTY_NAME));
                    return new MethodCall($fetcher, $function, $node->args);
                }

                return null;
            }

            private function addFetcherInjection(Node $node): void
            {
                $class = $this->betterNodeFinder->findParentType($node, Class_::class);
                if (! $class instanceof Class_) {
                    throw new ShouldNotHappenException();
                }

                $propertyMetadata = new PropertyMetadata(self::FETCHER_PROPERTY_NAME, new ObjectType("Fetcher"), Class_::MODIFIER_PRIVATE);
                $this->propertyToAddCollector->addPropertyToClass($class, $propertyMetadata);
                $this->classDependencyManipulator->addConstructorDependency($class, $propertyMetadata);
            }
        }
    }
}

namespace {
    use Rector\Config\RectorConfig;

    return static function (RectorConfig $rectorConfig): void {
        $rectorConfig->paths([
            __DIR__ . "/actions",
            __DIR__ . "/bridges",
            __DIR__ . "/caches",
            __DIR__ . "/formats",
            __DIR__ . "/lib",
        ]);

        $rectorConfig->rule(Rules\RenameContentsFunctions::class);
    };
}'

$ vendor/bin/rector
```
Rector tends to squash function call arguments to a single line but since there is a lot of arguments, it violates line length limit of our coding style. PHP CodeSniffer should be wise enough to split the arguments one-per-line but unfortunately it does not so let’s restore the original format manually.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants