Files
sublogue/__pycache__/app.cpython-313.pyc
T

133 lines
21 KiB
Plaintext
Raw Normal View History

2026-01-17 21:49:22 +13:00
ó
RžeißIãóSrSSKJrJrJr SSKJr SSKrSSKrSSK J r SSK
J r SSK J
r
SSKJr SS KJr SS
KJr SS KJr SS KJr SSKr\R2"\R4S
S9 \R6"\5r\"\5r\"\5 \
"5r\"5r Sq!Sq"Sq#/SSS.r$Sr%Sr&\&"5 \%"5 \ROSS/S9S5r(\ROSS/S9S5r)\ROSS/S9S5r*\ROSS/S9S5r+\ROSS/S9S5r,\ROSS/S9S 5r-\ROS!S/S9S"5r.\ROS#S/S9S$5r/\ROS%S/S9S&5r0\ROS'S/S9S(5r1\ROS)S/S9S*5r2\ROS+S/S9S,5r3\ROS-5S.5r4\S/:Xa#\RkS05 \RmS1S2S3S49 gg)5z>
SubPlotter Flask API Server
Main entry point for the backend
é)ÚFlaskÚrequestÚjsonify)ÚCORSN)Údatetime)ÚPath)Ú
ConfigManager)Ú
OMDbClient)Ú
TMDbClient)ÚSubtitleProcessor)Ú FileScanner)ÚDatabaseManagerz)%(asctime)s - %(levelname)s - %(message)s)ÚlevelÚformatF)ÚfilesÚscanningÚ last_scancóz[RSS5nU(d[RSS5nU(d[RSS5n[RSS5nU(a$[ U[S9q[ RS5 O[ RS5 U(a$[U[S9q
[ RS5 O[ RS 5 [
(d [(a*[[
[5q [ RS
5 g [ RS 5 g )
zAInitialize OMDb, TMDb clients and processor with current API keysÚ omdb_api_keyÚÚapi_keyÚ tmdb_api_key)Ú
db_managerz+OMDb client initialized with usage trackingzNo OMDb API key configuredz+TMDb client initialized with usage trackingzNo TMDb API key configuredzProcessor initializedzNo API keys configuredN)
ÚdbÚ get_settingÚconfigÚgetr
Ú omdb_clientÚloggerÚinfoÚwarningr Ú tmdb_clientr Ú processor)Úomdb_keyÚtmdb_keys Ú C:\Users\Matt\subtitleapp\app.pyÚinitialize_clientsr'.ô
~‰~˜n¨bÓ1€HÞ ä—>> )¨RÓ0ˆÞ Ü—:‘:˜i¨Óô~‰~˜n¨bÓ1€HöÜ  ´bÑ Ü ÐÐÜ  ´bÑ Ü Ð Ð‚{—k’kÜ%¤k´;Ó?ˆ Ü ÐÐcót[R5nU(dm[RS5 [R 5nUR
5Hup#[RX#5 M [RS5 gg![a"n[RSU35 SnAgSnAff=f)z+Migrate settings from JSON file to databasez/Migrating settings from config file to databasezSettings migration completezError migrating settings: N)
rÚget_all_settingsrr rÚget_allÚitemsÚ set_settingÚ ExceptionÚerror)Ú db_settingsÚ
file_settingsÚkeyÚvalueÚes r&Úmigrate_settingsr5Ssð × öÜ K‰KÐ "ŸN™NÓ,ˆ+×3
ܘsÖ K‰KÐ øô ó Ð1°!°Ð6ûð7úsBB Â
B7ÂB2Â2B7z
/api/settingsÚGET)Úmethodscóú[R5nSU;aURSS5US'SU;aSUS'SU;aSUS'SU;aSUS'SU;aS US'S
U;aS US
'S U;aS
US '[U5$)z Get current application settingsrrrrÚdefault_directoryÚdurationé(Úpreferred_sourceÚomdbÚinsertion_positionÚendÚstrip_keywordsT)rr*rr)Úsettingss r&Ú get_settingsrBkô×$€Hð˜%à#+§<¡<° ¸2Ó#>ˆÑ ؘXÓ%Ø#%ˆÑ Ø (Ó*Ø(*ˆÐ˜ÓÑØ Ó)Ø'-ˆÐ +Ø).ˆÐ˜'Ø%)ˆÐ  Ðr(ÚPOSTcóø[RnSU;a[RSUS5 SU;a[RSUS5 SU;a[RSUS5 SU;a[RSUS5 SU;a"[RS[ US55 SU;a[RSUS5 SU;a[RSUS5 SU;a"[RS[ US55 [
5 [S S
S .5$![a;n[RS U35 [S
[U5S.5S4sSnA$SnAff=f)zUpdate application settingsrrrr9r:r<r>r@TzSettings saved successfully)ÚsuccessÚmessagezError updating settings: F©rEr/éôN) rÚjsonrr-ÚintÚboolr'rr.rr/Ústr)Údatar4s r&Úupdate_settingsrNsgð#Ü|‰|ˆð ˜TÓ N‰N˜>¨4°Ñ+?Ô ˜ N‰N˜>¨4°Ñ+?Ô ˜Ó ä N‰N˜>¨4° ©?Ô   N‰NÐÐ5HÑ0IÔ ˜Ó Ü N‰N˜:¤s¨4°
Ñ+;Ó'<Ô  Ó N‰NÐ-¨tÐ4FÑ/GÔ   N‰NÐÐ6JÑ1KÔ ˜tÓ N‰NÐ+¬T°$Ð7GÑ2HÓ-IÔ  Ô䨨
ó ð øô
óÜ Ð°ÐØÜ˜“Vñ
ó ð
ðõ ûðúsD1D4Ä4
E9Ä>0E4Å.E9Å4E9z/api/scan/startcóÆ[RnURS[R SS55nU(d[ SSS.5S4$S[ S '[R"5n/n[R"U5HnURU5 M [[R"5U-
S
-5n[S U55n[RU[U5UUS 9 U[ S
'S[ S '[R "5R#5[ S'[ S[U5US.5$![$aDnS[ S '[&R)SU35 [ S[+U5S.5S4sSnA$SnAf[,aDnS[ S '[&R)SU35 [ S[+U5S.5S4sSnA$SnAff=f)z&Start scanning directory for SRT filesÚ directoryr9rFzNo directory specifiedrGéTrc3óV# UHoRSS5(dMSv M! g7f)Úhas_plotFéN)r)Ú.0Úfs r&Ú <genexpr>Ústart_scan.<locals>.<genexpr>ÊséРA·%±%¸
ÀE×2JŸa™aªùs)  ))rPÚ files_foundÚfiles_with_plotÚscan_duration_msrr)rEÚcountrzInvalid directory: Nz Scan error: rH)rrIrrrrÚ
scan_stateÚtimer
Úscan_directoryÚextendrJÚsumÚadd_scan_historyÚlenrÚnowÚ isoformatÚ
ValueErrorrr/rLr.)rMrPÚ
start_timerÚbatchr[rZr4s r&Ú
start_scanri¯ð;Ü|‰|ˆØ—HH˜[¬"¯.©.Ð9LÈbÓ*QÓRˆ æÜØ Øóððð
ð "&Œ
Ü—YY“[ˆ
ðˆÜ ×/° Ö:ˆEØ L‰L˜Ö ñ¤§ ¢ £ ¨jÑ 8¸DÑôÑÓô ×ÑØÜ˜E›
Ø ñ
ð
Ø!&Œ
Ü"*§,¢,£.×":Ñ":Ó"<Œ
äØÜ˜“ZØñ
ó ð øô óØ!&Œ
Ü Ð*¨1¨#ÐØÜ˜“Vñ
ó ð
ðõ ûô
óØ!&Œ
Ü | A ØÜ˜“Vñ
ó ð
ðõ ûðús7A EÁC6EÅ
G Å9FÆ G Æ
G Æ9GÇG ÇG z/api/scan/statuscól[[S[S[[S5[SS.5$)z#Get current scan status and resultsrrr)rrÚ
file_countr)rr]rc©r(r&Úget_scan_statusrmðs;ô ܘzÑ  Ñœ* WјGÑó ðr(z /api/searchcóR^[RnURSS5R5nU(d[ SSS.5S4$[
(d[ (d[ SSS.5S4$/n[
(a'SS KmSS KnU4S
jnUR"U"U55n[ S US
.5$![a"n[RS U35 S nAN5S nAff=f![a;n[RSU35 [ S[U5S.5S4sS nA$S nAff=f)z'Search for title matches from OMDb/TMDbÚqueryrFzNo search query providedrGrQzAPI not configuredrNcó4># [RUSS.nT R5IShvN nUR[RUS9IShvN nUR
S:XGaUR
5IShvN nURS5S:XGabURS/5n/nUSSGH n[RURS 5S
S .nUR[RUS9IShvN n U R
S:XU R
5IShvN n
U
RS5S:Xa…URU
RS 5U
RS
5U
RSS5U
RSS5U
RSS5U
RS5U
RS5S.5 SSS5IShvN GM# UsSSS5IShvN sSSS5IShvN $/sSSS5IShvN sSSS5IShvN $GGGGN-GNN`!,IShvN (df  GM—=fNgNXNGN8!,IShvN (df  O=fSSS5IShvN g!,IShvN (df  g=f7f)movie)ÚapikeyÚtype)ÚparamséÈÚResponseÚTrueÚSearchéÚimdbIDÚshort)rrÚplotÚTitleÚYearÚPlotzNo plot availableÚRuntimezN/AÚ
imdbRatingÚTypeÚPoster)ÚtitleÚyearr~ÚruntimeÚ imdb_ratingÚ
media_typeÚposter)rrÚ
ClientSessionrÚBASE_URLÚstatusrIÚappend) r†ruÚsessionÚresprMÚsearch_resultsÚdetailed_resultsÚitemÚ
detail_paramsÚ detail_respÚ detail_dataÚaiohttps €r&Ú omdb_searchÚ!search_title.<locals>.omdb_searchsøéä"-×"5Ñ"5Ø"Ø 'ñ '×4×6¸'Ø#*§;¡;¬{×/CÑ/CÈF ;×#SÑ#SÐW[Ø#Ÿ{™{¨cÔ1Ø-1¯Y©Y«[×'8 Ø#'§8¡8¨JÓ#7¸6Ô#AØ59·X±X¸Ó5K Nà79Ð$4Ø0>¸Ô0B¨ä6A×6IÑ6IØ15·±¸(Ó1CØ4;ñ9*¨
ð
4;·;±;¼{×?SÑ?SÐ\i°;×3jÑ3jÐnyØ/:×/AÑ/AÀSÓ/HØDO×DTÑDTÓDV×>V° Ø3>·?±?À:Ó3NÐRXÓ3XØ4D×4KÑ4KØALÇÁÐQXÓAYØ@KÇÁÐPVÓ@WØ@KÇÁÐPVÐXkÓ@lØCNÇ?Á?ÐS\Ð^cÓCdØGRÇÁÐWcÐejÓGkØFQÇoÁoÐV\ÓF]ØBMÇ/Á/ÐRZÓB[ñM57÷ 4k×3jÒ3jñ
1Cð&,<÷5$T×#SÐ#S÷ 7×6ð8$&÷7$T×#SÐ#S÷ 7×6Ú#Sâ'8ò4kâ>V÷4k×3j×3jÒ3júñ$Tñ 7Ù#Sñ 7ß#S×#SÖ#Sú÷ 7×6×6×6×6üsBƒ)J¬H­J°#I>ÁH ÁI>Á%IÁ<H#Á=A<IÃ9H& Ã:IÃ=$H. Ä!H) Ä"BH. Ç IÇ H,
Ç
IÇ I>Ç"I
Ç#I>Ç' JÇ3I Ç4JÇ9IÇ: I>ÈIÈI>È JÈIÈJÈ I>È#IÈ&IÈ)H. È,IÈ.I
È4H7È5 I
É IÉ
I>É JÉI>ÉJÉI) ÉIÉ I) É%I>É, JÉ7I:É8JÉ>JÊJ Ê JÊJzError searching OMDb: T)rEÚresultszSearch error: rH)rrIrÚstriprrr"r˜ÚasyncioÚrunr.rr/rL)rMrorrr™r4r˜s @r&Ú search_titlerŸýs<ø€ðKÜ|‰|ˆØ˜ "ӿܨ Øóððð
÷
Š{§;¢;ÜØ Øóððð
ð ˆß Š;ð,
Ûõ#&ðJ"Ÿ+š+¡k°%Ó&8Ó9ô
ØØñ
ó ð øôó
 Ð5°a°SÐ:ûð
;ûô óÜ ~ a SÐØÜ˜“Vñ
ó ð
ðõ ûðúsTƒAC!Á
%C!Á0
C!Á>&B2Â$
C!Â2
CÂ<CÃC!ÃCÃC!Ã!
D&Ã+0D!ÄD&Ä!D&z /api/processc ó[RnURS/5nURS[R SS55nU(d[ SSS.5S4$[ (a [(d[ SSS.5S4$[R[U5S 9n/nS
nS
nUGHsn[R"[RXr55nUS (aUS -
nOUS -
n[RUUUS URS
S5[URS5[5(aURSS5OSURSS5US9 UR!UUS URS
S5URSS5URS5S.5 ["SHhn U SU:XdMURS
S5U S
'[URS5[5(aURSS5OSU S'US U S' GMq GMv [R+X5U5 [ SUUS.5$![$ann
US -
n[&R)SUSU
35 [RUUSSS[U
5US9 UR!USSS[U
5S.5 Sn
A
GMSn
A
ff=f![$a;n