Author: dongxu
Date: Thu Sep 12 03:59:31 2013
New Revision: 1522281
URL: http://svn.apache.org/r1522281
Log:
use GinFactoryModuleBuilder to inject multiple displayable instances of some
activities
Added:
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/FolderListFactory.java
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/ActivityManagerInitializer.java~HEAD
- copied, changed from r1522280,
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/ActivityManagerInitializer.java
Removed:
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaActivityManagerInitializer.java
Modified:
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaController.java
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/FolderListActivity.java
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/AppGinModule.java
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/ActivityManagerInitializer.java
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/FolderListActivityMapper.java
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MailFolderPlace.java
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FolderListView.java
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageListView.java
Modified:
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaController.java
URL:
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaController.java?rev=1522281&r1=1522280&r2=1522281&view=diff
==============================================================================
---
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaController.java
(original)
+++
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaController.java
Thu Sep 12 03:59:31 2013
@@ -23,6 +23,7 @@ package org.apache.hupa.client;
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
+<<<<<<< HEAD
import org.apache.hupa.client.activity.NotificationActivity;
import org.apache.hupa.client.activity.ToolBarActivity;
import org.apache.hupa.client.activity.TopBarActivity;
@@ -32,6 +33,9 @@ import org.apache.hupa.client.place.Cont
import org.apache.hupa.client.place.FolderPlace;
import org.apache.hupa.client.place.HupaPlace;
import org.apache.hupa.client.place.SettingPlace;
+=======
+import org.apache.hupa.client.mapper.ActivityManagerInitializer;
+>>>>>>> use GinFactoryModuleBuilder to inject multiple displayable instances
of some activities
import org.apache.hupa.client.rf.CheckSessionRequest;
import org.apache.hupa.client.rf.HupaRequestFactory;
import org.apache.hupa.client.rf.IdleRequest;
@@ -117,8 +121,12 @@ public class HupaController {
>>>>>>> move new theme ui from experiment to hupa evo
=======
public HupaController(EventBus eventBus,
+<<<<<<< HEAD
HupaActivityManagerInitializer
initializeActivityManagerByGin) {
>>>>>>> make login page as one part of the overall layout & splite layout to
>>>>>>> little one
+=======
+ ActivityManagerInitializer
initializeActivityManagerByGin) {
+>>>>>>> use GinFactoryModuleBuilder to inject multiple displayable instances
of some activities
eventBus.addHandler(PlaceChangeEvent.TYPE, new
PlaceChangHandler());
}
Modified:
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/FolderListActivity.java
URL:
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/FolderListActivity.java?rev=1522281&r1=1522280&r2=1522281&view=diff
==============================================================================
---
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/FolderListActivity.java
(original)
+++
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/FolderListActivity.java
Thu Sep 12 03:59:31 2013
@@ -20,6 +20,7 @@
package org.apache.hupa.client.activity;
<<<<<<< HEAD
+<<<<<<< HEAD
import org.apache.hupa.shared.events.RefreshUnreadEvent;
import org.apache.hupa.shared.events.RefreshUnreadEventHandler;
@@ -27,9 +28,13 @@ import com.google.gwt.event.shared.Event
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.IsWidget;
=======
+=======
+import org.apache.hupa.client.ioc.FolderListFactory;
+>>>>>>> use GinFactoryModuleBuilder to inject multiple displayable instances
of some activities
import org.apache.hupa.client.ui.WidgetDisplayable;
import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.place.shared.Place;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
>>>>>>> integrate all of the views to their corresponding activities and
>>>>>>> mappers
import com.google.inject.Inject;
@@ -38,10 +43,19 @@ public class FolderListActivity extends
<<<<<<< HEAD
<<<<<<< HEAD
+<<<<<<< HEAD
@Inject private Displayable display;
+=======
+ @Inject private FolderListFactory folderListFactory;
+ private Place place;
+ private Displayable display;
+>>>>>>> use GinFactoryModuleBuilder to inject multiple displayable instances
of some activities
@Override
public void start(AcceptsOneWidget container, EventBus eventBus) {
+ if (display == null) {
+ display = folderListFactory.create(place);
+ }
container.setWidget(display.asWidget());
bindTo(eventBus);
}
@@ -56,6 +70,7 @@ public class FolderListActivity extends
});
}
+<<<<<<< HEAD
public interface Displayable extends IsWidget {
void refresh();
}
@@ -75,6 +90,16 @@ public class FolderListActivity extends
public interface Displayable extends WidgetDisplayable {}
>>>>>>> integrate all of the views to their corresponding activities and
>>>>>>> mappers
=======
+=======
+ public FolderListActivity with(Place place) {
+ if (display == null ||
!place.getClass().equals(this.place.getClass())) {
+ display = folderListFactory.create(place);
+ this.place = place;
+ }
+ return this;
+ }
+
+>>>>>>> use GinFactoryModuleBuilder to inject multiple displayable instances
of some activities
public interface Displayable extends WidgetDisplayable {
}
>>>>>>> make reload mail folder place work, fixed issue #7
Modified:
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/AppGinModule.java
URL:
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/AppGinModule.java?rev=1522281&r1=1522280&r2=1522281&view=diff
==============================================================================
---
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/AppGinModule.java
(original)
+++
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/AppGinModule.java
Thu Sep 12 03:59:31 2013
@@ -249,6 +249,7 @@ import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.inject.client.AbstractGinModule;
+import com.google.gwt.inject.client.assistedinject.GinFactoryModuleBuilder;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.place.shared.PlaceHistoryHandler;
import com.google.gwt.place.shared.PlaceHistoryMapper;
@@ -265,6 +266,7 @@ import com.google.gwt.user.cellview.clie
>>>>>>> refactoring.
import com.google.inject.Provides;
import com.google.inject.Singleton;
+import com.google.inject.assistedinject.FactoryModuleBuilder;
import com.google.inject.name.Named;
<<<<<<< HEAD
@@ -473,12 +475,14 @@ public class AppGinModule extends Abstra
bind(LogoActivity.Displayable.class).to(LogoView.class);
bind(NavigationActivity.Displayable.class).to(NavigationView.class);
bind(ToolBarActivity.Displayable.class).to(ToolBarView.class);
-
bind(FolderListActivity.Displayable.class).to(FolderListView.class);
+//
bind(FolderListActivity.Displayable.class).to(FolderListView.class);
bind(MessageListActivity.Displayable.class).to(MessageListView.class);
-
bind(MessageListFooterActivity.Displayable.class).to(MessageListFooterView.class);
-
bind(MessageContentActivity.Displayable.class).to(MessageContentView.class);
+ bind(MessageListFooterActivity.Displayable.class).to(
+ MessageListFooterView.class);
+ bind(MessageContentActivity.Displayable.class).to(
+ MessageContentView.class);
bind(StatusActivity.Displayable.class).to(StatusView.class);
-
+
bind(LoginActivity.class).in(Singleton.class);
bind(TopBarActivity.class).in(Singleton.class);
bind(LogoActivity.class).in(Singleton.class);
@@ -486,11 +490,9 @@ public class AppGinModule extends Abstra
bind(ToolBarActivity.class).in(Singleton.class);
bind(FolderListActivity.class).in(Singleton.class);
bind(MessageListActivity.class).in(Singleton.class);
-// bind(MessageListFooterActivity.class).in(Singleton.class);
-// bind(MessageContentActivity.class).in(Singleton.class);
-// bind(StatusActivity.class).in(Singleton.class);
-
-
+ // bind(MessageListFooterActivity.class).in(Singleton.class);
+ // bind(MessageContentActivity.class).in(Singleton.class);
+ // bind(StatusActivity.class).in(Singleton.class);
>>>>>>> integrate all of the views to their corresponding activities and
>>>>>>> mappers
bind(TopActivity.Displayable.class).to(TopView.class);
@@ -575,6 +577,9 @@ public class AppGinModule extends Abstra
bind(HupaController.class).in(Singleton.class);
>>>>>>> move new theme ui from experiment to hupa evo
+ install(new GinFactoryModuleBuilder().implement(
+ FolderListActivity.Displayable.class,
FolderListView.class)
+ .build(FolderListFactory.class));
//
bind(ExceptionHandler.class).to(DefaultExceptionHandler.class);
}
<<<<<<< HEAD
@@ -680,6 +685,7 @@ public class AppGinModule extends Abstra
return new ActivityManager(activityMapper, eventBus);
}
<<<<<<< HEAD
+<<<<<<< HEAD
>>>>>>> integrate all of the views to their corresponding activities and
>>>>>>> mappers
=======
@@ -828,6 +834,11 @@ public class AppGinModule extends Abstra
>>>>>>> track the folder list tree model issue of invalid session, TODO how to
>>>>>>> retrieve folders data using GIN
@Provides
@Singleton
+=======
+
+ @Provides
+ @Singleton
+>>>>>>> use GinFactoryModuleBuilder to inject multiple displayable instances
of some activities
public PlaceController getPlaceController(EventBus eventBus) {
return new PlaceController(eventBus);
}
Added:
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/FolderListFactory.java
URL:
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/FolderListFactory.java?rev=1522281&view=auto
==============================================================================
---
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/FolderListFactory.java
(added)
+++
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/FolderListFactory.java
Thu Sep 12 03:59:31 2013
@@ -0,0 +1,28 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.hupa.client.ioc;
+
+import org.apache.hupa.client.activity.FolderListActivity;
+
+import com.google.gwt.place.shared.Place;
+
+public interface FolderListFactory {
+ FolderListActivity.Displayable create(Place place);
+}
Modified:
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/ActivityManagerInitializer.java
URL:
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/ActivityManagerInitializer.java?rev=1522281&r1=1522280&r2=1522281&view=diff
==============================================================================
---
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/ActivityManagerInitializer.java
(original)
+++
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/ActivityManagerInitializer.java
Thu Sep 12 03:59:31 2013
@@ -33,36 +33,21 @@ import com.google.inject.name.Named;
public class ActivityManagerInitializer {
@Inject
- public ActivityManagerInitializer(LoginLayoutable loginLayout,
HupaLayoutable hupaLayout,
-
- @Named("ContactsListRegion") ActivityManager
contactsListActivityManager,
- @Named("ContactPropertiesRegion") ActivityManager
contactPropertiesActivityManager,
- @Named("LabelListRegion") ActivityManager
labelListActivityManager,
- @Named("SettingNavRegion") ActivityManager
settingNavActivityManager,
- @Named("LabelPropertiesRegion") ActivityManager
labelPropertiesActivityManager,
+ public ActivityManagerInitializer(LoginLayoutable loginLayout,
+ HupaLayoutable hupaLayout,
@Named("LoginPage") ActivityManager
loginActivityManager,
@Named("TopBarRegion") ActivityManager
topBarActivityManager,
@Named("LogoRegion") ActivityManager
logoActivityManager,
- @Named("NotificationRegion") ActivityManager
notificationActivityManager,
@Named("NavigationRegion") ActivityManager
navigationActivityManager,
@Named("ToolBarRegion") ActivityManager
toolBarActivityManager,
@Named("FolderListRegion") ActivityManager
folderListActivityManager,
@Named("MessageListRegion") ActivityManager
messageListActivityManager,
@Named("MessageListFooterRegion") ActivityManager
messageListFooterActivityManager,
@Named("MessageContentRegion") ActivityManager
messageContentActivityManager,
- @Named("StatusRegion") ActivityManager
statusActivityManager,
- @Named("ComposeToolBarRegion") ActivityManager
composeToolBarActivityManager,
- @Named("SearchBoxRegion") ActivityManager
searchBoxActivityManager,
- @Named("ComposeRegion") ActivityManager
composeActivityManager) {
-
contactsListActivityManager.setDisplay(hupaLayout.getContactsListView());
-
contactPropertiesActivityManager.setDisplay(hupaLayout.getContactPropertiesView());
-
labelPropertiesActivityManager.setDisplay(hupaLayout.getLabelPropertiesView());
-
labelListActivityManager.setDisplay(hupaLayout.getLabelListView());
-
settingNavActivityManager.setDisplay(hupaLayout.getSettingNavView());
+ @Named("StatusRegion") ActivityManager
statusActivityManager) {
loginActivityManager.setDisplay(loginLayout.getLoginView());
topBarActivityManager.setDisplay(hupaLayout.getTopBarView());
logoActivityManager.setDisplay(hupaLayout.getLogoView());
-
notificationActivityManager.setDisplay(hupaLayout.getNotificationView());
navigationActivityManager.setDisplay(hupaLayout.getNavigationView());
toolBarActivityManager.setDisplay(hupaLayout.getToolBarView());
folderListActivityManager.setDisplay(hupaLayout.getFolderListView());
@@ -70,9 +55,6 @@ public class ActivityManagerInitializer
messageListFooterActivityManager.setDisplay(hupaLayout.getMessageListFooterView());
messageContentActivityManager.setDisplay(hupaLayout.getMessageContentView());
statusActivityManager.setDisplay(hupaLayout.getStatusView());
-
composeToolBarActivityManager.setDisplay(hupaLayout.getComposeToolBarView());
-
searchBoxActivityManager.setDisplay(hupaLayout.getSearchBoxView());
- composeActivityManager.setDisplay(hupaLayout.getComposeView());
}
}
Copied:
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/ActivityManagerInitializer.java~HEAD
(from r1522280,
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/ActivityManagerInitializer.java)
URL:
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/ActivityManagerInitializer.java%7EHEAD?p2=james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/ActivityManagerInitializer.java%7EHEAD&p1=james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/ActivityManagerInitializer.java&r1=1522280&r2=1522281&rev=1522281&view=diff
==============================================================================
(empty)
Modified:
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/FolderListActivityMapper.java
URL:
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/FolderListActivityMapper.java?rev=1522281&r1=1522280&r2=1522281&view=diff
==============================================================================
---
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/FolderListActivityMapper.java
(original)
+++
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/FolderListActivityMapper.java
Thu Sep 12 03:59:31 2013
@@ -54,7 +54,7 @@ public class FolderListActivityMapper ex
public class FolderListActivityMapper implements ActivityMapper {
>>>>>>> integrate all of the views to their corresponding activities and
>>>>>>> mappers
private final Provider<FolderListActivity> folderListActivityProvider;
-
+
@Inject
public FolderListActivityMapper(
Provider<FolderListActivity>
folderListActivityProvider) {
@@ -62,6 +62,7 @@ public class FolderListActivityMapper im
}
<<<<<<< HEAD
+<<<<<<< HEAD
@Override
Activity asyncLoadActivity(final Place place) {
if (place instanceof SettingPlace)
@@ -86,6 +87,9 @@ public class FolderListActivityMapper im
return folderListActivityProvider.get();
>>>>>>> integrate all of the views to their corresponding activities and
>>>>>>> mappers
=======
+=======
+ public Activity getActivity(final Place place) {
+>>>>>>> use GinFactoryModuleBuilder to inject multiple displayable instances
of some activities
if (place instanceof MailFolderPlace) {
return new ActivityAsyncProxy() {
@Override
@@ -95,7 +99,7 @@ public class FolderListActivityMapper im
@Override
protected Activity createInstance() {
- return folderListActivityProvider.get();
+ return
folderListActivityProvider.get().with(place);
}
};
Modified:
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MailFolderPlace.java
URL:
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MailFolderPlace.java?rev=1522281&r1=1522280&r2=1522281&view=diff
==============================================================================
---
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MailFolderPlace.java
(original)
+++
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MailFolderPlace.java
Thu Sep 12 03:59:31 2013
@@ -30,7 +30,8 @@ public class MailFolderPlace extends Abs
/**
* Folder places look like: #Mock-Inbox, #INBOX,<br>
- * while message places: #Mock-Inbox/10, #INBOX/1234,
#%5BGmail%5DDrafts/18
+ * while message places: #Mock-Inbox/10, #INBOX/1234,
+ * #%5BGmail%5DDrafts/18
*
* @param token
*/
@@ -86,4 +87,29 @@ public class MailFolderPlace extends Abs
return token.toString();
}
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == null)
+ return false;
+ if (o == this)
+ return true;
+ if (o.getClass() != getClass())
+ return false;
+ MailFolderPlace place = (MailFolderPlace) o;
+ return (fullName == place.fullName || (fullName != null &&
fullName
+ .equals(place.getFullName())))
+ && (uid == place.uid || (uid != null &&
uid.equals(place
+ .getUid())));
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result
+ + ((fullName == null) ? 0 :
fullName.hashCode());
+ result = prime * result + ((uid == null) ? 0 : uid.hashCode());
+ return result;
+ }
}
Modified:
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FolderListView.java
URL:
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FolderListView.java?rev=1522281&r1=1522280&r2=1522281&view=diff
==============================================================================
---
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FolderListView.java
(original)
+++
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FolderListView.java
Thu Sep 12 03:59:31 2013
@@ -210,28 +210,37 @@ public class FolderListView extends Comp
=======
=======
import org.apache.hupa.client.activity.FolderListActivity;
+import org.apache.hupa.client.place.MailFolderPlace;
>>>>>>> integrate all of the views to their corresponding activities and
>>>>>>> mappers
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.place.shared.Place;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.CellTree;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.SimplePanel;
-import com.google.inject.Inject;
+import com.google.inject.assistedinject.Assisted;
+import com.google.inject.assistedinject.AssistedInject;
public class FolderListView extends Composite implements
FolderListActivity.Displayable {
@UiField(provided = true) CellTree cellTree;
- @Inject
+ @AssistedInject
public FolderListView(final FoldersTreeViewModel viewModel,
- final EventBus eventBus) {
- cellTree = new CellTree(viewModel, null, Resources.INSTANCE);
- cellTree.setAnimationEnabled(true);
+ final EventBus eventBus, @Assisted Place place) {
+ System.out.println(place);
+ if (place instanceof MailFolderPlace) {
+ cellTree = new CellTree(viewModel, null,
Resources.INSTANCE);
+ cellTree.setAnimationEnabled(true);
+ } else {
+ cellTree = new CellTree(viewModel, null);
+ cellTree.setAnimationEnabled(true);
+ }
initWidget(binder.createAndBindUi(this));
>>>>>>> make login page as one part of the overall layout & splite layout to
>>>>>>> little one
}
Modified:
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageListView.java
URL:
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageListView.java?rev=1522281&r1=1522280&r2=1522281&view=diff
==============================================================================
---
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageListView.java
(original)
+++
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageListView.java
Thu Sep 12 03:59:31 2013
@@ -232,6 +232,7 @@ public class MessageListView extends Com
@Override
public void onFailure(ServerFailure error) {
if (error.isFatal()) {
+ //FIXME should goto login page
regarding the long time session expired.
throw new
RuntimeException(error.getMessage());
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]