From 925f36c33a66d17e2dd963f1432e04d789602b76 Mon Sep 17 00:00:00 2001 From: Alessio Date: Mon, 26 Feb 2024 17:37:34 -0800 Subject: [PATCH] Remove settings.yaml; add default_profile.png to profile initialization --- go.mod | 1 - go.sum | 3 +- pkg/persistence/default_profile.png | Bin 0 -> 3504 bytes pkg/persistence/profile.go | 52 +++++++--------------------- pkg/persistence/profile_test.go | 3 +- sample_data/init_data.sh | 4 +-- 6 files changed, 16 insertions(+), 47 deletions(-) create mode 100644 pkg/persistence/default_profile.png diff --git a/go.mod b/go.mod index f0f21dd..a0ff67d 100644 --- a/go.mod +++ b/go.mod @@ -15,5 +15,4 @@ require ( github.com/stretchr/testify v1.7.0 golang.org/x/net v0.9.0 golang.org/x/term v0.7.0 - gopkg.in/yaml.v2 v2.4.0 ) diff --git a/go.sum b/go.sum index b8755ff..fb58910 100644 --- a/go.sum +++ b/go.sum @@ -96,8 +96,7 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/persistence/default_profile.png b/pkg/persistence/default_profile.png new file mode 100644 index 0000000000000000000000000000000000000000..d8052f53d7e6db89046c2e6e8daa93f0b36ffcf5 GIT binary patch literal 3504 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 sD0#GOIh<>)2ub1CnyH^#A|> literal 0 HcmV?d00001 diff --git a/pkg/persistence/profile.go b/pkg/persistence/profile.go index 2fbd63b..38542be 100644 --- a/pkg/persistence/profile.go +++ b/pkg/persistence/profile.go @@ -9,7 +9,6 @@ import ( sql "github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx/reflectx" _ "github.com/mattn/go-sqlite3" - "gopkg.in/yaml.v2" "gitlab.com/offline-twitter/twitter_offline_engine/pkg/scraper" ) @@ -17,11 +16,11 @@ import ( //go:embed schema.sql var sql_init string -type Settings struct{} +//go:embed default_profile.png +var default_profile_image []byte type Profile struct { ProfileDir string - Settings Settings DB *sql.DB } @@ -40,9 +39,9 @@ func NewProfile(target_dir string) (Profile, error) { return Profile{}, fmt.Errorf("Could not create target %q:\n %w", target_dir, ErrTargetAlreadyExists) } - settings_file := filepath.Join(target_dir, "settings.yaml") sqlite_file := filepath.Join(target_dir, "twitter.db") profile_images_dir := filepath.Join(target_dir, "profile_images") + default_profile_image_file := filepath.Join(target_dir, "profile_images/default_profile.png") link_thumbnails_dir := filepath.Join(target_dir, "link_preview_images") images_dir := filepath.Join(target_dir, "images") videos_dir := filepath.Join(target_dir, "videos") @@ -62,24 +61,18 @@ func NewProfile(target_dir string) (Profile, error) { InitializeDatabaseVersion(db) db.Mapper = reflectx.NewMapperFunc("db", ToSnakeCase) - // Create `settings.yaml` - fmt.Printf("Creating............. %s\n", settings_file) - settings := Settings{} - data, err := yaml.Marshal(&settings) - if err != nil { - return Profile{}, fmt.Errorf("Error YAML-marshalling [empty!] settings file:\n %w", err) - } - err = os.WriteFile(settings_file, data, os.FileMode(0644)) - if err != nil { - return Profile{}, fmt.Errorf("Error creating settings file %q:\n %w", settings_file, err) - } - // Create `profile_images` fmt.Printf("Creating............. %s/\n", profile_images_dir) err = os.Mkdir(profile_images_dir, os.FileMode(0755)) if err != nil { return Profile{}, fmt.Errorf("Error creating %q:\n %w", profile_images_dir, err) } + // Put the default profile image in it + fmt.Printf("Creating............. %s/\n", default_profile_image_file) + err = os.WriteFile(default_profile_image_file, default_profile_image, os.FileMode(0644)) + if err != nil { + return Profile{}, fmt.Errorf("Error creating default profile image file %q:\n %w", default_profile_image, err) + } // Create `link_thumbnail_images` fmt.Printf("Creating............. %s/\n", link_thumbnails_dir) @@ -109,7 +102,7 @@ func NewProfile(target_dir string) (Profile, error) { return Profile{}, fmt.Errorf("Error creating %q:\n %w", video_thumbnails_dir, err) } - return Profile{target_dir, settings, db}, nil + return Profile{ProfileDir: target_dir, DB: db}, nil } // Loads the profile at the given location. Fails if the given directory is not a Profile. @@ -120,26 +113,9 @@ func NewProfile(target_dir string) (Profile, error) { // returns: // - the loaded Profile func LoadProfile(profile_dir string) (Profile, error) { - settings_file := filepath.Join(profile_dir, "settings.yaml") sqlite_file := filepath.Join(profile_dir, "twitter.db") - - for _, file := range []string{ - settings_file, - sqlite_file, - } { - if !file_exists(file) { - return Profile{}, fmt.Errorf("Invalid profile, could not find file: %s", file) - } - } - - settings_data, err := os.ReadFile(settings_file) - if err != nil { - return Profile{}, fmt.Errorf("Error reading %q:\n %w", settings_file, err) - } - settings := Settings{} - err = yaml.Unmarshal(settings_data, &settings) - if err != nil { - return Profile{}, fmt.Errorf("Error YAML-unmarshalling %q:\n %w", settings_file, err) + if !file_exists(sqlite_file) { + return Profile{}, fmt.Errorf("Invalid profile, could not find file: %s", sqlite_file) } db := sql.MustOpen("sqlite3", fmt.Sprintf("%s?_foreign_keys=on&_journal_mode=WAL", sqlite_file)) @@ -147,11 +123,9 @@ func LoadProfile(profile_dir string) (Profile, error) { ret := Profile{ ProfileDir: profile_dir, - Settings: settings, DB: db, } - err = ret.check_and_update_version() - + err := ret.check_and_update_version() return ret, err } diff --git a/pkg/persistence/profile_test.go b/pkg/persistence/profile_test.go index ef8ce31..9acb103 100644 --- a/pkg/persistence/profile_test.go +++ b/pkg/persistence/profile_test.go @@ -60,7 +60,7 @@ func TestNewProfile(t *testing.T) { // Check files were created contents, err := os.ReadDir(profile_path) require.NoError(err) - assert.Len(contents, 7) + assert.Len(contents, 6) expected_files := []struct { filename string @@ -69,7 +69,6 @@ func TestNewProfile(t *testing.T) { {"images", true}, {"link_preview_images", true}, {"profile_images", true}, - {"settings.yaml", false}, {"twitter.db", false}, {"video_thumbnails", true}, {"videos", true}, diff --git a/sample_data/init_data.sh b/sample_data/init_data.sh index a729ca9..3905159 100755 --- a/sample_data/init_data.sh +++ b/sample_data/init_data.sh @@ -9,14 +9,12 @@ if [[ -e "$THIS_DIR/profile" ]]; then fi mkdir $THIS_DIR/profile -touch $THIS_DIR/profile/settings.yaml -touch $THIS_DIR/profile/users.yaml - test -e $THIS_DIR/profile/twitter.db && rm $THIS_DIR/profile/twitter.db sqlite3 $THIS_DIR/profile/twitter.db < $THIS_DIR/seed_data.sql mkdir $THIS_DIR/profile/profile_images cp $THIS_DIR/kwamurai_* $THIS_DIR/profile/profile_images +cp $THIS_DIR/../pkg/persistence/default_profile.png $THIS_DIR/profile/profile_images mkdir $THIS_DIR/profile/images cp $THIS_DIR/EYG* $THIS_DIR/profile/images