Révision 3096

tmp/org.txm.backtomedia.rcp/plugin.xml (revision 3096)
59 59
               style="push">
60 60
         </command>
61 61
      </menuContribution>
62
      <menuContribution
63
            locationURI="popup:org.txm.rcp.views.fileexplorer.Explorer?after=org.txm.rcp.commands.OpenBrowser">
64
         <command
65
               commandId="org.txm.backtomedia.commands.function.OpenVLCPlayer"
66
               style="push">
67
            <visibleWhen
68
                  checkEnabled="false">
69
               <reference
70
                     definitionId="OneFileSelected">
71
               </reference>
72
            </visibleWhen>
73
         </command>
74
      </menuContribution>
62 75
   </extension>
63 76
   <extension
64 77
         point="org.eclipse.ui.commands">
tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/editors/vlcplayer/JFXPlayer.java (revision 3096)
29 29
import org.txm.rcp.swt.GLComposite;
30 30
import org.txm.utils.logger.Log;
31 31

  
32
import javafx.application.Platform;
32 33
import javafx.beans.InvalidationListener;
33 34
import javafx.beans.Observable;
34 35
import javafx.embed.swt.FXCanvas;
......
46 47
	
47 48
	protected static final String NOMEDIA = ""; //$NON-NLS-1$
48 49
	
49
	private MediaPlayer vlcPlayer;
50
	private MediaPlayer jfxPlayer;
50 51
	
51 52
	private GLComposite videoComposite;
52 53
	
......
88 89
	long time, mins, secs;
89 90
	
90 91
	public MediaPlayer getEmbeddedMediaPlayer() {
91
		return vlcPlayer;
92
		return jfxPlayer;
92 93
	}
93 94
	
94 95
	Semaphore s = new Semaphore(1);
......
116 117
		GridData gdata = new GridData(SWT.FILL, SWT.FILL, true, true);
117 118
		gdata.horizontalSpan = 11;
118 119
		videoComposite.setLayoutData(gdata);
119
		vlcPlayer = null;
120
		jfxPlayer = null;
120 121
		
121 122
		videoComposite.addDisposeListener(new DisposeListener() {
122 123
			
123 124
			@Override
124 125
			public void widgetDisposed(DisposeEvent e) {
125
				if (vlcPlayer != null) {
126
					vlcPlayer.dispose();
127
					vlcPlayer = null;
126
				if (jfxPlayer != null) {
127
					jfxPlayer.dispose();
128
					jfxPlayer = null;
128 129
					fxCanvas.setScene(null);
129 130
				}
130 131
			}
......
138 139
			
139 140
			@Override
140 141
			public void mouseUp(MouseEvent e) {
141
				if (vlcPlayer != null) {
142
					if (vlcPlayer.getStatus().equals(Status.PAUSED)) {
142
				if (jfxPlayer != null) {
143
					if (jfxPlayer.getStatus().equals(Status.PAUSED)) {
143 144
						resume();
144 145
					}
145
					else if (vlcPlayer.getStatus().equals(Status.PLAYING)) {
146
					else if (jfxPlayer.getStatus().equals(Status.PLAYING)) {
146 147
						pause();
147 148
					}
148 149
				}
......
177 178
					selectMedia();
178 179
					playButton.setText(MessagesMP.pause);
179 180
				}
180
				else if (vlcPlayer != null && vlcPlayer.getStatus().equals(Status.PLAYING)) {
181
				else if (jfxPlayer != null && jfxPlayer.getStatus().equals(Status.PLAYING)) {
181 182
					pause();
182 183
				}
183
				else if (vlcPlayer != null && hasEnded) {
184
					if (vlcPlayer == null) return;
184
				else if (jfxPlayer != null && hasEnded) {
185
					if (jfxPlayer == null) return;
185 186
					replay();
186 187
				}
187 188
				else {
......
213 214
			
214 215
			@Override
215 216
			public void widgetSelected(SelectionEvent e) {
216
				if (vlcPlayer != null) {
217
				if (jfxPlayer != null) {
217 218
					userStopped = true;
218
					vlcPlayer.stop();
219
					jfxPlayer.stop();
219 220
				}
220 221
			}
221 222
			
......
238 239
					case UPPER:
239 240
						end = timeRange.getUpperValue();
240 241
						
241
						vlcPlayer.setStopTime(Duration.seconds(end));
242
						jfxPlayer.setStopTime(Duration.seconds(end));
242 243
						if (end < time) {
243 244
							// System.out.println("Upper changed: fix time");
244 245
							time = end;
245
							vlcPlayer.seek(Duration.seconds(time));
246
							jfxPlayer.seek(Duration.seconds(time));
246 247
						}
247 248
						break;
248 249
					case LOWER:
249 250
						start = timeRange.getLowerValue();
250
						vlcPlayer.setStartTime(Duration.seconds(start));
251
						jfxPlayer.setStartTime(Duration.seconds(start));
251 252
						if (start > time) {
252 253
							// System.out.println("Lower changed: fix time");
253 254
							time = start;
254
							vlcPlayer.seek(Duration.seconds(time));
255
							jfxPlayer.seek(Duration.seconds(time));
255 256
						}
256 257
						break;
257 258
					case MIDDLE:
......
259 260
						time = timeRange.getMiddleValue();
260 261
						// System.out.println("Middle changed: fix time: " + time);
261 262
						
262
						vlcPlayer.seek(Duration.seconds(time));
263
						jfxPlayer.seek(Duration.seconds(time));
263 264
						
264 265
						break;
265 266
					default:
......
304 305
			@Override
305 306
			public void widgetSelected(SelectionEvent e) {
306 307
				float rate = rateField.getSelection() / 100.0f;
307
				vlcPlayer.setRate(rate);
308
				jfxPlayer.setRate(rate);
308 309
				rateValueLabel.setText("" + rateField.getSelection() + "%");
309 310
			}
310 311
			
......
330 331
			
331 332
			@Override
332 333
			public void widgetSelected(SelectionEvent e) {
333
				vlcPlayer.setVolume(volumeField.getSelection());
334
				jfxPlayer.setVolume(volumeField.getSelection());
334 335
				volume = volumeField.getSelection();
335 336
				volumeValueLabel.setText("" + volume + "%");
336 337
			}
......
416 417
	}
417 418
	
418 419
	protected void resume() {
419
		if (vlcPlayer != null) {
420
			vlcPlayer.play();
420
		if (jfxPlayer != null) {
421
			jfxPlayer.play();
421 422
			playButton.setText(MessagesMP.pause);
422 423
		}
423 424
	}
424 425
	
425 426
	protected void pause() {
426
		if (vlcPlayer != null) {
427
			vlcPlayer.pause();
427
		if (jfxPlayer != null) {
428
			jfxPlayer.pause();
428 429
			playButton.setText(MessagesMP.resume);
429 430
		}
430 431
	}
......
438 439
	
439 440
	protected void replay() {
440 441
		if (currentlyPlayed.length() > 0) {
441
			vlcPlayer.seek(Duration.seconds(start));
442
			jfxPlayer.seek(Duration.seconds(start));
442 443
			playButton.setText(MessagesMP.pause);
443 444
		}
444 445
	}
......
576 577
				}
577 578
			});
578 579
			media = new Media(mrl);
579
			if (vlcPlayer != null) {
580
			if (jfxPlayer != null) {
580 581
				try {
581
					vlcPlayer.stop();
582
					jfxPlayer.stop();
582 583
				}
583 584
				catch (Exception e) {
584 585
					
585 586
				}
586 587
			}
587
			vlcPlayer = new MediaPlayer(media);
588 588
			
589
			if (vlcPlayer.getError() == null) {
590
				vlcPlayer.setOnError(new Runnable() {
589
			Platform.setImplicitExit(false); // This is important to avoid Thread exception when re-opening a player
590
			jfxPlayer = new MediaPlayer(media);
591
			
592
			if (jfxPlayer.getError() == null) {
593
				jfxPlayer.setOnError(new Runnable() {
591 594
					
592 595
					@Override
593 596
					public void run() {
594 597
						System.out.println("JFX Player Error:");
595
						vlcPlayer.getError().printStackTrace();
598
						jfxPlayer.getError().printStackTrace();
596 599
					}
597 600
				});
598 601
			}
......
601 604
			}
602 605
			
603 606
			initializePlayerListeners();
604
			vlcPlayer.setAutoPlay(false);
607
			jfxPlayer.setAutoPlay(false);
605 608
			
606
			view = new MediaView(vlcPlayer);
609
			view = new MediaView(jfxPlayer);
607 610
			
608 611
			group = new Group(view);
609 612
			
......
619 622
			return false;
620 623
		}
621 624
		
622
		vlcPlayer.setOnReady(new Runnable() {
625
		jfxPlayer.setOnReady(new Runnable() {
623 626
			
624 627
			@Override
625 628
			public void run() {
626 629
				
627 630
				timeRange.setMinimum(0);
628
				Duration d = vlcPlayer.getMedia().getDuration();
631
				Duration d = jfxPlayer.getMedia().getDuration();
629 632
				if (d.toSeconds() > 0) {
630 633
					timeRange.setMaximum((int) d.toSeconds());
631 634
				}
632 635
				timeRange.setLowerValue(start);
633 636
				timeRange.setMiddleValue(start);
634 637
				
635
				vlcPlayer.setVolume(volume);
638
				jfxPlayer.setVolume(volume);
636 639
				
637
				vlcPlayer.setStartTime(Duration.seconds(start));
638
				vlcPlayer.seek(Duration.seconds(start));
640
				jfxPlayer.setStartTime(Duration.seconds(start));
641
				jfxPlayer.seek(Duration.seconds(start));
639 642
				if (end > start) {
640 643
					timeRange.setUpperValue(end);
641
					vlcPlayer.setStopTime(Duration.seconds(end));
644
					jfxPlayer.setStopTime(Duration.seconds(end));
642 645
				}
643 646
				else if (d.toSeconds() > 0) {
644
					timeRange.setUpperValue((int) vlcPlayer.getMedia().getDuration().toSeconds());
647
					timeRange.setUpperValue((int) jfxPlayer.getMedia().getDuration().toSeconds());
645 648
				}
646 649
				Log.info("Playing media...");
647 650
				
648
				vlcPlayer.play();
651
				jfxPlayer.play();
649 652
				resizeView();
650 653
				
651 654
				// if (new File(mrl + ".srt").exists()) { //$NON-NLS-1$
......
667 670
	
668 671
	private void initializePlayerListeners() {
669 672
		
670
		vlcPlayer.currentTimeProperty().addListener(new InvalidationListener() {
673
		jfxPlayer.currentTimeProperty().addListener(new InvalidationListener() {
671 674
			
672 675
			@Override
673 676
			public void invalidated(Observable ov) {
674 677
				if (videoComposite.isDisposed()) return;
675
				if (vlcPlayer == null) return;
678
				if (jfxPlayer == null) return;
676 679
				
677
				Duration currentTime = vlcPlayer.getCurrentTime();
680
				Duration currentTime = jfxPlayer.getCurrentTime();
678 681
				time = (int) currentTime.toSeconds();
679 682
				if (previous == time) {
680 683
					return;
......
711 714
	public void setRepeat(boolean repeat) {
712 715
		this.repeat = repeat;
713 716
		if (this.repeat) {
714
			vlcPlayer.setCycleCount(Integer.MAX_VALUE);
717
			jfxPlayer.setCycleCount(Integer.MAX_VALUE);
715 718
		}
716 719
		else {
717
			vlcPlayer.setCycleCount(0);
720
			jfxPlayer.setCycleCount(0);
718 721
		}
719 722
		if (!repeatButton.isDisposed()) {
720 723
			repeatButton.setSelection(repeat);
......
723 726
	
724 727
	@Override
725 728
	public void stop() {
726
		if (vlcPlayer == null) return; // nothing to do
729
		if (jfxPlayer == null) return; // nothing to do
727 730
		userStopped = true;
728
		vlcPlayer.stop();
731
		jfxPlayer.stop();
729 732
		
730
		vlcPlayer.dispose();
731
		vlcPlayer = null;
733
		jfxPlayer.dispose();
734
		jfxPlayer = null;
732 735
		fxCanvas.setScene(null);
733 736
		
734 737
		currentlyPlayed = NOMEDIA;
......
739 742
	
740 743
	@Override
741 744
	public boolean isMediaLoaded() {
742
		return vlcPlayer != null && vlcPlayer.getStatus().equals(Status.READY);
745
		return jfxPlayer != null && jfxPlayer.getStatus().equals(Status.READY);
743 746
	}
744 747
}
tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/commands/function/OpenVLCPlayer.java (revision 3096)
29 29

  
30 30
import java.io.File;
31 31
import java.io.UnsupportedEncodingException;
32
import java.net.MalformedURLException;
32 33
import java.net.URLEncoder;
33 34

  
34 35
import org.eclipse.core.commands.AbstractHandler;
......
65 66
	/** The ID. */
66 67
	public static String ID = "org.txm.rcp.commands.BackToMedia"; //$NON-NLS-1$
67 68
	
68
	/** The selection. */
69
	private IStructuredSelection selection;
70
	
71 69
	/*
72 70
	 * (non-Javadoc)
73 71
	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
......
76 74
	public Object execute(ExecutionEvent event) throws ExecutionException {
77 75
		
78 76
		Object o = HandlerUtil.getCurrentSelection(event);
77
		IStructuredSelection selection;
79 78
		if (o instanceof IStructuredSelection) {
80 79
			selection = (IStructuredSelection) o;
81 80
			Object s = selection.getFirstElement();
82
			System.out.println(MessagesMP.select_object + s);
81
			if (s instanceof File) {
82
				File f = (File) s;
83
				
84
				try {
85
					return openEditor(f.toURI().toURL().toString(), 0);
86
				}
87
				catch (MalformedURLException e) {
88
					// TODO Auto-generated catch block
89
					e.printStackTrace();
90
				}
91
			}
83 92
		}
84 93
		
85 94
		Shell sh = HandlerUtil.getActiveShell(event);
......
100 109
				else {
101 110
					
102 111
				}
103
				openEditor(mrl, 0);
112
				return openEditor(mrl, 0);
104 113
			}
105 114
		}
106 115
		
......
119 128
			else {
120 129
				return null;
121 130
			}
122
			
123 131
		}
124 132
		catch (PartInitException e) {
125 133
			e.printStackTrace();
......
127 135
		return null;
128 136
	}
129 137
	
130
	public static void openEditor(String mrl, int time) {
138
	public static VLCPlayerEditor openEditor(String mrl, int time) {
131 139
		IWorkbenchPage page = TXMWindows.getActiveWindow().getActivePage();
132 140
		VLCPlayerEditorInput editorInput = new VLCPlayerEditorInput();
133 141
		StatusLine.setMessage(MessagesMP.opening_media);
134 142
		try {
135
			VLCPlayerEditor player = (VLCPlayerEditor) page
136
					.openEditor(editorInput, VLCPlayerEditor.ID);
143
			VLCPlayerEditor player = (VLCPlayerEditor) page.openEditor(editorInput, VLCPlayerEditor.ID);
137 144
			if (player != null) {
138 145
				player.getPlayer().play(mrl, time);
139 146
				StatusLine.setMessage("");
140 147
				if (mrl != null) {
141 148
					player.setPartName(new File(mrl).getName());
142 149
				}
150
				
151
				return player;
143 152
			}
144 153
			else {
145 154
				System.out.println(MessagesMP.error_open_media);
......
148 157
		catch (PartInitException e) {
149 158
			e.printStackTrace();
150 159
		}
160
		return null;
151 161
	}
152 162
	
153 163
	public static VLCPlayerEditor openEditor(String mrl, int time, int endtime) {

Formats disponibles : Unified diff