22 |
|
List<SQLLITE.IRECORDING_SCHEDULE> Recordings { get; } |
23 |
|
List<SQLLITE.ICHANNEL> Channels { get; } |
24 |
|
IDateTimeRange GetProgramsDateRange(List<SQLLITE.IPROGRAMME> programs); |
25 |
< |
List<IOldNewProgram> FixGBPVRProgramsDatabase(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> removed_programs); |
25 |
> |
List<SQLLITE.IPROGRAMME> FixGBPVRProgramsDatabase(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> removed_programs); |
26 |
|
|
27 |
|
void RemoveOldGBPVRPrograms(List<SQLLITE.IPROGRAMME> programs); |
28 |
< |
void UpdateGBPVRPrograms(List<IOldNewProgram> programs); |
28 |
> |
void UpdateGBPVRPrograms(List<SQLLITE.IPROGRAMME> programs); |
29 |
|
|
30 |
|
} |
31 |
|
public class SQLLITE : ISQLLITE |
347 |
|
return range; |
348 |
|
} |
349 |
|
|
350 |
< |
public List<IOldNewProgram> FixGBPVRProgramsDatabase(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> source_invalid) |
350 |
> |
public List<SQLLITE.IPROGRAMME> FixGBPVRProgramsDatabase(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> source_invalid) |
351 |
|
{ |
352 |
|
source_invalid = new List<IPROGRAMME>(); |
353 |
< |
List<IOldNewProgram> source_valid = new List<IOldNewProgram>(); |
353 |
> |
List<IPROGRAMME> source_valid = new List<IPROGRAMME>(); |
354 |
|
gbpvr_programs = gbpvr_programs.OrderBy(s => s.start_time).ToList(); |
355 |
|
xmltv_programs = xmltv_programs.OrderBy(s => DateTime.Parse(s.Start)).ToList(); |
356 |
|
gbpvr_programs.TrimExcess(); |
410 |
|
{ |
411 |
|
throw new Exception(string.Format("Program oid '{0}' was not properly updated.", updated_program.oid)); |
412 |
|
} |
413 |
< |
source_valid.Add(new OldNewProgram(program, updated_program)); |
413 |
> |
//source_valid.Add(new OldNewProgram(program, updated_program)); |
414 |
> |
source_valid.Add(updated_program); |
415 |
|
} |
416 |
|
else |
417 |
|
{ |
418 |
|
// data is the same |
419 |
< |
source_valid.Add(new OldNewProgram(program, program)); |
419 |
> |
//source_valid.Add(new OldNewProgram(program, program)); |
420 |
> |
source_valid.Add(program); |
421 |
|
} |
422 |
|
} |
423 |
|
index++; |
845 |
|
st.Stop(); |
846 |
|
gLog.Warn.WriteLine(" operation took: {0:0.00000} minutes", st.Elapsed.TotalMinutes); |
847 |
|
} |
848 |
< |
public void UpdateGBPVRPrograms(List<IOldNewProgram> programs) |
848 |
> |
public void UpdateGBPVRPrograms(List<IPROGRAMME> programs) |
849 |
|
{ |
850 |
< |
int STEP = 500; |
851 |
< |
List<List<IPROGRAMME>> array_list = new List<List<IPROGRAMME>>(); // holds a list of ~STEP programs per index |
850 |
< |
for (int i = 0; i < programs.Count;) |
851 |
< |
{ |
852 |
< |
List<IPROGRAMME> tmp = new List<IPROGRAMME>(STEP); |
853 |
< |
for (int j = 0; j < STEP; j++) |
854 |
< |
{ |
855 |
< |
try |
856 |
< |
{ |
857 |
< |
tmp.Add(programs[i + j].NewProgram); |
858 |
< |
} |
859 |
< |
catch { } |
860 |
< |
} |
861 |
< |
tmp.TrimExcess(); |
862 |
< |
array_list.Add(tmp); |
863 |
< |
i += STEP; |
864 |
< |
} |
865 |
< |
array_list.TrimExcess(); |
850 |
> |
int ChunkSize = 500; |
851 |
> |
var ChunkList = programs.Chunk<IPROGRAMME>(ChunkSize); |
852 |
|
|
853 |
|
int total = programs.Count; |
854 |
|
int index = 0; |
855 |
|
double progress = 0; |
856 |
|
Stopwatch st = new Stopwatch(); |
857 |
|
st.Start(); |
858 |
< |
foreach (var p in array_list) |
858 |
> |
foreach (var p in ChunkList) |
859 |
|
{ |
860 |
< |
progress = 100.0 * (index / total); |
860 |
> |
progress = 100.0 * (index / total); |
861 |
|
//gLog.Info.WriteLine("Inserting {0} gbpvr programs.", p.Count); |
862 |
< |
if (!InsertProgramEntryDatabase(p)) |
862 |
> |
if (!InsertProgramEntryDatabase(p.ToList())) |
863 |
|
{ |
864 |
|
gLog.Error.WriteLine("Failed to insert one or more program(s)"); |
865 |
< |
} |
865 |
> |
} |
866 |
|
gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Inserting GBPVR Programs: {0:00}%", (int)progress))); |
867 |
< |
index += p.Count; |
867 |
> |
index += p.Count(); |
868 |
|
} |
869 |
|
st.Stop(); |
870 |
|
gLog.Warn.WriteLine(" operation took: {0:0.00000} minutes", st.Elapsed.TotalMinutes); |