17 |
List<SQLLITE.IRECORDING_SCHEDULE> Recordings { get; } |
List<SQLLITE.IRECORDING_SCHEDULE> Recordings { get; } |
18 |
List<SQLLITE.ICHANNEL> Channels { get; } |
List<SQLLITE.ICHANNEL> Channels { get; } |
19 |
IDateTimeRange GetProgramsDateRange(List<SQLLITE.IPROGRAMME> programs); |
IDateTimeRange GetProgramsDateRange(List<SQLLITE.IPROGRAMME> programs); |
20 |
List<SQLLITE.IPROGRAMME> CreateUpdatedProgramsList(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> removed_programs); |
List<SQLLITE.IPROGRAMME> FixGBPVRProgramsDatabase(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> removed_programs); |
21 |
|
|
22 |
} |
} |
23 |
public class SQLLITE : ISQLLITE |
public class SQLLITE : ISQLLITE |
293 |
return range; |
return range; |
294 |
} |
} |
295 |
|
|
296 |
public List<SQLLITE.IPROGRAMME> CreateUpdatedProgramsList(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> source_invalid) |
public List<SQLLITE.IPROGRAMME> FixGBPVRProgramsDatabase(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> source_invalid) |
297 |
{ |
{ |
298 |
source_invalid = new List<IPROGRAMME>(); |
source_invalid = new List<IPROGRAMME>(); |
299 |
gbpvr_programs = gbpvr_programs.OrderBy(s => s.start_time).ToList(); |
gbpvr_programs = gbpvr_programs.OrderBy(s => s.start_time).ToList(); |
348 |
{ |
{ |
349 |
gLog.Warn.WriteLine("Invalidating GB-PVR Program: oid='{0}' channel_oid='{1}' title='{2}' start='{3}'", program.oid, program.channel_oid, program.name, program.start_time.ToDateTimeString()); |
gLog.Warn.WriteLine("Invalidating GB-PVR Program: oid='{0}' channel_oid='{1}' title='{2}' start='{3}'", program.oid, program.channel_oid, program.name, program.start_time.ToDateTimeString()); |
350 |
source_invalid.Add(program); |
source_invalid.Add(program); |
351 |
|
// remove database entry |
352 |
|
if (!RemoveProgramDatabaseEntry(program)) |
353 |
|
{ |
354 |
|
gLog.Error.WriteLine("Failed to remove entry with oid: '{0}'", program.oid); |
355 |
|
} |
356 |
} |
} |
357 |
else |
else |
358 |
{ |
{ |
359 |
gLog.Warn.WriteLine("Updating GB-PVR Program (if needed): oid='{0}' channel_oid='{1}' title='{2}' subtitle='{3}' start='{4}'", program.oid, program.channel_oid, program.name, program.sub_title, program.start_time.ToDateTimeString()); |
gLog.Warn.WriteLine("Updating GB-PVR Program (if needed): oid='{0}' channel_oid='{1}' title='{2}' subtitle='{3}' start='{4}'", program.oid, program.channel_oid, program.name, program.sub_title, program.start_time.ToDateTimeString()); |
360 |
var updated_program = program; |
var updated_program = program; |
361 |
|
bool needsupdate = false; |
362 |
if (xmltv_entry.Title != program.name) |
if (xmltv_entry.Title != program.name) |
363 |
{ |
{ |
364 |
gLog.Warn.WriteLine(" Updating:"); |
gLog.Warn.WriteLine(" Updating:"); |
365 |
gLog.Warn.WriteLine(" Old Title: {0}", program.name); |
gLog.Warn.WriteLine(" Old Title: {0}", program.name); |
366 |
gLog.Warn.WriteLine(" New Title: {0}", xmltv_entry.Title); |
gLog.Warn.WriteLine(" New Title: {0}", xmltv_entry.Title); |
367 |
updated_program.name = xmltv_entry.Title; |
updated_program.name = xmltv_entry.Title; |
368 |
|
needsupdate = true; |
369 |
} |
} |
370 |
if (xmltv_entry.SubTitle != program.sub_title) |
if (xmltv_entry.SubTitle != program.sub_title) |
371 |
{ |
{ |
373 |
gLog.Warn.WriteLine(" Old SubTile: {0}", program.sub_title); |
gLog.Warn.WriteLine(" Old SubTile: {0}", program.sub_title); |
374 |
gLog.Warn.WriteLine(" New SubTile: {0}", xmltv_entry.SubTitle); |
gLog.Warn.WriteLine(" New SubTile: {0}", xmltv_entry.SubTitle); |
375 |
updated_program.sub_title = xmltv_entry.SubTitle; |
updated_program.sub_title = xmltv_entry.SubTitle; |
376 |
|
needsupdate = true; |
377 |
} |
} |
378 |
if (xmltv_entry.Description != program.description) |
if (xmltv_entry.Description != program.description) |
379 |
{ |
{ |
380 |
gLog.Warn.WriteLine(" Updating:"); |
gLog.Warn.WriteLine(" Updating:"); |
381 |
gLog.Warn.WriteLine(" Old Descption: {0}", program.description); |
gLog.Warn.WriteLine(" Old Descption: {0}", program.description); |
382 |
gLog.Warn.WriteLine(" New Descption: {0}", xmltv_entry.Description); |
gLog.Warn.WriteLine(" New Descption: {0}", xmltv_entry.Description); |
383 |
updated_program.description = xmltv_entry.Description; |
updated_program.description = xmltv_entry.Description; |
384 |
|
needsupdate = true; |
385 |
} |
} |
386 |
if (DateTime.Parse(xmltv_entry.Start) != program.start_time) |
if (DateTime.Parse(xmltv_entry.Start) != program.start_time) |
387 |
{ |
{ |
389 |
gLog.Warn.WriteLine(" Old StartTime: {0}", program.start_time.ToDateTimeString()); |
gLog.Warn.WriteLine(" Old StartTime: {0}", program.start_time.ToDateTimeString()); |
390 |
gLog.Warn.WriteLine(" New StartTime: {0}", DateTime.Parse(xmltv_entry.Start).ToDateTimeString()); |
gLog.Warn.WriteLine(" New StartTime: {0}", DateTime.Parse(xmltv_entry.Start).ToDateTimeString()); |
391 |
updated_program.start_time = DateTime.Parse(xmltv_entry.Start); |
updated_program.start_time = DateTime.Parse(xmltv_entry.Start); |
392 |
|
needsupdate = true; |
393 |
} |
} |
394 |
if (DateTime.Parse(xmltv_entry.Stop) != program.end_time) |
if (DateTime.Parse(xmltv_entry.Stop) != program.end_time) |
395 |
{ |
{ |
397 |
gLog.Warn.WriteLine(" Old EndTime: {0}", program.end_time.ToDateTimeString()); |
gLog.Warn.WriteLine(" Old EndTime: {0}", program.end_time.ToDateTimeString()); |
398 |
gLog.Warn.WriteLine(" New EndTime: {0}", DateTime.Parse(xmltv_entry.Stop).ToDateTimeString()); |
gLog.Warn.WriteLine(" New EndTime: {0}", DateTime.Parse(xmltv_entry.Stop).ToDateTimeString()); |
399 |
updated_program.end_time = DateTime.Parse(xmltv_entry.Stop); |
updated_program.end_time = DateTime.Parse(xmltv_entry.Stop); |
400 |
|
needsupdate = true; |
401 |
} |
} |
402 |
source_valid.Add(updated_program); |
source_valid.Add(updated_program); |
403 |
|
if (needsupdate) |
404 |
|
{ |
405 |
|
// update database entry |
406 |
|
if (!UpdateProgramDatabaseEntry(program, updated_program)) |
407 |
|
{ |
408 |
|
gLog.Error.WriteLine("Failed to update entry with oid: '{0}'", program.oid); |
409 |
|
} |
410 |
|
} |
411 |
} |
} |
412 |
index++; |
index++; |
413 |
} |
} |
630 |
} |
} |
631 |
} |
} |
632 |
|
|
633 |
|
|
634 |
|
|
635 |
|
private bool RemoveProgramDatabaseEntry(IPROGRAMME old_program) |
636 |
|
{ |
637 |
|
bool result = false; |
638 |
|
try |
639 |
|
{ |
640 |
|
using (SQLiteConnection con = CreateConnection()) |
641 |
|
{ |
642 |
|
try |
643 |
|
{ |
644 |
|
gLog.Info.WriteLine("Removing old program with oid: '{0}'", old_program.oid); |
645 |
|
con.Open(); |
646 |
|
string command_text = string.Format(@"DELETE FROM [{0}] WHERE [oid] = @oid;", TABLES.PROGRAMME); |
647 |
|
gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text); |
648 |
|
using (SQLiteCommand cmd = new SQLiteCommand(command_text, con)) |
649 |
|
{ |
650 |
|
cmd.Parameters.Add(new SQLiteParameter("oid", old_program.oid)); |
651 |
|
int rowsupdated = cmd.ExecuteNonQuery(); |
652 |
|
gLog.Info.WriteLine("Updated '{0}' rows", rowsupdated); |
653 |
|
} |
654 |
|
con.Clone(); |
655 |
|
result = true; |
656 |
|
} |
657 |
|
catch (SQLiteException ex) |
658 |
|
{ |
659 |
|
gLog.Error.WriteLine(ex.ToString()); |
660 |
|
result = false; |
661 |
|
} |
662 |
|
} |
663 |
|
} |
664 |
|
catch (Exception ex) |
665 |
|
{ |
666 |
|
gLog.Error.WriteLine(ex.ToString()); |
667 |
|
result = false; |
668 |
|
} |
669 |
|
return result; |
670 |
|
} |
671 |
|
private bool UpdateProgramDatabaseEntry(IPROGRAMME old_program, IPROGRAMME new_program) |
672 |
|
{ |
673 |
|
bool result = false; |
674 |
|
try |
675 |
|
{ |
676 |
|
using (SQLiteConnection con = CreateConnection()) |
677 |
|
{ |
678 |
|
try |
679 |
|
{ |
680 |
|
gLog.Info.WriteLine("Updating old program with oid: '{0}'", old_program.oid); |
681 |
|
con.Open(); |
682 |
|
//string command_text = string.Format(@"UPDATE [{0}] SET [name]=@name,[sub_title]=@subtitle, WHERE [OID] = @oid", TABLES.PROGRAMME); |
683 |
|
string command_text = string.Empty; |
684 |
|
StringBuilder builder = new StringBuilder(); |
685 |
|
|
686 |
|
builder.AppendLine(string.Format("UPDATE [{0}]", TABLES.PROGRAMME)); |
687 |
|
builder.Append("SET "); |
688 |
|
builder.AppendFormat("[name]=@name,"); |
689 |
|
builder.AppendFormat("[sub_title]=@sub_title,"); |
690 |
|
builder.AppendFormat("[description]=@description,"); |
691 |
|
builder.AppendFormat("[start_time]=@start_time,"); |
692 |
|
builder.AppendFormat("[end_time]=@end_time,"); |
693 |
|
builder.AppendFormat("[channel_oid]=@channel_oid,"); |
694 |
|
builder.AppendFormat("[unique_identifier]=@unique_identifier,"); |
695 |
|
builder.AppendFormat("[rating]=@rating"); |
696 |
|
builder.AppendLine(" WHERE [oid] = @oid"); |
697 |
|
|
698 |
|
command_text = builder.ToString(); |
699 |
|
gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text); |
700 |
|
using (SQLiteCommand cmd = new SQLiteCommand(command_text, con)) |
701 |
|
{ |
702 |
|
cmd.Parameters.Add(new SQLiteParameter("name", new_program.name)); |
703 |
|
cmd.Parameters.Add(new SQLiteParameter("sub_title", new_program.sub_title)); |
704 |
|
cmd.Parameters.Add(new SQLiteParameter("description", new_program.description)); |
705 |
|
cmd.Parameters.Add(new SQLiteParameter("start_time", new_program.start_time)); |
706 |
|
cmd.Parameters.Add(new SQLiteParameter("end_time", new_program.end_time)); |
707 |
|
cmd.Parameters.Add(new SQLiteParameter("channel_oid", new_program.channel_oid)); |
708 |
|
cmd.Parameters.Add(new SQLiteParameter("unique_identifier", new_program.unique_identifier)); |
709 |
|
cmd.Parameters.Add(new SQLiteParameter("rating", new_program.rating)); |
710 |
|
int rowsupdated = cmd.ExecuteNonQuery(); |
711 |
|
gLog.Info.WriteLine("Updated '{0}' rows", rowsupdated); |
712 |
|
} |
713 |
|
con.Clone(); |
714 |
|
result = true; |
715 |
|
} |
716 |
|
catch (SQLiteException ex) |
717 |
|
{ |
718 |
|
gLog.Error.WriteLine(ex.ToString()); |
719 |
|
result = false; |
720 |
|
} |
721 |
|
} |
722 |
|
} |
723 |
|
catch (Exception ex) |
724 |
|
{ |
725 |
|
gLog.Error.WriteLine(ex.ToString()); |
726 |
|
result = false; |
727 |
|
} |
728 |
|
return result; |
729 |
|
} |
730 |
} |
} |
731 |
} |
} |