Code view:

A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.

Before

…lines 1–459 unchanged (459 lines)
460 connection.Close();
461
462 _logger.LogInformation("Migration of the Library.db done.");
463 _logger.LogInformation("Migrating Library db took {0}.", fullOperationTimer.Elapsed);
464
465 SqliteConnection.ClearAllPools();
466
467 _logger.LogInformation("Move {0} to {1}.", libraryDbPath, libraryDbPath + ".old");
468 File.Move(libraryDbPath, libraryDbPath + ".old", true);
469 }
470
471 private DatabaseMigrationStep GetPreparedDbContext(string operationName)
472 {
…lines 473–1473 unchanged (1001 lines)

After

…lines 1–460 unchanged (460 lines)
461
462 _logger.LogInformation("Migration of the Library.db done.");
463 _logger.LogInformation("Migrating Library db took {0}.", fullOperationTimer.Elapsed);
464
465 SqliteConnection.ClearAllPools();
466
467 using (var checkpointConnection = new SqliteConnection($"Filename={libraryDbPath}"))
468 {
469 checkpointConnection.Open();
470 using var cmd = checkpointConnection.CreateCommand();
471 cmd.CommandText = "PRAGMA wal_checkpoint(TRUNCATE);";
472 cmd.ExecuteNonQuery();
473 }
474
475 SqliteConnection.ClearAllPools();
476
477 _logger.LogInformation("Move {0} to {1}.", libraryDbPath, libraryDbPath + ".old");
478 File.Move(libraryDbPath, libraryDbPath + ".old", true);
479 }
480
481 private DatabaseMigrationStep GetPreparedDbContext(string operationName)
…lines 482–1483 unchanged (1002 lines)

Before

compilation_unit
preproc_pragma
#pragma "#pragma"
warning "warning"
disable "disable"
identifier "RS0030"
comment "// Do not use banned APIs"
using_directive
using "using"
identifier "System"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "System"
. "."
identifier "Collections"
. "."
identifier "Generic"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "System"
. "."
identifier "Collections"
. "."
identifier "Immutable"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "Data"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "Diagnostics"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "Globalization"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "IO"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "Linq"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "Text"
; ";"
using_directive
using "using"
qualified_name
qualified_name
qualified_name
identifier "Emby"
. "."
identifier "Server"
. "."
identifier "Implementations"
. "."
identifier "Data"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Database"
. "."
identifier "Implementations"
; ";"
using_directive
using "using"
qualified_name
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Database"
. "."
identifier "Implementations"
. "."
identifier "Entities"
; ";"
using_directive
using "using"
qualified_name
identifier "Jellyfin"
. "."
identifier "Extensions"
; ";"
using_directive
using "using"
qualified_name
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Server"
. "."
identifier "Implementations"
. "."
identifier "Item"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Server"
. "."
identifier "ServerSetupApp"
; ";"
using_directive
using "using"
qualified_name
identifier "MediaBrowser"
. "."
identifier "Controller"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "MediaBrowser"
. "."
identifier "Controller"
. "."
identifier "Entities"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "MediaBrowser"
. "."
identifier "Model"
. "."
identifier "Entities"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Microsoft"
. "."
identifier "Data"
. "."
identifier "Sqlite"
; ";"
using_directive
using "using"
qualified_name
identifier "Microsoft"
. "."
identifier "EntityFrameworkCore"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Microsoft"
. "."
identifier "Extensions"
. "."
identifier "Logging"
; ";"
using_directive
using "using"
identifier "BaseItemEntity"
= "="
qualified_name
qualified_name
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Database"
. "."
identifier "Implementations"
. "."
identifier "Entities"
. "."
identifier "BaseItemEntity"
; ";"
using_directive
using "using"
identifier "Chapter"
= "="
qualified_name
qualified_name
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Database"
. "."
identifier "Implementations"
. "."
identifier "Entities"
. "."
identifier "Chapter"
; ";"
file_scoped_namespace_declaration
namespace "namespace"
qualified_name
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Server"
. "."
identifier "Migrations"
. "."
identifier "Routines"
; ";"
comment "/// <summary>"
comment "/// The migration routine for migrating the userdata databas"...
comment "/// </summary>"
class_declaration
attribute_list (+22 nodes collapsed)
attribute_list
[ "["
attribute
identifier "JellyfinMigrationBackup"
attribute_argument_list
( "("
attribute_argument
identifier "JellyfinDb"
= "="
boolean_literal
true "true"
, ","
attribute_argument
identifier "LegacyLibraryDb"
= "="
boolean_literal
true "true"
) ")"
] "]"
modifier
internal "internal"
class "class"
identifier "MigrateLibraryDb"
base_list
: ":"
identifier "IDatabaseMigrationRoutine"
declaration_list
{ "{"
field_declaration
modifier
private "private"
modifier
const "const"
variable_declaration
predefined_type "string"
variable_declarator
identifier "DbFilename"
= "="
string_literal
" "\""
string_literal_content "library.db"
" "\""
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
identifier "IStartupLogger"
variable_declarator
identifier "_logger"
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
identifier "IServerApplicationPaths"
variable_declarator
identifier "_paths"
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
identifier "IJellyfinDatabaseProvider"
variable_declarator
identifier "_jellyfinDatabaseProvider"
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
generic_name
identifier "IDbContextFactory"
type_argument_list
< "<"
identifier "JellyfinDbContext"
> ">"
variable_declarator
identifier "_provider"
; ";"
comment "/// <summary>"
comment "/// Initializes a new instance of the <see cref=\"MigrateLibr"...
comment "/// </summary>"
comment "/// <param name=\"startupLogger\">The startup logger for Start"...
comment "/// <param name=\"provider\">The database provider.</param>"
comment "/// <param name=\"paths\">The server application paths.</param"...
comment "/// <param name=\"jellyfinDatabaseProvider\">The database prov"...
constructor_declaration (+59 nodes collapsed)
comment "/// <inheritdoc/>"
method_declaration
modifier
public "public"
predefined_type "void"
identifier "Perform"
parameter_list
( "("
) ")"
block
{ "{"
expression_statement
invocation_expression
member_access_expression
identifier "_logger"
. "."
identifier "LogInformation"
argument_list
( "("
argument
string_literal
" "\""
string_literal_content "Migrating the userdata from library.db may take a while, do "...
" "\""
) ")"
; ";"
local_declaration_statement
variable_declaration
implicit_type
var "var"
variable_declarator
identifier "dataPath"
= "="
member_access_expression
identifier "_paths"
. "."
identifier "DataPath"
; ";"
local_declaration_statement (+21 nodes collapsed)
if_statement (+40 nodes collapsed)
local_declaration_statement (+26 nodes collapsed)
local_declaration_statement
variable_declaration
implicit_type
var "var"
variable_declarator
identifier "fullOperationTimer"
= "="
object_creation_expression
new "new"
identifier "Stopwatch"
argument_list
( "("
) ")"
; ";"
expression_statement
invocation_expression
member_access_expression
identifier "fullOperationTimer"
. "."
identifier "Start"
argument_list
( "("
) ")"
; ";"
using_statement (+167 nodes collapsed)
comment "// notify the other migration to just silently abort because"...
expression_statement
assignment_expression
member_access_expression
identifier "ReseedFolderFlag"
. "."
identifier "RerunGuardFlag"
= "="
boolean_literal
true "true"
; ";"
local_declaration_statement (+21 nodes collapsed)
expression_statement
invocation_expression
member_access_expression
identifier "connection"
. "."
identifier "Open"
argument_list
( "("
) ")"
; ";"
local_declaration_statement
variable_declaration
implicit_type
var "var"
variable_declarator
identifier "baseItemIds"
= "="
object_creation_expression
new "new"
generic_name
identifier "HashSet"
type_argument_list
< "<"
identifier "Guid"
> ">"
argument_list
( "("
) ")"
; ";"
using_statement (+551 nodes collapsed)
using_statement (+449 nodes collapsed)
using_statement (+430 nodes collapsed)
using_statement (+187 nodes collapsed)
using_statement (+187 nodes collapsed)
using_statement (+595 nodes collapsed)
using_statement (+187 nodes collapsed)
using_statement (+204 nodes collapsed)
expression_statement
invocation_expression
member_access_expression
identifier "connection"
. "."
identifier "Close"
argument_list
( "("
) ")"
; ";"
expression_statement
invocation_expression
member_access_expression
identifier "_logger"
. "."
identifier "LogInformation"
argument_list
( "("
argument
string_literal
" "\""
string_literal_content "Migration of the Library.db done."
" "\""
) ")"
; ";"
expression_statement (+21 nodes collapsed)
expression_statement
invocation_expression
member_access_expression
identifier "SqliteConnection"
. "."
identifier "ClearAllPools"
argument_list
( "("
) ")"
; ";"
expression_statement (+27 nodes collapsed)
expression_statement (+25 nodes collapsed)
} "}"
method_declaration (+75 nodes collapsed)
method_declaration (+398 nodes collapsed)
method_declaration (+67 nodes collapsed)
comment "/// <summary>"
comment "/// Gets the chapter."
comment "/// </summary>"
comment "/// <param name=\"reader\">The reader.</param>"
comment "/// <returns>ChapterInfo.</returns>"
method_declaration (+180 nodes collapsed)
method_declaration (+81 nodes collapsed)
method_declaration (+91 nodes collapsed)
comment "/// <summary>"
comment "/// Gets the media stream."
comment "/// </summary>"
comment "/// <param name=\"reader\">The reader.</param>"
comment "/// <returns>MediaStream.</returns>"
method_declaration (+1435 nodes collapsed)
comment "/// <summary>"
comment "/// Gets the attachment."
comment "/// </summary>"
comment "/// <param name=\"reader\">The reader.</param>"
comment "/// <returns>MediaAttachment.</returns>"
method_declaration (+232 nodes collapsed)
method_declaration (+3162 nodes collapsed)
method_declaration (+133 nodes collapsed)
method_declaration (+239 nodes collapsed)
method_declaration (+827 nodes collapsed)
class_declaration (+187 nodes collapsed)
class_declaration (+106 nodes collapsed)
} "}"

After

compilation_unit
preproc_pragma
#pragma "#pragma"
warning "warning"
disable "disable"
identifier "RS0030"
comment "// Do not use banned APIs"
using_directive
using "using"
identifier "System"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "System"
. "."
identifier "Collections"
. "."
identifier "Generic"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "System"
. "."
identifier "Collections"
. "."
identifier "Immutable"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "Data"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "Diagnostics"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "Globalization"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "IO"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "Linq"
; ";"
using_directive
using "using"
qualified_name
identifier "System"
. "."
identifier "Text"
; ";"
using_directive
using "using"
qualified_name
qualified_name
qualified_name
identifier "Emby"
. "."
identifier "Server"
. "."
identifier "Implementations"
. "."
identifier "Data"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Database"
. "."
identifier "Implementations"
; ";"
using_directive
using "using"
qualified_name
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Database"
. "."
identifier "Implementations"
. "."
identifier "Entities"
; ";"
using_directive
using "using"
qualified_name
identifier "Jellyfin"
. "."
identifier "Extensions"
; ";"
using_directive
using "using"
qualified_name
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Server"
. "."
identifier "Implementations"
. "."
identifier "Item"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Server"
. "."
identifier "ServerSetupApp"
; ";"
using_directive
using "using"
qualified_name
identifier "MediaBrowser"
. "."
identifier "Controller"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "MediaBrowser"
. "."
identifier "Controller"
. "."
identifier "Entities"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "MediaBrowser"
. "."
identifier "Model"
. "."
identifier "Entities"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Microsoft"
. "."
identifier "Data"
. "."
identifier "Sqlite"
; ";"
using_directive
using "using"
qualified_name
identifier "Microsoft"
. "."
identifier "EntityFrameworkCore"
; ";"
using_directive
using "using"
qualified_name
qualified_name
identifier "Microsoft"
. "."
identifier "Extensions"
. "."
identifier "Logging"
; ";"
using_directive
using "using"
identifier "BaseItemEntity"
= "="
qualified_name
qualified_name
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Database"
. "."
identifier "Implementations"
. "."
identifier "Entities"
. "."
identifier "BaseItemEntity"
; ";"
using_directive
using "using"
identifier "Chapter"
= "="
qualified_name
qualified_name
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Database"
. "."
identifier "Implementations"
. "."
identifier "Entities"
. "."
identifier "Chapter"
; ";"
file_scoped_namespace_declaration
namespace "namespace"
qualified_name
qualified_name
qualified_name
identifier "Jellyfin"
. "."
identifier "Server"
. "."
identifier "Migrations"
. "."
identifier "Routines"
; ";"
comment "/// <summary>"
comment "/// The migration routine for migrating the userdata databas"...
comment "/// </summary>"
class_declaration
attribute_list (+22 nodes collapsed)
attribute_list
[ "["
attribute
identifier "JellyfinMigrationBackup"
attribute_argument_list
( "("
attribute_argument
identifier "JellyfinDb"
= "="
boolean_literal
true "true"
, ","
attribute_argument
identifier "LegacyLibraryDb"
= "="
boolean_literal
true "true"
) ")"
] "]"
modifier
internal "internal"
class "class"
identifier "MigrateLibraryDb"
base_list
: ":"
identifier "IDatabaseMigrationRoutine"
declaration_list
{ "{"
field_declaration
modifier
private "private"
modifier
const "const"
variable_declaration
predefined_type "string"
variable_declarator
identifier "DbFilename"
= "="
string_literal
" "\""
string_literal_content "library.db"
" "\""
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
identifier "IStartupLogger"
variable_declarator
identifier "_logger"
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
identifier "IServerApplicationPaths"
variable_declarator
identifier "_paths"
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
identifier "IJellyfinDatabaseProvider"
variable_declarator
identifier "_jellyfinDatabaseProvider"
; ";"
field_declaration
modifier
private "private"
modifier
readonly "readonly"
variable_declaration
generic_name
identifier "IDbContextFactory"
type_argument_list
< "<"
identifier "JellyfinDbContext"
> ">"
variable_declarator
identifier "_provider"
; ";"
comment "/// <summary>"
comment "/// Initializes a new instance of the <see cref=\"MigrateLibr"...
comment "/// </summary>"
comment "/// <param name=\"startupLogger\">The startup logger for Start"...
comment "/// <param name=\"provider\">The database provider.</param>"
comment "/// <param name=\"paths\">The server application paths.</param"...
comment "/// <param name=\"jellyfinDatabaseProvider\">The database prov"...
constructor_declaration (+59 nodes collapsed)
comment "/// <inheritdoc/>"
method_declaration
modifier
public "public"
predefined_type "void"
identifier "Perform"
parameter_list
( "("
) ")"
block
{ "{"
expression_statement
invocation_expression
member_access_expression
identifier "_logger"
. "."
identifier "LogInformation"
argument_list
( "("
argument
string_literal
" "\""
string_literal_content "Migrating the userdata from library.db may take a while, do "...
" "\""
) ")"
; ";"
local_declaration_statement
variable_declaration
implicit_type
var "var"
variable_declarator
identifier "dataPath"
= "="
member_access_expression
identifier "_paths"
. "."
identifier "DataPath"
; ";"
local_declaration_statement (+21 nodes collapsed)
if_statement (+40 nodes collapsed)
local_declaration_statement (+26 nodes collapsed)
local_declaration_statement
variable_declaration
implicit_type
var "var"
variable_declarator
identifier "fullOperationTimer"
= "="
object_creation_expression
new "new"
identifier "Stopwatch"
argument_list
( "("
) ")"
; ";"
expression_statement
invocation_expression
member_access_expression
identifier "fullOperationTimer"
. "."
identifier "Start"
argument_list
( "("
) ")"
; ";"
using_statement (+167 nodes collapsed)
comment "// notify the other migration to just silently abort because"...
expression_statement
assignment_expression
member_access_expression
identifier "ReseedFolderFlag"
. "."
identifier "RerunGuardFlag"
= "="
boolean_literal
true "true"
; ";"
local_declaration_statement (+21 nodes collapsed)
expression_statement
invocation_expression
member_access_expression
identifier "connection"
. "."
identifier "Open"
argument_list
( "("
) ")"
; ";"
local_declaration_statement
variable_declaration
implicit_type
var "var"
variable_declarator
identifier "baseItemIds"
= "="
object_creation_expression
new "new"
generic_name
identifier "HashSet"
type_argument_list
< "<"
identifier "Guid"
> ">"
argument_list
( "("
) ")"
; ";"
using_statement (+551 nodes collapsed)
using_statement (+449 nodes collapsed)
using_statement (+430 nodes collapsed)
using_statement (+187 nodes collapsed)
using_statement (+187 nodes collapsed)
using_statement (+595 nodes collapsed)
using_statement (+187 nodes collapsed)
using_statement (+204 nodes collapsed)
expression_statement
invocation_expression
member_access_expression
identifier "connection"
. "."
identifier "Close"
argument_list
( "("
) ")"
; ";"
expression_statement
invocation_expression
member_access_expression
identifier "_logger"
. "."
identifier "LogInformation"
argument_list
( "("
argument
string_literal
" "\""
string_literal_content "Migration of the Library.db done."
" "\""
) ")"
; ";"
expression_statement (+21 nodes collapsed)
expression_statement
invocation_expression
member_access_expression
identifier "SqliteConnection"
. "."
identifier "ClearAllPools"
argument_list
( "("
) ")"
; ";"
using_statement
using "using"
( "("
variable_declaration
implicit_type
var "var"
variable_declarator
identifier "checkpointConnection"
= "="
object_creation_expression
new "new"
identifier "SqliteConnection"
argument_list
( "("
argument
interpolated_string_expression
interpolation_start "$"
" "\""
string_content "Filename="
interpolation
interpolation_brace "{"
identifier "libraryDbPath"
interpolation_brace "}"
" "\""
) ")"
) ")"
block
{ "{"
expression_statement
invocation_expression
member_access_expression
identifier "checkpointConnection"
. "."
identifier "Open"
argument_list
( "("
) ")"
; ";"
local_declaration_statement
using "using"
variable_declaration
implicit_type
var "var"
variable_declarator
identifier "cmd"
= "="
invocation_expression
member_access_expression
identifier "checkpointConnection"
. "."
identifier "CreateCommand"
argument_list
( "("
) ")"
; ";"
expression_statement
assignment_expression
member_access_expression
identifier "cmd"
. "."
identifier "CommandText"
= "="
string_literal
" "\""
string_literal_content "PRAGMA wal_checkpoint(TRUNCATE);"
" "\""
; ";"
expression_statement
invocation_expression
member_access_expression
identifier "cmd"
. "."
identifier "ExecuteNonQuery"
argument_list
( "("
) ")"
; ";"
} "}"
expression_statement
invocation_expression
member_access_expression
identifier "SqliteConnection"
. "."
identifier "ClearAllPools"
argument_list
( "("
) ")"
; ";"
expression_statement (+27 nodes collapsed)
expression_statement (+25 nodes collapsed)
} "}"
method_declaration (+75 nodes collapsed)
method_declaration (+398 nodes collapsed)
method_declaration (+67 nodes collapsed)
comment "/// <summary>"
comment "/// Gets the chapter."
comment "/// </summary>"
comment "/// <param name=\"reader\">The reader.</param>"
comment "/// <returns>ChapterInfo.</returns>"
method_declaration (+180 nodes collapsed)
method_declaration (+81 nodes collapsed)
method_declaration (+91 nodes collapsed)
comment "/// <summary>"
comment "/// Gets the media stream."
comment "/// </summary>"
comment "/// <param name=\"reader\">The reader.</param>"
comment "/// <returns>MediaStream.</returns>"
method_declaration (+1435 nodes collapsed)
comment "/// <summary>"
comment "/// Gets the attachment."
comment "/// </summary>"
comment "/// <param name=\"reader\">The reader.</param>"
comment "/// <returns>MediaAttachment.</returns>"
method_declaration (+232 nodes collapsed)
method_declaration (+3162 nodes collapsed)
method_declaration (+133 nodes collapsed)
method_declaration (+239 nodes collapsed)
method_declaration (+827 nodes collapsed)
class_declaration (+187 nodes collapsed)
class_declaration (+106 nodes collapsed)
} "}"