Skip to content

Commit 319055d

Browse files
committed
Drop Scratch version API
Resolves #496
1 parent 938396c commit 319055d

File tree

8 files changed

+27
-186
lines changed

8 files changed

+27
-186
lines changed

include/scratchcpp/global.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,6 @@
2323
namespace libscratchcpp
2424
{
2525

26-
enum class ScratchVersion
27-
{
28-
Invalid = 0, /*!< An unsupported version. */
29-
Scratch3 = 3 /*!< Scratch 3.0 */
30-
};
31-
3226
class VirtualMachine;
3327
class Compiler;
3428
class Block;

include/scratchcpp/project.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ class LIBSCRATCHCPP_EXPORT Project
2626
public:
2727
Project();
2828
Project(const std::string &fileName);
29-
Project(const std::string &fileName, ScratchVersion scratchVersion);
3029
Project(const Project &) = delete;
3130

3231
bool load();
@@ -38,9 +37,6 @@ class LIBSCRATCHCPP_EXPORT Project
3837
const std::string &fileName() const;
3938
void setFileName(const std::string &newFileName);
4039

41-
ScratchVersion scratchVersion() const;
42-
void setScratchVersion(const ScratchVersion &version);
43-
4440
std::shared_ptr<IEngine> engine() const;
4541

4642
sigslot::signal<unsigned int, unsigned int> &downloadProgressChanged();

src/project.cpp

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,6 @@ Project::Project(const std::string &fileName) :
2121
{
2222
}
2323

24-
/*!
25-
* Constructs ScratchProjects with the given file name, for the given Scratch version.
26-
* \note You shouldn't normally use this constructor because the Scratch version is determined automatically.
27-
*/
28-
Project::Project(const std::string &fileName, ScratchVersion scratchVersion) :
29-
impl(spimpl::make_unique_impl<ProjectPrivate>(fileName, scratchVersion))
30-
{
31-
}
32-
3324
/*! Loads the project. Returns true if successful. */
3425
bool Project::load()
3526
{
@@ -75,22 +66,6 @@ const std::string &Project::fileName() const
7566
void Project::setFileName(const std::string &newFileName)
7667
{
7768
impl->fileName = newFileName;
78-
impl->detectScratchVersion();
79-
}
80-
81-
/*! Returns the version of Scratch used for the project. */
82-
ScratchVersion Project::scratchVersion() const
83-
{
84-
return impl->scratchVersion;
85-
}
86-
87-
/*!
88-
* Sets the version of Scratch.
89-
* \note You shouldn't use this as the Scratch version is automatically determined.
90-
*/
91-
void Project::setScratchVersion(const ScratchVersion &version)
92-
{
93-
impl->setScratchVersion(version);
9469
}
9570

9671
/*! Returns the engine of the loaded project. \see IEngine */

src/project_p.cpp

Lines changed: 13 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -25,33 +25,28 @@ ProjectPrivate::ProjectPrivate() :
2525
}
2626

2727
ProjectPrivate::ProjectPrivate(const std::string &fileName) :
28-
ProjectPrivate()
29-
{
30-
this->fileName = fileName;
31-
32-
// Auto detect Scratch version
33-
detectScratchVersion();
34-
}
35-
36-
ProjectPrivate::ProjectPrivate(const std::string &fileName, ScratchVersion scratchVersion) :
3728
fileName(fileName),
3829
engine(std::make_shared<Engine>())
3930
{
40-
setScratchVersion(scratchVersion);
31+
this->fileName = fileName;
4132
}
4233

4334
bool ProjectPrivate::load()
4435
{
4536
std::shared_ptr<IProjectReader> reader;
46-
switch (scratchVersion) {
47-
case ScratchVersion::Invalid:
48-
std::cerr << "Could not read the project because version is set to invalid." << std::endl;
49-
return false;
50-
case ScratchVersion::Scratch3:
51-
reader = std::make_shared<Scratch3Reader>();
52-
break;
53-
}
5437

38+
// Scratch 3
39+
reader = std::make_shared<Scratch3Reader>();
40+
41+
if (tryLoad(reader.get()))
42+
return true;
43+
44+
std::cerr << "Unsupported Scratch version." << std::endl;
45+
return false;
46+
}
47+
48+
bool ProjectPrivate::tryLoad(IProjectReader *reader)
49+
{
5550
// Load from URL
5651
ProjectUrl url(fileName);
5752

@@ -114,7 +109,6 @@ bool ProjectPrivate::load()
114109
// Load from file
115110
reader->setFileName(fileName);
116111
if (!reader->isValid()) {
117-
scratchVersion = ScratchVersion::Invalid;
118112
std::cerr << "Could not read the project." << std::endl;
119113
return false;
120114
}
@@ -149,40 +143,6 @@ void ProjectPrivate::runEventLoop()
149143
engine->runEventLoop();
150144
}
151145

152-
void ProjectPrivate::detectScratchVersion()
153-
{
154-
ProjectUrl url(fileName);
155-
156-
scratchVersion = ScratchVersion::Invalid;
157-
Scratch3Reader scratch3;
158-
159-
if (url.isProjectUrl()) {
160-
if (!downloader->downloadJson(url.projectId())) {
161-
std::cerr << "Failed to download the project file." << std::endl;
162-
return;
163-
}
164-
165-
scratch3.loadData(downloader->json());
166-
} else
167-
scratch3.setFileName(fileName);
168-
169-
if (scratch3.isValid())
170-
scratchVersion = ScratchVersion::Scratch3;
171-
172-
if (scratchVersion == ScratchVersion::Invalid)
173-
std::cerr << "Unable to determine Scratch version." << std::endl;
174-
}
175-
176-
void ProjectPrivate::setScratchVersion(ScratchVersion version)
177-
{
178-
// TODO: Use this when more versions become supported
179-
// if((version >= Version::Scratch3) && (version <= Version::Scratch3))
180-
if (version == ScratchVersion::Scratch3)
181-
scratchVersion = version;
182-
else
183-
std::cerr << "Unsupported Scratch version: " << static_cast<int>(version) << std::endl;
184-
}
185-
186146
sigslot::signal<unsigned int, unsigned int> &ProjectPrivate::downloadProgressChanged()
187147
{
188148
return downloader->downloadProgressChanged();

src/project_p.h

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,28 +9,25 @@ namespace libscratchcpp
99
{
1010

1111
class IEngine;
12+
class IProjectReader;
1213
class IProjectDownloaderFactory;
1314
class IProjectDownloader;
1415

1516
struct ProjectPrivate
1617
{
1718
ProjectPrivate();
1819
ProjectPrivate(const std::string &fileName);
19-
ProjectPrivate(const std::string &fileName, ScratchVersion scratchVersion);
2020
ProjectPrivate(const ProjectPrivate &) = delete;
2121

2222
bool load();
23+
bool tryLoad(IProjectReader *reader);
2324

2425
void start();
2526
void run();
2627
void runEventLoop();
2728

28-
void detectScratchVersion();
29-
void setScratchVersion(ScratchVersion version);
30-
3129
sigslot::signal<unsigned int, unsigned int> &downloadProgressChanged();
3230

33-
ScratchVersion scratchVersion = ScratchVersion::Invalid;
3431
std::string fileName;
3532
std::shared_ptr<IEngine> engine = nullptr;
3633

test/compiler/compiler_test.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ TEST_F(CompilerTest, Lists)
159159

160160
TEST_F(CompilerTest, EmptyProject)
161161
{
162-
ProjectPrivate p("empty_project.sb3", ScratchVersion::Scratch3);
162+
ProjectPrivate p("empty_project.sb3");
163163
ASSERT_TRUE(p.load());
164164
auto engine = p.engine;
165165
ASSERT_EQ(engine->targets().size(), 1);
@@ -171,7 +171,7 @@ TEST_F(CompilerTest, EmptyProject)
171171

172172
TEST_F(CompilerTest, ResolveIds)
173173
{
174-
ProjectPrivate p("resolve_id_test.sb3", ScratchVersion::Scratch3);
174+
ProjectPrivate p("resolve_id_test.sb3");
175175
ASSERT_TRUE(p.load());
176176
auto engine = p.engine;
177177
ASSERT_EQ(engine->targets().size(), 2);

test/load_project/load_project_test.cpp

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
using namespace libscratchcpp;
2424

25-
static const std::vector<ScratchVersion> scratchVersions = { ScratchVersion::Scratch3 };
2625
static const std::vector<std::string> fileExtensions = { ".sb3" };
2726

2827
using ::testing::Return;
@@ -31,8 +30,8 @@ using ::testing::ReturnRef;
3130
TEST(LoadProjectTest, EmptyProject)
3231
{
3332
int i = 0;
34-
for (auto version : scratchVersions) {
35-
Project p("empty_project" + fileExtensions[i], version);
33+
for (auto ext : fileExtensions) {
34+
Project p("empty_project" + ext);
3635

3736
ASSERT_TRUE(p.load());
3837

@@ -99,11 +98,6 @@ TEST(LoadProjectTest, DownloadDefaultProject)
9998
};
10099
static const std::vector<std::string> assetData = { "a", "b", "c", "d", "e" };
101100

102-
EXPECT_CALL(*downloader, downloadJson("ABCDEFGH")).WillOnce(Return(true));
103-
EXPECT_CALL(*downloader, json()).WillOnce(ReturnRef(data));
104-
p.detectScratchVersion();
105-
ASSERT_EQ(p.scratchVersion, ScratchVersion::Scratch3);
106-
107101
EXPECT_CALL(*downloader, downloadJson("ABCDEFGH")).WillOnce(Return(true));
108102
EXPECT_CALL(*downloader, json()).WillOnce(ReturnRef(data));
109103
EXPECT_CALL(*downloader, downloadAssets(assets)).WillOnce(Return(true));
@@ -168,15 +162,8 @@ TEST(LoadProjectTest, DownloadDefaultProjectFailure)
168162
static const std::vector<std::string> assetData = { "a", "b", "c", "d", "e" };
169163

170164
EXPECT_CALL(*downloader, downloadJson("ABCDEFGH")).WillOnce(Return(false));
171-
p.detectScratchVersion();
172-
ASSERT_EQ(p.scratchVersion, ScratchVersion::Invalid);
173165
ASSERT_FALSE(p.load());
174166

175-
EXPECT_CALL(*downloader, downloadJson("ABCDEFGH")).WillOnce(Return(true));
176-
EXPECT_CALL(*downloader, json()).WillOnce(ReturnRef(data));
177-
p.detectScratchVersion();
178-
ASSERT_EQ(p.scratchVersion, ScratchVersion::Scratch3);
179-
180167
EXPECT_CALL(*downloader, downloadJson("ABCDEFGH")).WillOnce(Return(false));
181168
ASSERT_FALSE(p.load());
182169

@@ -195,8 +182,8 @@ TEST(LoadProjectTest, DownloadDefaultProjectFailure)
195182
TEST(LoadProjectTest, LoadTestProject)
196183
{
197184
int i = 0;
198-
for (auto version : scratchVersions) {
199-
Project p("load_test" + fileExtensions[i], version);
185+
for (auto ext : fileExtensions) {
186+
Project p("load_test" + ext);
200187

201188
ASSERT_TRUE(p.load());
202189

@@ -647,8 +634,8 @@ TEST(LoadProjectTest, LoadTestProject)
647634
TEST(LoadProjectTest, LoadTopLevelReporterProject)
648635
{
649636
int i = 0;
650-
for (auto version : scratchVersions) {
651-
Project p("top_level_reporter" + fileExtensions[i], version);
637+
for (auto ext : fileExtensions) {
638+
Project p("top_level_reporter" + ext);
652639

653640
ASSERT_TRUE(p.load());
654641

@@ -688,11 +675,10 @@ TEST(LoadProjectTest, LoadTopLevelReporterProject)
688675
TEST(LoadProjectTest, ProjectTest)
689676
{
690677
int i = 0;
691-
for (auto version : scratchVersions) {
692-
std::string name = "load_test" + fileExtensions[i];
693-
Project p(name, version);
678+
for (auto ext : fileExtensions) {
679+
std::string name = "load_test" + ext;
680+
Project p(name);
694681
ASSERT_EQ(p.fileName(), name);
695-
ASSERT_EQ(p.scratchVersion(), version);
696682
ASSERT_TRUE(p.load());
697683

698684
auto engine = p.engine();
@@ -709,15 +695,6 @@ TEST(LoadProjectTest, ProjectTest)
709695
}
710696
}
711697

712-
TEST(LoadProjectTest, ProjectInvalidTest)
713-
{
714-
std::string name = "load_test.sb3";
715-
Project p(name, ScratchVersion::Invalid);
716-
ASSERT_EQ(p.fileName(), name);
717-
ASSERT_EQ(p.scratchVersion(), ScratchVersion::Invalid);
718-
ASSERT_FALSE(p.load());
719-
}
720-
721698
TEST(LoadProjectTest, LoadNullDimensionMonitor)
722699
{
723700
// Regtest for #448

0 commit comments

Comments
 (0)