Skip to content

Commit

Permalink
prune projects which fail to open from the mru
Browse files Browse the repository at this point in the history
  • Loading branch information
jjallaire committed Jul 11, 2011
1 parent cc8ea51 commit c952fc6
Show file tree
Hide file tree
Showing 13 changed files with 157 additions and 15 deletions.
3 changes: 3 additions & 0 deletions src/cpp/session/SessionClientEvent.cpp
Expand Up @@ -63,6 +63,7 @@ const int kSaveActionChanged = 36;
const int kConsoleWritePrompt = 37;
const int kConsoleWriteInput = 38;
const int kShowWarningBar = 39;
const int kOpenProjectError = 40;

}

Expand Down Expand Up @@ -157,6 +158,8 @@ std::string ClientEvent::typeName() const
return "console_write_input";
case client_events::kShowWarningBar:
return "show_warning_bar";
case client_events::kOpenProjectError:
return "open_project_error";
default:
LOG_WARNING_MESSAGE("unexpected event type: " +
boost::lexical_cast<std::string>(type_));
Expand Down
Expand Up @@ -62,6 +62,7 @@ extern const int kSaveActionChanged;
extern const int kConsoleWritePrompt;
extern const int kConsoleWriteInput;
extern const int kShowWarningBar;
extern const int kOpenProjectError;
}

class ClientEvent
Expand Down
12 changes: 7 additions & 5 deletions src/cpp/session/projects/SessionProjects.cpp
Expand Up @@ -173,11 +173,13 @@ void startup()
error.addProperty("user-msg", userErrMsg);
LOG_ERROR(error);

// show the error
std::string msg =
"Project '" + projectFilePath.absolutePath() + "' "
"could not be opened: " + userErrMsg;
module_context::showErrorMessage("Error Opening Project", msg);
// enque the error
json::Object openProjError;
openProjError["project"] = module_context::createAliasedPath(
projectFilePath);
openProjError["message"] = userErrMsg;
ClientEvent event(client_events::kOpenProjectError, openProjError);
module_context::enqueClientEvent(event);
}
}

Expand Down
Expand Up @@ -24,7 +24,7 @@
import org.rstudio.studio.client.application.model.SaveAction;
import org.rstudio.studio.client.common.GlobalDisplay;
import org.rstudio.studio.client.common.filetypes.FileTypeRegistry;
import org.rstudio.studio.client.common.filetypes.events.OpenProjectFileEvent;
import org.rstudio.studio.client.projects.events.OpenProjectFileEvent;
import org.rstudio.studio.client.server.Server;
import org.rstudio.studio.client.workbench.WorkbenchContext;
import org.rstudio.studio.client.workbench.commands.Commands;
Expand Down
32 changes: 27 additions & 5 deletions src/gwt/src/org/rstudio/studio/client/projects/Projects.java
Expand Up @@ -20,8 +20,11 @@
import org.rstudio.studio.client.application.ApplicationQuit;
import org.rstudio.studio.client.application.events.EventBus;
import org.rstudio.studio.client.common.FileDialogs;
import org.rstudio.studio.client.common.filetypes.events.OpenProjectFileEvent;
import org.rstudio.studio.client.common.filetypes.events.OpenProjectFileHandler;
import org.rstudio.studio.client.common.GlobalDisplay;
import org.rstudio.studio.client.projects.events.OpenProjectFileEvent;
import org.rstudio.studio.client.projects.events.OpenProjectFileHandler;
import org.rstudio.studio.client.projects.events.OpenProjectErrorEvent;
import org.rstudio.studio.client.projects.events.OpenProjectErrorHandler;
import org.rstudio.studio.client.projects.events.SwitchToProjectEvent;
import org.rstudio.studio.client.projects.events.SwitchToProjectHandler;
import org.rstudio.studio.client.projects.model.ProjectsServerOperations;
Expand All @@ -39,12 +42,14 @@

@Singleton
public class Projects implements OpenProjectFileHandler,
SwitchToProjectHandler
SwitchToProjectHandler,
OpenProjectErrorHandler
{
public interface Binder extends CommandBinder<Commands, Projects> {}

@Inject
public Projects(final Session session,
public Projects(GlobalDisplay globalDisplay,
final Session session,
Provider<ProjectMRUList> pMRUList,
FileDialogs fileDialogs,
RemoteFileSystemContext fsContext,
Expand All @@ -54,6 +59,7 @@ public Projects(final Session session,
Binder binder,
final Commands commands)
{
globalDisplay_ = globalDisplay;
pMRUList_ = pMRUList;
applicationQuit_ = applicationQuit;
server_ = server;
Expand All @@ -62,6 +68,7 @@ public Projects(final Session session,

binder.bind(commands, this);

eventBus.addHandler(OpenProjectErrorEvent.TYPE, this);
eventBus.addHandler(SwitchToProjectEvent.TYPE, this);
eventBus.addHandler(OpenProjectFileEvent.TYPE, this);

Expand Down Expand Up @@ -223,14 +230,29 @@ public void onReadyToQuit(final boolean saveChanges)
applicationQuit_.performQuit(saveChanges, event.getProject());
}});
}

@Override
public void onOpenProjectError(OpenProjectErrorEvent event)
{
// show error dialog
String msg = "Project '" + event.getProject() + "' " +
"could not be opened: " + event.getMessage();
globalDisplay_.showErrorMessage("Error Opening Project", msg);

// remove from mru list
pMRUList_.get().remove(event.getProject());
}


private final Provider<ProjectMRUList> pMRUList_;
private final ApplicationQuit applicationQuit_;
private final ProjectsServerOperations server_;
private final FileDialogs fileDialogs_;
private final RemoteFileSystemContext fsContext_;
private final GlobalDisplay globalDisplay_;

private static final String NONE = "none";




}
@@ -0,0 +1,52 @@
/*
* OpenProjectFileEvent.java
*
* Copyright (C) 2009-11 by RStudio, Inc.
*
* This program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.projects.events;

import org.rstudio.studio.client.projects.model.OpenProjectError;

import com.google.gwt.event.shared.GwtEvent;

public class OpenProjectErrorEvent extends GwtEvent<OpenProjectErrorHandler>
{
public static final GwtEvent.Type<OpenProjectErrorHandler> TYPE =
new GwtEvent.Type<OpenProjectErrorHandler>();

public OpenProjectErrorEvent(OpenProjectError error)
{
error_ = error;
}

public String getProject()
{
return error_.getProject();
}

public String getMessage()
{
return error_.getMessage();
}

@Override
protected void dispatch(OpenProjectErrorHandler handler)
{
handler.onOpenProjectError(this);
}

@Override
public GwtEvent.Type<OpenProjectErrorHandler> getAssociatedType()
{
return TYPE;
}

private final OpenProjectError error_;
}
@@ -0,0 +1,20 @@
/*
* OpenProjectFileHandler.java
*
* Copyright (C) 2009-11 by RStudio, Inc.
*
* This program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.projects.events;

import com.google.gwt.event.shared.EventHandler;

public interface OpenProjectErrorHandler extends EventHandler
{
void onOpenProjectError(OpenProjectErrorEvent event);
}
Expand Up @@ -10,7 +10,7 @@
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.common.filetypes.events;
package org.rstudio.studio.client.projects.events;

import com.google.gwt.event.shared.GwtEvent;
import org.rstudio.core.client.files.FileSystemItem;
Expand Down
Expand Up @@ -10,7 +10,7 @@
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.common.filetypes.events;
package org.rstudio.studio.client.projects.events;

import com.google.gwt.event.shared.EventHandler;

Expand Down
@@ -0,0 +1,36 @@
/*
* OpenProjectError.java
*
* Copyright (C) 2009-11 by RStudio, Inc.
*
* This program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.projects.model;

import com.google.gwt.core.client.JavaScriptObject;

public class OpenProjectError extends JavaScriptObject
{

protected OpenProjectError()
{

}

public native final String getProject() /*-{
return this.project;
}-*/;


public native final String getMessage() /*-{
return this.message;
}-*/;



}
Expand Up @@ -29,6 +29,8 @@
import org.rstudio.studio.client.application.events.*;
import org.rstudio.studio.client.application.model.SaveAction;
import org.rstudio.studio.client.application.model.SessionSerializationAction;
import org.rstudio.studio.client.projects.events.OpenProjectErrorEvent;
import org.rstudio.studio.client.projects.model.OpenProjectError;
import org.rstudio.studio.client.server.Bool;
import org.rstudio.studio.client.server.ServerError;
import org.rstudio.studio.client.server.ServerRequestCallback;
Expand Down Expand Up @@ -111,6 +113,7 @@ static class ClientEvent extends JavaScriptObject
public static final String AsyncCompletion = "async_completion";
public static final String SaveActionChanged = "save_action_changed";
public static final String ShowWarningBar = "show_warning_bar";
public static final String OpenProjectError = "open_project_error";

protected ClientEvent()
{
Expand Down Expand Up @@ -633,6 +636,11 @@ else if (type.equals(ClientEvent.ShowWarningBar))
WarningBarMessage message = event.getData();
eventBus.fireEvent(new ShowWarningBarEvent(message));
}
else if (type.equals(ClientEvent.OpenProjectError))
{
OpenProjectError error = event.getData();
eventBus.fireEvent(new OpenProjectErrorEvent(error));
}
else if (type.equals(ClientEvent.Quit))
{
// NOTE: we don't explicily stop listending for events here
Expand Down
Expand Up @@ -41,7 +41,6 @@
import org.rstudio.studio.client.application.events.EventBus;
import org.rstudio.studio.client.application.ui.appended.ApplicationEndedPopupPanel;
import org.rstudio.studio.client.workbench.FileMRUList;
import org.rstudio.studio.client.workbench.MRUList;
import org.rstudio.studio.client.workbench.WorkbenchMainView;
import org.rstudio.studio.client.workbench.commands.Commands;
import org.rstudio.studio.client.workbench.events.*;
Expand Down
Expand Up @@ -47,7 +47,6 @@
import org.rstudio.studio.client.server.ServerRequestCallback;
import org.rstudio.studio.client.server.VoidServerRequestCallback;
import org.rstudio.studio.client.workbench.FileMRUList;
import org.rstudio.studio.client.workbench.MRUList;
import org.rstudio.studio.client.workbench.WorkbenchContext;
import org.rstudio.studio.client.workbench.commands.Commands;
import org.rstudio.studio.client.workbench.model.RemoteFileSystemContext;
Expand Down

0 comments on commit c952fc6

Please sign in to comment.