Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion lib/desktop.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
require 'desktop/cli'
require 'desktop/local_image'
require 'desktop/osx'
require 'desktop/version'
require 'desktop/web_image'

require 'desktop/osx/osx'
42 changes: 42 additions & 0 deletions lib/desktop/osx/database.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
require 'sqlite3'

module Desktop
class OSX
class Database
attr_reader :connection

def initialize(connection = nil)
@connection = connection || default_connection
end

def clear_desktop_image
clear_data if data?
end

def close
connection.close
end

private

def data?
connection.execute(
"SELECT name FROM sqlite_master WHERE type='table' AND name='data'"
).any?
end

def clear_data
connection.execute 'DELETE FROM data'
connection.execute 'VACUUM data'
end

def default_connection
SQLite3::Database.new path
end

def path
File.expand_path '~/Library/Application Support/Dock/desktoppicture.db'
end
end
end
end
11 changes: 3 additions & 8 deletions lib/desktop/osx.rb → lib/desktop/osx/osx.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
require 'sqlite3'
require 'desktop/osx/database'

module Desktop
class OSX
Expand Down Expand Up @@ -58,9 +58,8 @@ def write_default_desktop(image)
end

def clear_custom_desktop_image
db = SQLite3::Database.new(desktop_image_db_path)
db.execute 'DELETE FROM data'
db.execute 'VACUUM data'
db = Database.new
db.clear_desktop_image
db.close
end

Expand All @@ -71,9 +70,5 @@ def reload_desktop
def default_desktop_image_path
'/System/Library/CoreServices/DefaultDesktop.jpg'
end

def desktop_image_db_path
File.expand_path '~/Library/Application Support/Dock/desktoppicture.db'
end
end
end
38 changes: 38 additions & 0 deletions test/desktop/osx/database_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
require 'test_helper'
require 'desktop/osx/database'

module Desktop
describe OSX::Database do
def with_connection
connection = SQLite3::Database.new ':memory:'
yield connection
ensure
connection.close
end

describe '#clear_desktop_image' do
it 'clears contents of data table' do
with_connection do |connection|
connection.execute("CREATE TABLE data (FileName STRING)")
connection.execute("INSERT INTO data VALUES ('mydesktop.png')")

refute_empty connection.execute("SELECT * FROM data")

OSX::Database.new(connection).clear_desktop_image

assert_empty connection.execute("SELECT * FROM data")
end
end

it 'does not blow up if data table does not exist' do
with_connection do |connection|
assert_empty connection.execute(
"SELECT name FROM sqlite_master WHERE type='table' AND name='data'"
)

OSX::Database.new(connection).clear_desktop_image
end
end
end
end
end
2 changes: 1 addition & 1 deletion test/desktop/osx_test.rb → test/desktop/osx/osx_test.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
require 'test_helper'
require 'desktop/osx'
require 'desktop/osx/osx'
require 'desktop/local_image'

module Desktop
Expand Down