/
dlgImgSelect.vb
1282 lines (1120 loc) · 57.5 KB
/
dlgImgSelect.vb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
' ################################################################################
' # EMBER MEDIA MANAGER #
' ################################################################################
' ################################################################################
' # This file is part of Ember Media Manager. #
' # #
' # Ember Media Manager is free software: you can redistribute it and/or modify #
' # it under the terms of the GNU General Public License as published by #
' # the Free Software Foundation, either version 3 of the License, or #
' # (at your option) any later version. #
' # #
' # Ember Media Manager is distributed in the hope that it will be useful, #
' # but WITHOUT ANY WARRANTY; without even the implied warranty of #
' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
' # GNU General Public License for more details. #
' # #
' # You should have received a copy of the GNU General Public License #
' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. #
' ################################################################################
Imports System.IO
Imports System.IO.Compression
Imports System.Text
Imports System.Text.RegularExpressions
Imports EmberAPI
Public Class dlgImgSelect
#Region "Fields"
Public IMDBURL As String
Friend WithEvents bwIMPADownload As New System.ComponentModel.BackgroundWorker
Friend WithEvents bwMPDBDownload As New System.ComponentModel.BackgroundWorker
Friend WithEvents bwTMDBDownload As New System.ComponentModel.BackgroundWorker
Private CachePath As String = String.Empty
Private chkImage() As CheckBox
Private DLType As Enums.ImageType
Private ETHashes As New List(Of String)
Private iCounter As Integer = 0
Private iLeft As Integer = 5
Private IMPA As New IMPA.Scraper
Private IMPAPosters As New List(Of MediaContainers.Image)
Private isEdit As Boolean = False
Private isShown As Boolean = False
Private iTop As Integer = 5
Private lblImage() As Label
Private MPDB As New MPDB.Scraper
Private MPDBPosters As New List(Of MediaContainers.Image)
Private noImages As Boolean = False
Private pbImage() As PictureBox
Private pnlImage() As Panel
Private PreDL As Boolean = False
Private Results As New Containers.ImgResult
Private selIndex As Integer = -1
Private TMDB As New TMDB.Scraper
Private TMDBPosters As New List(Of MediaContainers.Image)
Private tMovie As New Structures.DBMovie
Private tmpImage As New Images
Private _impaDone As Boolean = True
Private _mpdbDone As Boolean = True
Private _tmdbDone As Boolean = True
#End Region 'Fields
#Region "Events"
Private Event IMPADone()
Private Event MPDBDone()
Private Event TMDBDone()
#End Region 'Events
#Region "Methods"
Public Sub PreLoad(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False)
Me.tMovie = mMovie
Me.DLType = _DLType
Me.isEdit = _isEdit
Me.PreDL = True
Me.SetUp()
Me.StartDownload()
End Sub
Public Overloads Function ShowDialog(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) As Containers.ImgResult
'//
' Overload to pass data
'\\
Me.tMovie = mMovie
Me.DLType = _DLType
Me.isEdit = _isEdit
Me.isShown = True
MyBase.ShowDialog()
Return Results
End Function
Public Overloads Function ShowDialog() As Containers.ImgResult
Me.isShown = True
MyBase.ShowDialog()
Return Results
End Function
'Rewrite to simplify
Private Sub AddImage(ByVal iImage As Image, ByVal sDescription As String, ByVal iIndex As Integer, ByVal sURL As String, ByVal isChecked As Boolean, poster As MediaContainers.Image)
Try
ReDim Preserve Me.pnlImage(iIndex)
ReDim Preserve Me.pbImage(iIndex)
Me.pnlImage(iIndex) = New Panel()
Me.pbImage(iIndex) = New PictureBox()
Me.pbImage(iIndex).Name = iIndex.ToString
Me.pnlImage(iIndex).Name = iIndex.ToString
Me.pnlImage(iIndex).Size = New Size(256, 286)
Me.pbImage(iIndex).Size = New Size(250, 250)
Me.pnlImage(iIndex).BackColor = Color.White
Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle
Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom
Me.pnlImage(iIndex).Tag = poster
Me.pbImage(iIndex).Tag = poster
Me.pbImage(iIndex).Image = iImage
Me.pnlImage(iIndex).Left = iLeft
Me.pbImage(iIndex).Left = 3
Me.pnlImage(iIndex).Top = iTop
Me.pbImage(iIndex).Top = 3
Me.pnlBG.Controls.Add(Me.pnlImage(iIndex))
Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex))
Me.pnlImage(iIndex).BringToFront()
AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click
AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick
AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click
AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent
AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent
If Me.DLType = Enums.ImageType.Fanart Then
ReDim Preserve Me.chkImage(iIndex)
Me.chkImage(iIndex) = New CheckBox()
Me.chkImage(iIndex).Name = iIndex.ToString
Me.chkImage(iIndex).Size = New Size(250, 30)
Me.chkImage(iIndex).AutoSize = False
Me.chkImage(iIndex).BackColor = Color.White
Me.chkImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter
Me.chkImage(iIndex).Text = Master.eLang.GetString(55, "Multiple")
'Me.chkImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription)
Me.chkImage(iIndex).Left = 0
Me.chkImage(iIndex).Top = 250
Me.chkImage(iIndex).Checked = isChecked
Me.pnlImage(iIndex).Controls.Add(Me.chkImage(iIndex))
AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent
Else
ReDim Preserve Me.lblImage(iIndex)
Me.lblImage(iIndex) = New Label()
Me.lblImage(iIndex).Name = iIndex.ToString
Me.lblImage(iIndex).Size = New Size(250, 30)
Me.lblImage(iIndex).AutoSize = False
Me.lblImage(iIndex).BackColor = Color.White
Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter
If IsTMDBURL(sURL) Then
Me.lblImage(iIndex).Text = Master.eLang.GetString(55, "Multiple")
Else
Me.lblImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription)
End If
Me.lblImage(iIndex).Tag = poster
Me.lblImage(iIndex).Left = 0
Me.lblImage(iIndex).Top = 250
Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex))
AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click
AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent
End If
Catch ex As Exception
Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error")
End Try
Me.iCounter += 1
If Me.iCounter = 3 Then
Me.iCounter = 0
Me.iLeft = 5
Me.iTop += 301
Else
Me.iLeft += 271
End If
End Sub
Private Sub AllDoneDownloading()
If Me._impaDone AndAlso Me._tmdbDone AndAlso Me._mpdbDone Then
Me.pnlDLStatus.Visible = False
Me.TMDBPosters.AddRange(Me.IMPAPosters)
Me.TMDBPosters.AddRange(Me.MPDBPosters)
Me.ProcessPics(Me.TMDBPosters)
Me.pnlBG.Visible = True
End If
End Sub
Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click
PreviewImage()
End Sub
Private Sub PreviewImage()
Try
Dim tImage As New Images
Me.pnlSinglePic.Visible = True
Application.DoEvents()
Select Case True
Case rbXLarge.Checked
If Master.eSettings.UseImgCache Then
tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg")))
Else
tImage.FromWeb(Me.rbXLarge.Tag.ToString)
End If
Case rbLarge.Checked
If Master.eSettings.UseImgCache Then
tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg")))
Else
tImage.FromWeb(Me.rbLarge.Tag.ToString)
End If
Case rbMedium.Checked
If Master.eSettings.UseImgCache Then
tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(cover)_(url=", Me.rbMedium.Tag, ").jpg")))
Else
tImage.FromWeb(Me.rbMedium.Tag.ToString)
End If
Case rbSmall.Checked
If Master.eSettings.UseImgCache Then
tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg")))
Else
tImage.FromWeb(Me.rbSmall.Tag.ToString)
End If
End Select
Me.pnlSinglePic.Visible = False
If Not IsNothing(tImage.Image) Then
ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage.Image)
End If
tImage.Dispose()
tImage = Nothing
Catch ex As Exception
Me.pnlSinglePic.Visible = False
Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error")
End Try
End Sub
Private Sub bwIMPADownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPADownload.DoWork
'//
' Thread to download impa posters from the internet (multi-threaded because sometimes
' the web server is slow to respond or not reachable, hanging the GUI)
'\\
For i As Integer = 0 To Me.IMPAPosters.Count - 1
If bwIMPADownload.CancellationPending Then
e.Cancel = True
Return
End If
Me.bwIMPADownload.ReportProgress(i + 1, Me.IMPAPosters.Item(i).URL)
Try
Me.IMPAPosters.Item(i).WebImage.FromWeb(Me.IMPAPosters.Item(i).URL)
If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMPAPosters.Item(i).URL)
If Master.eSettings.UseImgCache Then
Try
Me.IMPAPosters.Item(i).URL = StringUtils.CleanURL(Me.IMPAPosters.Item(i).URL)
Me.IMPAPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMPAPosters.Item(i).Description, ")_(url=", Me.IMPAPosters.Item(i).URL, ").jpg")))
Catch
End Try
End If
Catch
End Try
Next
End Sub
Private Sub bwIMPADownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPADownload.ProgressChanged
'//
' Update the status bar with the name of the current media name and increase progress bar
'\\
Try
Dim sStatus As String = e.UserState.ToString
Me.lblDL2Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus))
Me.pbDL2.Value = e.ProgressPercentage
Catch ex As Exception
Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error")
End Try
End Sub
Private Sub bwIMPADownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPADownload.RunWorkerCompleted
'//
' Thread finished: process the pics
'\\
If Not e.Cancelled Then
Me._impaDone = True
RaiseEvent IMPADone()
End If
End Sub
Private Sub bwMPDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDBDownload.DoWork
'//
' Thread to download mpdb posters from the internet (multi-threaded because sometimes
' the web server is slow to respond or not reachable, hanging the GUI)
'\\
For i As Integer = 0 To Me.MPDBPosters.Count - 1
Try
If Me.bwMPDBDownload.CancellationPending Then
e.Cancel = True
Return
End If
Me.bwMPDBDownload.ReportProgress(i + 1, Me.MPDBPosters.Item(i).URL)
Try
Me.MPDBPosters.Item(i).WebImage.FromWeb(Me.MPDBPosters.Item(i).URL)
If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.MPDBPosters.Item(i).URL)
If Master.eSettings.UseImgCache Then
Try
Me.MPDBPosters.Item(i).URL = StringUtils.CleanURL(Me.MPDBPosters.Item(i).URL)
Me.MPDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.MPDBPosters.Item(i).Description, ")_(url=", Me.MPDBPosters.Item(i).URL, ").jpg")))
Catch
End Try
End If
Catch
End Try
Catch
End Try
Next
End Sub
Private Sub bwMPDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDBDownload.ProgressChanged
'//
' Update the status bar with the name of the current media name and increase progress bar
'\\
Try
Dim sStatus As String = e.UserState.ToString
Me.lblDL3Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus))
Me.pbDL3.Value = e.ProgressPercentage
Catch ex As Exception
Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error")
End Try
End Sub
Private Sub bwMPDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDBDownload.RunWorkerCompleted
'//
' Thread finished: process the pics
'\\
If Not e.Cancelled Then
Me._mpdbDone = True
RaiseEvent MPDBDone()
End If
End Sub
Private Sub bwTMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBDownload.DoWork
'//
' Thread to download tmdb posters from the internet (multi-threaded because sometimes
' the web server is slow to respond or not reachable, hanging the GUI)
'\\
Dim thumbLink As String = String.Empty
Dim savePath As String = String.Empty
'Only download the posters themselves that match the cover criteria for display purposes, no need to download them all.
Dim posters As MediaContainers.Image()
If Me.DLType = Enums.ImageType.Fanart Then
posters = TMDBPosters.Where(Function(s) s.Description = "thumb").ToArray()
Else
posters = TMDBPosters.Where(Function(s) s.Description = "cover").ToArray()
End If
Dim percent = 100 / posters.Count
For i As Integer = 0 To posters.Count - 1
Try
If Me.DLType = Enums.ImageType.Fanart OrElse (Master.eSettings.UseImgCache OrElse (posters(i).Description = "cover" OrElse Master.eSettings.PosterPrefSizeOnly)) Then
If Me.bwTMDBDownload.CancellationPending Then
e.Cancel = True
Return
End If
Me.bwTMDBDownload.ReportProgress(Convert.ToInt32((i + 1) * percent), posters(i).URL)
Try
posters(i).WebImage.FromWeb(posters(i).URL)
If Not Master.eSettings.NoSaveImagesToNfo Then
If Me.DLType = Enums.ImageType.Fanart Then
If Not posters(i).URL.Contains("-thumb.") Then
Me.Results.Fanart.URL = GetServerURL(posters(i).URL) ' "http://images.themoviedb.org"
thumbLink = RemoveServerURL(posters(i).URL)
'If thumbLink.Contains("_poster.") Then
thumbLink = thumbLink.Replace("-poster.", "-thumb.")
thumbLink = thumbLink.Replace("-original.", "-thumb.")
''Else
'thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "-thumb")
'End If
Me.Results.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = posters(i).URL.Replace("http://images.themoviedb.org", String.Empty)})
End If
Else
Me.Results.Posters.Add(posters(i).URL)
End If
End If
If Master.eSettings.UseImgCache OrElse Master.eSettings.AutoET Then
Try
posters(i).URL = Me.CleanTMDBURL(posters(i).URL)
savePath = Path.Combine(CachePath, String.Concat(If(Me.DLType = Enums.ImageType.Fanart, "fanart_(", "poster_("), posters(i).Description, ")_(url=", posters(i).URL, ").jpg"))
posters(i).WebImage.Save(savePath)
If Master.eSettings.AutoET Then
Dim tSize As New Enums.FanartSize
Select Case posters(i).Description.ToLower
Case "original"
tSize = Enums.FanartSize.Lrg
Case "mid"
tSize = Enums.FanartSize.Mid
Case "thumb"
tSize = Enums.FanartSize.Small
End Select
If Master.eSettings.AutoETSize = tSize Then
If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then
posters(i).isChecked = True
End If
End If
End If
Catch
End Try
End If
Catch
End Try
End If
Catch
End Try
Next
End Sub
Private Sub bwTMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDBDownload.ProgressChanged
'//
' Update the status bar with the name of the current media name and increase progress bar
'\\
Try
Dim sStatus As String = e.UserState.ToString
Me.lblDL1Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus))
Me.pbDL1.Value = e.ProgressPercentage
Catch ex As Exception
Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error")
End Try
End Sub
Private Sub bwTMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBDownload.RunWorkerCompleted
'//
' Thread finished: process the pics
'\\
If Not e.Cancelled Then
Me._tmdbDone = True
RaiseEvent TMDBDone()
End If
End Sub
Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
IMPA.Cancel()
MPDB.Cancel()
TMDB.Cancel()
If bwIMPADownload.IsBusy Then bwIMPADownload.CancelAsync()
If bwMPDBDownload.IsBusy Then bwMPDBDownload.CancelAsync()
If bwTMDBDownload.IsBusy Then bwTMDBDownload.CancelAsync()
While bwIMPADownload.IsBusy OrElse bwMPDBDownload.IsBusy OrElse bwTMDBDownload.IsBusy
Application.DoEvents()
End While
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Close()
End Sub
Private Sub CheckAll(ByVal sType As String, ByVal Checked As Boolean)
For i As Integer = 0 To UBound(Me.chkImage)
If Me.chkImage(i).Text.ToLower.Contains(sType) Then
Me.chkImage(i).Checked = Checked
End If
Next
End Sub
Private Sub chkMid_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMid.CheckedChanged
Me.CheckAll("(poster)", chkMid.Checked)
End Sub
Private Sub chkOriginal_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOriginal.CheckedChanged
Me.CheckAll("(original)", chkOriginal.Checked)
End Sub
Private Sub chkThumb_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkThumb.CheckedChanged
Me.CheckAll("(thumb)", chkThumb.Checked)
End Sub
Private Sub dlgImgSelect_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
'Me.tmpImage.Dispose()
IMPA = Nothing
MPDB = Nothing
TMDB = Nothing
IMPAPosters = Nothing
MPDBPosters = Nothing
TMDBPosters = Nothing
End Sub
Private Sub dlgImgSelect_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If Master.eSettings.AutoET AndAlso Not Master.eSettings.UseImgCache Then FileUtils.Delete.DeleteDirectory(Me.CachePath)
End Sub
Private Sub dlgImgSelect_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not PreDL Then SetUp()
End Sub
Private Sub dlgImgSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
Try
Application.DoEvents()
If Not PreDL Then
StartDownload()
ElseIf noImages Then
If Me.DLType = Enums.ImageType.Fanart Then
MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found"))
Else
MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found"))
End If
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Close()
End If
Catch ex As Exception
Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error")
End Try
End Sub
Private Sub DoSelect(ByVal iIndex As Integer, poster As MediaContainers.Image)
Try
'set all pnl colors to white first
'remove all the current genres
For i As Integer = 0 To UBound(Me.pnlImage)
Me.pnlImage(i).BackColor = Color.White
If DLType = Enums.ImageType.Fanart Then
Me.chkImage(i).BackColor = Color.White
Me.chkImage(i).ForeColor = Color.Black
Else
Me.lblImage(i).BackColor = Color.White
Me.lblImage(i).ForeColor = Color.Black
End If
Next
'set selected pnl color to blue
Me.pnlImage(iIndex).BackColor = Color.Blue
If DLType = Enums.ImageType.Fanart Then
Me.chkImage(iIndex).BackColor = Color.Blue
Me.chkImage(iIndex).ForeColor = Color.White
Else
Me.lblImage(iIndex).BackColor = Color.Blue
Me.lblImage(iIndex).ForeColor = Color.White
End If
Me.selIndex = iIndex
Me.pnlSize.Visible = False
If IsTMDBURL(poster.URL) Then
Me.SetupSizes(poster.ParentID)
If Not rbLarge.Checked AndAlso Not rbMedium.Checked AndAlso Not rbSmall.Checked AndAlso Not rbXLarge.Checked Then
Me.OK_Button.Enabled = False
Else
Me.OK_Button.Focus()
End If
Me.tmpImage.Clear()
Else
Me.rbXLarge.Checked = False
Me.rbLarge.Checked = False
Me.rbMedium.Checked = False
Me.rbSmall.Checked = False
Me.OK_Button.Enabled = True
Me.OK_Button.Focus()
Me.tmpImage.Image = Me.pbImage(iIndex).Image
End If
Catch ex As Exception
Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error")
End Try
End Sub
Private Function IsTMDBURL(ByVal sURL As String) As Boolean
If sURL.ToLower.Contains("themoviedb.org") OrElse sURL.ToLower.Contains("cf1.imgobject.com") OrElse sURL.ToLower.Contains("cf2.imgobject.com") Then
Return True
Else
Return False
End If
End Function
Private Function CleanTMDBURL(ByVal sURL As String) As String
If IsTMDBURL(sURL) Then
Dim _sURL As New Uri(sURL)
sURL = String.Concat("$$[themoviedb.org]", _sURL.GetComponents(UriComponents.Path, UriFormat.UriEscaped))
Else
sURL = StringUtils.TruncateURL(sURL, 40, True)
End If
Return sURL.Replace(":", "$c$").Replace("/", "$s$")
End Function
Private Sub GetFanart()
Try
Dim NoneFound As Boolean = True
If Master.eSettings.UseImgCache Then
Dim di As New DirectoryInfo(CachePath)
Dim lFi As New List(Of FileInfo)
If Not Directory.Exists(CachePath) Then
Directory.CreateDirectory(CachePath)
Else
Try
lFi.AddRange(di.GetFiles("*.jpg"))
Catch
End Try
End If
If lFi.Count > 0 Then
Me.pnlDLStatus.Visible = True
Application.DoEvents()
NoneFound = False
Dim tImage As MediaContainers.Image
For Each sFile As FileInfo In lFi
tImage = New MediaContainers.Image
tImage.WebImage.FromFile(sFile.FullName)
If Not IsNothing(tImage.WebImage.Image) Then
Select Case True
Case sFile.Name.Contains("(original)")
tImage.Description = "original"
If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then
If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then
tImage.isChecked = True
End If
End If
'Case sFile.Name.Contains("(mid)")
' tImage.Description = "mid"
Case sFile.Name.Contains("(poster)")
tImage.Description = "poster"
If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then
If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then
tImage.isChecked = True
End If
End If
Case sFile.Name.Contains("(thumb)")
tImage.Description = "thumb"
If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then
If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then
tImage.isChecked = True
End If
End If
End Select
tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString
Me.TMDBPosters.Add(tImage)
End If
Next
ProcessPics(TMDBPosters)
Me.pnlDLStatus.Visible = False
Me.pnlBG.Visible = True
'Me.pnlFanart.Visible = True
'Me.lblInfo.Visible = True
End If
lFi = Nothing
di = Nothing
End If
If NoneFound Then
If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then
If Master.eSettings.AutoET AndAlso Not Directory.Exists(CachePath) Then
Directory.CreateDirectory(CachePath)
End If
Me.lblDL1.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...")
Me.lblDL1Status.Text = String.Empty
Me.pbDL1.Maximum = 3
Me.pnlDLStatus.Visible = True
Me.Refresh()
Me.TMDB.GetImagesAsync(tMovie.Movie.IMDBID, "backdrop")
End If
End If
Catch ex As Exception
Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error")
End Try
End Sub
Private Sub GetPosters()
Try
Dim NoneFound As Boolean = True
If Master.eSettings.UseImgCache Then
Dim lFi As New List(Of FileInfo)
Dim di As New DirectoryInfo(CachePath)
If Not Directory.Exists(CachePath) Then
Directory.CreateDirectory(CachePath)
Else
Try
lFi.AddRange(di.GetFiles("*.jpg"))
Catch
End Try
End If
If lFi.Count > 0 Then
Me.pnlDLStatus.Height = 75
Me.pnlDLStatus.Top = 207
Me.pnlDLStatus.Visible = True
Application.DoEvents()
NoneFound = False
Dim tImage As MediaContainers.Image
For Each sFile As FileInfo In lFi
tImage = New MediaContainers.Image
tImage.WebImage.FromFile(sFile.FullName)
Select Case True
Case sFile.Name.Contains("(original)")
tImage.Description = "original"
Case sFile.Name.Contains("(mid)")
tImage.Description = "mid"
Case sFile.Name.Contains("(cover)")
tImage.Description = "cover"
Case sFile.Name.Contains("(thumb)")
tImage.Description = "thumb"
Case sFile.Name.Contains("(poster)")
tImage.Description = "poster"
End Select
tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString
Me.TMDBPosters.Add(tImage)
Next
ProcessPics(TMDBPosters)
Me.pnlDLStatus.Visible = False
Me.pnlBG.Visible = True
End If
lFi = Nothing
di = Nothing
End If
If NoneFound Then
If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then
Me.lblDL1.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...")
Me.lblDL1Status.Text = String.Empty
Me.pbDL1.Maximum = 3
Me.pnlDLStatus.Visible = True
Me.Refresh()
Me._tmdbDone = False
Me.TMDB.GetImagesAsync(tMovie.Movie.IMDBID, "poster")
Else
Me.lblDL1.Text = Master.eLang.GetString(33, "TheMovieDB.com is not enabled")
End If
If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then
Me.lblDL2.Text = Master.eLang.GetString(34, "Retrieving data from IMPAwards.com...")
Me.lblDL2Status.Text = String.Empty
Me.pbDL2.Maximum = 3
Me.pnlDLStatus.Visible = True
Me.Refresh()
Me._impaDone = False
Me.IMPA.GetImagesAsync(tMovie.Movie.IMDBID)
Else
Me.lblDL2.Text = Master.eLang.GetString(35, "IMPAwards.com is not enabled")
End If
If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then
Me.lblDL3.Text = Master.eLang.GetString(36, "Retrieving data from MoviePosterDB.com...")
Me.lblDL3Status.Text = String.Empty
Me.pbDL3.Maximum = 3
Me.pnlDLStatus.Visible = True
Me.Refresh()
Me._mpdbDone = False
Me.MPDB.GetImagesAsync(tMovie.Movie.IMDBID)
Else
Me.lblDL3.Text = Master.eLang.GetString(37, "MoviePostersDB.com is not enabled")
End If
End If
Catch ex As Exception
Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error")
End Try
End Sub
Private Sub IMPADoneDownloading()
Try
Me._impaDone = True
Me.AllDoneDownloading()
Catch ex As Exception
Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error")
End Try
End Sub
Private Sub IMPAPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image))
Try
Me.pbDL2.Value = 0
Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...")
Me.lblDL2Status.Text = String.Empty
Me.pbDL2.Maximum = Posters.Count
Me.IMPAPosters = Posters
Me.bwIMPADownload.WorkerSupportsCancellation = True
Me.bwIMPADownload.WorkerReportsProgress = True
Me.bwIMPADownload.RunWorkerAsync()
Catch ex As Exception
Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error")
End Try
End Sub
Private Sub IMPAProgressUpdated(ByVal iPercent As Integer)
Me.pbDL2.Value = iPercent
End Sub
Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Me.DoSelect(Convert.ToInt32(DirectCast(sender, Label).Name), DirectCast(DirectCast(sender, Label).Tag, MediaContainers.Image))
End Sub
Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
If e.Delta < 0 Then
If (pnlBG.VerticalScroll.Value + 50) <= pnlBG.VerticalScroll.Maximum Then
pnlBG.VerticalScroll.Value += 50
Else
pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Maximum
End If
Else
If (pnlBG.VerticalScroll.Value - 50) >= pnlBG.VerticalScroll.Minimum Then
pnlBG.VerticalScroll.Value -= 50
Else
pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Minimum
End If
End If
End Sub
Private Sub MPDBDoneDownloading()
Try
Me._mpdbDone = True
Me.AllDoneDownloading()
Catch ex As Exception
Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error")
End Try
End Sub
Private Sub MPDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image))
Try
Me.pbDL3.Value = 0
Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...")
Me.lblDL3Status.Text = String.Empty
Me.pbDL3.Maximum = Posters.Count
Me.MPDBPosters = Posters
Me.bwMPDBDownload.WorkerSupportsCancellation = True
Me.bwMPDBDownload.WorkerReportsProgress = True
Me.bwMPDBDownload.RunWorkerAsync()
Catch ex As Exception
Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error")
End Try
End Sub
Private Sub MPDBProgressUpdated(ByVal iPercent As Integer)
Me.pbDL3.Value = iPercent
End Sub
Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
Try
Dim tmpPathPlus As String = String.Empty
If DLType = Enums.ImageType.Fanart Then
tmpPathPlus = Path.Combine(Master.TempPath, "fanart.jpg")
Else
tmpPathPlus = Path.Combine(Master.TempPath, "poster.jpg")
End If
If Not IsNothing(Me.tmpImage.Image) Then
If isEdit Then
Me.tmpImage.Save(tmpPathPlus)
Results.ImagePath = tmpPathPlus
Else
If Me.DLType = Enums.ImageType.Fanart Then
Results.ImagePath = Me.tmpImage.SaveAsFanart(tMovie)
Else
Results.ImagePath = Me.tmpImage.SaveAsPoster(tMovie)
End If
End If
Else
Me.pnlBG.Visible = False
Me.pnlSinglePic.Visible = True
Me.Refresh()
Application.DoEvents()
Select Case True
Case Me.rbXLarge.Checked
If Master.eSettings.UseImgCache Then
tmpImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg")))
Else
Me.tmpImage.FromWeb(Me.rbXLarge.Tag.ToString)
End If
Case Me.rbLarge.Checked
If Master.eSettings.UseImgCache Then
Me.tmpImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg")))
Else
Me.tmpImage.FromWeb(Me.rbLarge.Tag.ToString)
End If
Case Me.rbMedium.Checked
Me.tmpImage.Image = Me.pbImage(selIndex).Image
Case Me.rbSmall.Checked
If Master.eSettings.UseImgCache Then
Me.tmpImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg")))
Else
Me.tmpImage.FromWeb(Me.rbSmall.Tag.ToString)
End If
End Select
If Not IsNothing(Me.tmpImage.Image) Then
If isEdit Then
Me.tmpImage.Save(tmpPathPlus)
Results.ImagePath = tmpPathPlus
Else
If Me.DLType = Enums.ImageType.Fanart Then
Results.ImagePath = Me.tmpImage.SaveAsFanart(Me.tMovie)
Else
Results.ImagePath = Me.tmpImage.SaveAsPoster(Me.tMovie)
End If
End If
End If
Me.pnlSinglePic.Visible = False
End If
If Me.DLType = Enums.ImageType.Fanart Then
Dim iMod As Integer = 0
Dim iVal As Integer = 1
Dim extraPath As String = String.Empty
Dim isChecked As Boolean = False
For i As Integer = 0 To UBound(Me.chkImage)
If Me.chkImage(i).Checked Then
isChecked = True
Exit For
End If
Next
If isChecked Then
Dim extrathumbsFolderName As String = AdvancedSettings.GetSetting("ExtraThumbsFolderName", "extrathumbs")
If isEdit Then
extraPath = Path.Combine(Master.TempPath, extrathumbsFolderName)
Else
If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(Me.tMovie.Filename) Then
extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName, extrathumbsFolderName)
ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(Me.tMovie.Filename) Then
extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName).FullName, extrathumbsFolderName)
Else
extraPath = Path.Combine(Directory.GetParent(Me.tMovie.Filename).FullName, extrathumbsFolderName)
End If
iMod = Functions.GetExtraModifier(extraPath)
iVal = iMod + 1
End If
If Not Directory.Exists(extraPath) Then
Directory.CreateDirectory(extraPath)
End If
Dim fsET As FileStream
For i As Integer = 0 To UBound(Me.chkImage)
If Me.chkImage(i).Checked Then
fsET = New FileStream(Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg")), FileMode.Create, FileAccess.ReadWrite)
Me.pbImage(i).Image.Save(fsET, System.Drawing.Imaging.ImageFormat.Jpeg)
fsET.Close()
iVal += 1
End If
Next
fsET = Nothing
End If
End If
Catch ex As Exception
Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error")
End Try
Me.DialogResult = System.Windows.Forms.DialogResult.OK
Me.Close()
End Sub
Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, MediaContainers.Image))
End Sub