5.2
This commit is contained in:
parent
222434ff8e
commit
e2ead286e2
@ -2,7 +2,7 @@
|
||||
<!-- You may freely edit this file. See commented blocks below for -->
|
||||
<!-- some examples of how to customize the build. -->
|
||||
<!-- (If you delete it and reopen the project it will be recreated.) -->
|
||||
<project name="SEPlayerService_Lite" default="jar" basedir=".">
|
||||
<project name="SEPlayerService" default="jar" basedir=".">
|
||||
<description>Builds, tests, and runs the project .</description>
|
||||
<import file="nbproject/build-impl.xml"/>
|
||||
<!--
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- *** GENERATED FROM project.xml - DO NOT EDIT *** -->
|
||||
<project name="SEPlayerService_Lite-impl" default="jar" basedir="..">
|
||||
<project name="SEPlayerService-impl" default="jar" basedir="..">
|
||||
<!--load-properties-->
|
||||
<target name="pre-load-properties">
|
||||
<property file="nbproject/private/private.properties"/>
|
||||
@ -936,7 +936,7 @@
|
||||
<target name="semc-run" depends="semc-icon-assembly,semc-ppro-emulator,semc-do-run" if="semc-platform.trigger"/>
|
||||
<!--savaje-run-->
|
||||
<target name="savaje-run" if="savaje-platform.trigger">
|
||||
<sunEmulatorExec home="${platform.home}" mainclass="${main.class}" args="${application.args}" jvmargs="${run.jvmargs}" device="${platform.device}" profile="${platform.profile}" xlet="${main.class.xlet}" applet="${main.class.applet}">
|
||||
<sunEmulatorExec home="${platform.home}" mainclass="${main.class}" args="${application.args}" jvmargs="${run.cmd.options}" device="${platform.device}" profile="${platform.profile}" xlet="${main.class.xlet}" applet="${main.class.applet}">
|
||||
<fileset dir="${dist.dir}">
|
||||
<exclude name="javadoc/**"/>
|
||||
</fileset>
|
||||
@ -945,7 +945,7 @@
|
||||
<!--sjmc-run-->
|
||||
<target name="sjmc-run" if="sjmc-platform.trigger">
|
||||
<taskdef name="sjmcEmulatorExec" classname="org.netbeans.modules.j2me.cdc.project.sjmc.SJMCToolkitEmulatorExecTask" classpath="${libs.sjmc-ant-utils.classpath}"/>
|
||||
<sjmcEmulatorExec home="${platform.home}" mainclass="${main.class}" args="${application.args}" jvmargs="${run.jvmargs}" device="${platform.device}" profile="${platform.profile}" xlet="${main.class.xlet}" applet="${main.class.applet}">
|
||||
<sjmcEmulatorExec home="${platform.home}" mainclass="${main.class}" args="${application.args}" jvmargs="${run.cmd.options}" device="${platform.device}" profile="${platform.profile}" xlet="${main.class.xlet}" applet="${main.class.applet}">
|
||||
<fileset dir="${dist.dir}">
|
||||
<exclude name="javadoc/**"/>
|
||||
</fileset>
|
||||
@ -1059,7 +1059,7 @@
|
||||
<!--savaje-debug-->
|
||||
<target name="savaje-debug" if="savaje-platform.trigger">
|
||||
<parallel>
|
||||
<sunEmulatorExec home="${platform.home}" mainclass="${main.class}" args="${application.args}" jvmargs="${run.jvmargs}" device="${platform.device}" profile="${platform.profile}" xlet="${main.class.xlet}" applet="${main.class.applet}" debug="true" debuggeraddressproperty="jpda.port">
|
||||
<sunEmulatorExec home="${platform.home}" mainclass="${main.class}" args="${application.args}" jvmargs="${run.cmd.options}" device="${platform.device}" profile="${platform.profile}" xlet="${main.class.xlet}" applet="${main.class.applet}" debug="true" debuggeraddressproperty="jpda.port">
|
||||
<fileset dir="${dist.dir}">
|
||||
<exclude name="javadoc/**"/>
|
||||
</fileset>
|
||||
@ -1074,7 +1074,7 @@
|
||||
<target name="sjmc-debug" if="sjmc-platform.trigger">
|
||||
<taskdef name="sjmcEmulatorExec" classname="org.netbeans.modules.j2me.cdc.project.sjmc.SJMCToolkitEmulatorExecTask" classpath="${libs.sjmc-ant-utils.classpath}"/>
|
||||
<parallel>
|
||||
<sjmcEmulatorExec home="${platform.home}" mainclass="${main.class}" args="${application.args}" jvmargs="${run.jvmargs}" device="${platform.device}" profile="${platform.profile}" xlet="${main.class.xlet}" applet="${main.class.applet}" debug="true" debuggeraddressproperty="jpda.port">
|
||||
<sjmcEmulatorExec home="${platform.home}" mainclass="${main.class}" args="${application.args}" jvmargs="${run.cmd.options}" device="${platform.device}" profile="${platform.profile}" xlet="${main.class.xlet}" applet="${main.class.applet}" debug="true" debuggeraddressproperty="jpda.port">
|
||||
<fileset dir="${dist.dir}">
|
||||
<exclude name="javadoc/**"/>
|
||||
</fileset>
|
||||
|
@ -1,8 +1,8 @@
|
||||
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
||||
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
||||
build.xml.data.CRC32=b8ca046e
|
||||
build.xml.script.CRC32=518797bb
|
||||
build.xml.data.CRC32=d5ed72e0
|
||||
build.xml.script.CRC32=4c4ce240
|
||||
build.xml.stylesheet.CRC32=03eab09b
|
||||
nbproject/build-impl.xml.data.CRC32=b8ca046e
|
||||
nbproject/build-impl.xml.script.CRC32=a371a0b9
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=d670562e
|
||||
nbproject/build-impl.xml.data.CRC32=d5ed72e0
|
||||
nbproject/build-impl.xml.script.CRC32=c6fa47a7
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=a4fc63f1
|
||||
|
@ -1,7 +1,7 @@
|
||||
#Thu Jan 07 23:51:00 EET 2010
|
||||
netbeans.user=C\:\\Users\\aNNiMON\\.netbeans\\6.7
|
||||
#Wed May 05 19:16:46 EEST 2010
|
||||
netbeans.user=C:\\Users\\aNNiMON\\.netbeans\\6.9m1
|
||||
javadoc.preview=true
|
||||
deployment.counter=3
|
||||
config.active=
|
||||
deployment.number=0.0.2
|
||||
deployment.counter=160
|
||||
app-version.autoincrement=true
|
||||
deployment.number=0.1.59
|
||||
|
@ -17,7 +17,7 @@ deployment.method=NONE
|
||||
deployment.override.jarurl=false
|
||||
dist.dir=dist/${config.active}
|
||||
dist.jad=SEPlayerService.jad
|
||||
dist.jar=SEPlayerServiceLite.jar
|
||||
dist.jar=SEPlayerService.jar
|
||||
dist.javadoc.dir=${dist.dir}/doc
|
||||
dist.root.dir=dist
|
||||
extra.classpath=${file.reference.MultimediaServices_API.jar}
|
||||
@ -50,8 +50,8 @@ manifest.apipermissions=
|
||||
manifest.file=manifest.mf
|
||||
manifest.jad=
|
||||
manifest.manifest=
|
||||
manifest.midlets=MIDlet-1: SEPSLite,/icon.png,SEPS\n
|
||||
manifest.others=MIDlet-Vendor: aNNiMON\nMIDlet-Name: SEPlayerServiceLite\nMIDlet-Version: 3.0\n
|
||||
manifest.midlets=MIDlet-1: SEPS,/icon.png,SEPS\n
|
||||
manifest.others=MIDlet-Vendor: aNNiMON\nMIDlet-Name: SEPlayerService\nMIDlet-Version: 5.3\n
|
||||
manifest.pushregistry=
|
||||
name=SEPlayerService
|
||||
no.dependencies=false
|
||||
@ -68,8 +68,8 @@ obfuscator.destjar=${build.dir}/obfuscated.jar
|
||||
obfuscator.srcjar=${build.dir}/before-obfuscation.jar
|
||||
platform.active=Sony_Ericsson_SDK_2_5_0_4_for_the_Java_TM__ME_Platform_Emulator_
|
||||
platform.active.description=Sony Ericsson SDK 2.5.0.4 for the Java(TM) ME Platform(Emulator)
|
||||
platform.apis=JSR234-1.0,SATSA-APDU-1.0,JSR211-1.0,JSR75-1.0,J2ME-WS-1.0,J2ME-XMLRPC-1.0,JSR82-1.1,SATSA-JCRMI-1.0,SATSA-CRYPTO-1.0,JSR239-1.0,JSR179-1.0.1,MascotV3-1.0,JSR184-1.1,JSR238-1.0,MMAPI-1.1,NokiaUI-1.0,JSR229-1.1.0,SATSA-PKI-1.0,JSR180-1.0.1,JSR226-1.0,JSR177-1.0,SEMC_EXT_JP8-1.0,VSCL-2.0,VSCL-2.1,WMA-2.0,lib/semc_ext_jp8.jar
|
||||
platform.bootclasspath=${platform.home}/lib/mascotv3.jar:${platform.home}/lib/jsr226.jar:${platform.home}/lib/jsr256.jar:${platform.home}/lib/satsa-crypto.jar:${platform.home}/lib/jsr229.jar:${platform.home}/lib/jsr238.jar:${platform.home}/lib/j2me-xmlrpc.jar:${platform.home}/lib/jsr211.jar:${platform.home}/lib/vscl21.jar:${platform.home}/lib/satsa-jcrmi.jar:${platform.home}/lib/jsr082.jar:${platform.home}/lib/satsa-apdu.jar:${platform.home}/lib/jsr184.jar:${platform.home}/lib/nokiaext.jar:${platform.home}/lib/jsr239.jar:${platform.home}/lib/jsr75.jar:${platform.home}/lib/jsr179.jar:${platform.home}/lib/satsa-pki.jar:${platform.home}/lib/jsr180.jar:${platform.home}/lib/vscl.jar:${platform.home}/lib/mmapi.jar:${platform.home}/lib/j2me-ws.jar:${platform.home}/lib/wma20.jar:${platform.home}/lib/jsr234.jar:${platform.home}/lib/semc_ext_jp8.jar:${platform.home}/lib/cldcapi11.jar:${platform.home}/lib/midpapi20.jar
|
||||
platform.apis=JSR234-1.0,SATSA-APDU-1.0,capuchin-1.0,JSR211-1.0,JSR75-1.0,J2ME-WS-1.0,J2ME-XMLRPC-1.0,JSR82-1.1,SATSA-JCRMI-1.0,SATSA-CRYPTO-1.0,JSR239-1.0,JSR179-1.0.1,MascotV3-1.0,JSR184-1.1,JSR238-1.0,MMAPI-1.1,JSR256-1.1,NokiaUI-1.0,JSR229-1.1.0,SATSA-PKI-1.0,JSR180-1.0.1,JSR226-1.0,JSR177-1.0,SEMC_EXT_JP8-1.0,VSCL-2.0,VSCL-2.1,WMA-2.0
|
||||
platform.bootclasspath=${platform.home}/lib/mascotv3.jar:${platform.home}/lib/jsr226.jar:${platform.home}/lib/jsr256.jar:${platform.home}/lib/satsa-crypto.jar:${platform.home}/lib/jsr229.jar:${platform.home}/lib/jsr238.jar:${platform.home}/lib/j2me-xmlrpc.jar:${platform.home}/lib/jsr211.jar:${platform.home}/lib/vscl21.jar:${platform.home}/lib/satsa-jcrmi.jar:${platform.home}/lib/jsr082.jar:${platform.home}/lib/satsa-apdu.jar:${platform.home}/lib/jsr184.jar:${platform.home}/lib/nokiaext.jar:${platform.home}/lib/capuchin.jar:${platform.home}/lib/jsr239.jar:${platform.home}/lib/jsr75.jar:${platform.home}/lib/satsa-pki.jar:${platform.home}/lib/jsr179.jar:${platform.home}/lib/jsr180.jar:${platform.home}/lib/vscl.jar:${platform.home}/lib/mmapi.jar:${platform.home}/lib/j2me-ws.jar:${platform.home}/lib/wma20.jar:${platform.home}/lib/jsr234.jar:${platform.home}/lib/semc_ext_jp8.jar:${platform.home}/lib/cldcapi11.jar:${platform.home}/lib/midpapi20.jar
|
||||
platform.configuration=CLDC-1.1
|
||||
platform.device=SonyEricsson_JP8_240x320_Emu
|
||||
platform.fat.jar=true
|
||||
|
@ -3,7 +3,7 @@
|
||||
<type>org.netbeans.modules.kjava.j2meproject</type>
|
||||
<configuration>
|
||||
<data xmlns="http://www.netbeans.org/ns/j2me-project">
|
||||
<name>SEPlayerService_Lite</name>
|
||||
<name>SEPlayerService</name>
|
||||
<minimum-ant-version>1.6</minimum-ant-version>
|
||||
</data>
|
||||
</configuration>
|
||||
|
380
src/Canv.java
380
src/Canv.java
@ -1,8 +1,11 @@
|
||||
|
||||
import com.nokia.mid.ui.DeviceControl;
|
||||
import com.sonyericsson.multimedia.*;
|
||||
import com.sonyericsson.multimedia.control.*;
|
||||
import java.io.IOException;
|
||||
import java.util.Calendar;
|
||||
import javax.microedition.io.Connector;
|
||||
import javax.microedition.lcdui.*;
|
||||
import javax.microedition.sensor.*;
|
||||
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
@ -20,10 +23,17 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
public static int softUp1, softUp2, softDn1, softDn2, background, line, text, valuet, inf;
|
||||
|
||||
private int w,h;
|
||||
private boolean lite, vis;
|
||||
private boolean lite;
|
||||
private int mode;
|
||||
private int accelPrevDelta = 0;
|
||||
|
||||
private Lyrics lrc;
|
||||
public RateImpl ri;
|
||||
|
||||
private byte repeat;//ôóíêöèÿ ïîâòîðà
|
||||
private int a,b;
|
||||
|
||||
public Object swf;
|
||||
|
||||
private Image I, album;
|
||||
private Engine2 e2;
|
||||
@ -34,23 +44,34 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
|
||||
private MultimediaService service = null;
|
||||
private MediaControl mediaControl = null;
|
||||
private Media media = null;
|
||||
public Media media = null;
|
||||
|
||||
private int[] channels = new int[3];
|
||||
private String[] channelNames = new String[3];
|
||||
private SensorConnection sensor;
|
||||
private String URL;
|
||||
|
||||
public Canv() {
|
||||
setFullScreenMode(true);
|
||||
thr = new Thread(this);
|
||||
thr.start();
|
||||
lite = false;
|
||||
vis = true;
|
||||
repeat = 0;
|
||||
mode = 0; //Ðåæèì ïëåéåðà
|
||||
w = getWidth();
|
||||
h = getHeight();
|
||||
I = Image.createImage(w, h);
|
||||
G = I.getGraphics();
|
||||
getInfo();
|
||||
service = MultimediaServiceManager.getMultimediaService("MediaPlayer");
|
||||
mediaControl = (MediaControl)service.getControl("MediaControl");
|
||||
mediaControl.addMediaControlListener(this);
|
||||
playTrack();
|
||||
if(Rms.visid!=0) swf = new Capuchin(Rms.visid);
|
||||
if(Rms.stat) {
|
||||
ri = new RateImpl();
|
||||
ri.open();
|
||||
}
|
||||
if(Rms.startPlayer) playTrack();
|
||||
}
|
||||
|
||||
protected void paint(Graphics g) {
|
||||
@ -66,27 +87,42 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
if (media != null) {
|
||||
MetaData metaData = media.getMetaData();
|
||||
if (metaData != null) {
|
||||
Object data = metaData.getValue(MetaData.TITLE_KEY);
|
||||
Object data = getValue(metaData, MetaData.TITLE_KEY);
|
||||
if (data != null) drawTitle(g, (String) data);
|
||||
|
||||
if (album != null) {
|
||||
int ih = h-2*medFont.getHeight()-6;
|
||||
if(album.getHeight()>ih) album = Effects.Resize(album, ih*album.getWidth()/album.getHeight(), ih);
|
||||
g.drawImage(album, w/2, h/2, 3);
|
||||
}else if(vis){
|
||||
if(e2==null) {
|
||||
}else if(Rms.vis){
|
||||
int ih = h-(2*medFont.getHeight())-6;
|
||||
if(Rms.visid==0) {
|
||||
if(e2==null) {
|
||||
e2 = new Engine2(w-6, ih);
|
||||
e2.setRun(true);
|
||||
}
|
||||
g.drawImage(e2.MainCanvas(), w/2, h/2, 3);
|
||||
} else{
|
||||
((Capuchin) swf).drawFlash(g, 3, h/2-(ih/2), w-6, ih);
|
||||
}
|
||||
}
|
||||
if(Rms.isLyric && lrc!=null) {
|
||||
try {
|
||||
drawCenter(g, lrc.get5Lines(media.getMediaTime()));
|
||||
} catch (Exception e) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
drawSoft(g, "Ìåíþ", "Âûõîä");
|
||||
drawSoft(g, SEPS.midlet.lang.menu, SEPS.midlet.lang.exit);
|
||||
}
|
||||
|
||||
private String getValue(MetaData metaData, String md) {
|
||||
String data = metaData.getValue(md);
|
||||
StringBuffer sb = new StringBuffer();
|
||||
for(int i=0; i<data.length(); i++) {
|
||||
sb.append(StringEncoder.checkCP1251(data.charAt(i)));//.decodeCharCP1251((byte) data.charAt(i)));
|
||||
}
|
||||
return sb.toString();//data;
|
||||
}
|
||||
|
||||
private void drawPlayerCanvas(Graphics g) {
|
||||
@ -99,75 +135,89 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
if (media != null) {
|
||||
MetaData metaData = media.getMetaData();
|
||||
if (metaData != null) {
|
||||
Object data = metaData.getValue(MetaData.TITLE_KEY);
|
||||
if (data != null) py = drawText(g, "Çàãîëîâîê: ", (String) data, py);
|
||||
Object data = getValue(metaData, MetaData.ARTIST_KEY);
|
||||
if (data != null) py = drawText(g, (String) data, py);
|
||||
|
||||
data = metaData.getValue(MetaData.ALBUM_KEY);
|
||||
if (data != null) py = drawText(g, "Àëüáîì: ", (String) data, py);
|
||||
data = getValue(metaData, MetaData.TITLE_KEY);
|
||||
if (data != null) py = drawText(g, (String) data, py);
|
||||
|
||||
data = metaData.getValue(MetaData.ARTIST_KEY);
|
||||
if (data != null) py = drawText(g, "Èñïîëíèòåëü: ", (String) data, py);
|
||||
data = getValue(metaData, MetaData.ALBUM_KEY);
|
||||
if (data != null) py = drawText(g, (String) data, py);
|
||||
|
||||
if(Rms.isLyric && lrc!=null) py = drawText(g, "", lrc.getLine(media.getMediaTime()), py);
|
||||
if(Rms.isLyric && lrc!=null) py = drawText(g, lrc.getLine(media.getMediaTime()), py);
|
||||
//else if(lrc==null) py = drawText(g, String.valueOf(media.getMediaTime()), "", py);
|
||||
//data = metaData.getValue(metaData.FILE_URI_KEY);
|
||||
//if (data != null)
|
||||
|
||||
if (album != null) {
|
||||
int ih = h-fh-2-py-20;
|
||||
if(album.getHeight()>ih) album = Effects.Resize(album, ih*album.getWidth()/album.getHeight(), ih);
|
||||
g.drawImage(album, w/2, py+15, 17);
|
||||
}else if(vis){
|
||||
if(e2==null) {
|
||||
int ih = h-fh-2-py-20;
|
||||
e2 = new Engine2(ih, ih);
|
||||
e2.setRun(true);
|
||||
}
|
||||
g.drawImage(e2.MainCanvas(), w/2, py+15, 17);
|
||||
}
|
||||
|
||||
if(vis) {
|
||||
g.setColor(inf);
|
||||
g.drawString("Visual", 2, py+15+(smallFont_b.getHeight()+2), 20);
|
||||
}
|
||||
if(Rms.isLyric) {
|
||||
g.setColor(inf);
|
||||
g.drawString("Lyrics", 2, py+15+2*(smallFont_b.getHeight()+2), 20);
|
||||
}
|
||||
|
||||
float div = ((float)w - 10) / (float)media.getDuration();
|
||||
g.setColor(valuet);
|
||||
g.fillRect(5, py, (int)(media.getMediaTime() * div), 10);
|
||||
int mgt = media.getMediaTime();
|
||||
g.fillRect(5, py, (int)(mgt * div), 10);
|
||||
g.setColor(inf);
|
||||
if(repeat==1) g.drawLine(5+(int)(a*div), py, 5+(int)(a*div), py+10);
|
||||
if(repeat==2) {
|
||||
g.drawLine((int)(a*div), py, (int)(a*div), py+10);
|
||||
g.drawLine((int)(b*div), py, (int)(b*div), py+10);
|
||||
}
|
||||
g.setColor(text);
|
||||
g.drawRect(5, py, w-10, 10);
|
||||
}
|
||||
}
|
||||
drawSoft(g, "Ìåíþ", "Âûõîä");
|
||||
if (album != null) {
|
||||
int ih = h-fh-2-py-20;
|
||||
if(album.getHeight()>ih) album = Effects.Resize(album, ih*album.getWidth()/album.getHeight(), ih);
|
||||
g.drawImage(album, w/2, py+15, 17);
|
||||
}else if(Rms.vis){
|
||||
int ih = h-fh-2-py-20;
|
||||
if(Rms.visid==0) {
|
||||
if(e2==null) {
|
||||
e2 = new Engine2(ih, ih);
|
||||
e2.setRun(true);
|
||||
}
|
||||
g.drawImage(e2.MainCanvas(), w/2, py+15, 17);
|
||||
} else{
|
||||
((Capuchin) swf).drawFlash(g, w/2-ih/2, py+15, ih, ih);
|
||||
}
|
||||
}
|
||||
g.setColor(inf);
|
||||
if(Rms.vis) g.drawString("*-V", 2, py+15, 20);
|
||||
if(Rms.isLyric) g.drawString("0-L", 2, py+15+(smallFont_b.getHeight()+2), 20);
|
||||
if(Rms.accel) g.drawString("#-A", 2, py+15+2*(smallFont_b.getHeight()+2), 20);
|
||||
if(Rms.slpmode) g.drawString("S", 2, py+15+3*(smallFont_b.getHeight()+2), 20);
|
||||
drawSoft(g, SEPS.midlet.lang.menu, SEPS.midlet.lang.exit);
|
||||
}
|
||||
|
||||
public void keyPressed(int key) {
|
||||
int ga=getGameAction(key);
|
||||
if(key==-7) {
|
||||
pauseTrack();
|
||||
if(Rms.closePlayer) pauseTrack();
|
||||
SEPS.midlet.destroyApp(true);
|
||||
}
|
||||
if(key==-6) new Menu();
|
||||
if(key==KEY_STAR) vis=!vis;
|
||||
if(key==KEY_POUND) Rms.accel=!Rms.accel;
|
||||
if(key==KEY_STAR) Rms.vis=!Rms.vis;
|
||||
if(key==KEY_NUM0) Rms.isLyric=!Rms.isLyric;
|
||||
if(key==KEY_NUM1) rewind();
|
||||
if(key==KEY_NUM3) fastForward();
|
||||
if(key==KEY_NUM4) rewind();
|
||||
if(key==KEY_NUM6) fastForward();
|
||||
if(key==KEY_NUM3) ABRepeat();
|
||||
if(key==KEY_NUM1) {
|
||||
String art="",tit="";
|
||||
try{
|
||||
MetaData metaData = SEPS.midlet.cnv.media.getMetaData();
|
||||
tit = getValue(metaData, MetaData.TITLE_KEY);
|
||||
art = getValue(metaData, MetaData.ARTIST_KEY);
|
||||
}catch(Exception ex){}
|
||||
FindLyrics fl = new FindLyrics();
|
||||
fl.find(art, tit);//SEPS.midlet.dsp.setCurrent(SEPS.midlet.cnv);
|
||||
}
|
||||
if(key==KEY_NUM9) new SetSleepMode();//SEPS.midlet.dsp.setCurrent();
|
||||
if(ga==LEFT && key!=KEY_NUM4) prevTrack();
|
||||
if(ga==RIGHT && key!=KEY_NUM6) nextTrack();
|
||||
switch(ga) {
|
||||
case LEFT:
|
||||
prevTrack();
|
||||
break;
|
||||
case RIGHT:
|
||||
nextTrack();
|
||||
break;
|
||||
case UP:
|
||||
upMode();
|
||||
break;
|
||||
case DOWN:
|
||||
downMode();
|
||||
upMode();
|
||||
break;
|
||||
case FIRE:
|
||||
try {
|
||||
@ -184,11 +234,120 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
keyPressed(key);
|
||||
}
|
||||
|
||||
public int getDelta(int channel, int threshold) {
|
||||
int delta = 0;
|
||||
try {
|
||||
Data[] data = sensor.getData(1, -1, false, false, false);
|
||||
int drx = 0;
|
||||
|
||||
for (int i = 0; i < data.length; i++) {
|
||||
if (data[i].getChannelInfo().getName().equals(channelNames[channel])) {
|
||||
drx = data[i].getIntValues()[0];
|
||||
}
|
||||
}
|
||||
|
||||
delta = channels[channel] - drx;
|
||||
channels[channel] = drx;
|
||||
|
||||
if (Math.abs(delta) < threshold) {
|
||||
delta = 0;
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
}
|
||||
|
||||
return delta;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
while (true) {
|
||||
try {
|
||||
if(Rms.light) DeviceControl.setLights(0, 100);
|
||||
if(!vis) Thread.sleep(100);
|
||||
final int delta = getDelta(0, Rms.sensetivity);
|
||||
if (delta != 0) {
|
||||
if (accelPrevDelta != 0 && (delta * accelPrevDelta) < 0) {
|
||||
accelPrevDelta = 0;
|
||||
} else {
|
||||
accelPrevDelta = delta;
|
||||
|
||||
Runnable runnable = new Runnable() {
|
||||
|
||||
public void run() {
|
||||
if (delta > 0 && Rms.accel) {
|
||||
nextTrack();
|
||||
} else if (delta < 0 && Rms.accel) {
|
||||
if(Rms.listfw) nextTrack();
|
||||
else prevTrack();
|
||||
}
|
||||
}
|
||||
};
|
||||
(new Thread(runnable)).start();
|
||||
}
|
||||
}
|
||||
if(!Rms.vis) Thread.sleep(100);
|
||||
if(Rms.slpmode) {
|
||||
if(getTime()) {
|
||||
pauseTrack();
|
||||
SEPS.midlet.destroyApp(true);
|
||||
}
|
||||
}
|
||||
if(repeat==2) {
|
||||
try {
|
||||
int mgt = media.getMediaTime();
|
||||
int sk = Math.abs(b-a);
|
||||
if(mgt>=b) mediaControl.skip(-sk);
|
||||
} catch (ControlException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
if((Rms.stat || Rms.urlstat || Rms.actmenu) && media!=null) {
|
||||
MetaData metaData = media.getMetaData();
|
||||
Object data = getValue(metaData, MetaData.ARTIST_KEY);
|
||||
String thisSong = (String) data;
|
||||
data = getValue(metaData, MetaData.TITLE_KEY);
|
||||
thisSong = thisSong+" - "+ (String) data;
|
||||
if(!thisSong.equalsIgnoreCase(Rms.lastSong)) {
|
||||
int thisTime = media.getMediaTime();
|
||||
int allTime = media.getDuration()*20/*% ïðîèãðàíî*//100;
|
||||
if(thisTime>allTime) {
|
||||
int cn = 1;
|
||||
if(Rms.stat) {
|
||||
Rms.lastSong = thisSong;
|
||||
cn = ri.update(thisSong);
|
||||
}
|
||||
if(Rms.urlstat) {
|
||||
FindLyrics fl = new FindLyrics();
|
||||
fl.scrob(thisSong);
|
||||
Rms.lastSong = thisSong;
|
||||
}
|
||||
if(Rms.actmenu) {
|
||||
try {
|
||||
Image icon = Image.createImage("/icon.png");
|
||||
StringBuffer sb = new StringBuffer();//String desc = "";
|
||||
if(Rms.stat) { sb.append(cn); sb.append(" |");}
|
||||
allTime = media.getDuration();
|
||||
int hh = 0, m=0, s = 0;
|
||||
if(allTime<60) s=allTime;
|
||||
else {
|
||||
if(allTime<3600) {
|
||||
m = allTime/60;
|
||||
s = allTime - m*60;
|
||||
}else{
|
||||
m = allTime/60;
|
||||
hh = m/60; m=m-hh*60;
|
||||
}
|
||||
}
|
||||
if(hh>0) {sb.append(hh); sb.append(" :");}
|
||||
if(m>0) {if(m>10) sb.append(0); sb.append(m); sb.append(" :");}
|
||||
if(s>10) sb.append(0);
|
||||
sb.append(s);
|
||||
com.sonyericsson.ui.UIActivityMenu.getInstance(SEPS.midlet).addEvent(thisSong, sb.toString(), icon, null);
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (service != null) {
|
||||
repaint();
|
||||
}
|
||||
@ -198,6 +357,36 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ïåðåêëþ÷åíèå òðåêà
|
||||
*/
|
||||
private void newTrack() {
|
||||
a=b=0; repeat = 0;
|
||||
SEPS.midlet.dsp.vibrate(Rms.vibrlen);
|
||||
if (Rms.flash) {
|
||||
DeviceControl.setLights(0, 0);
|
||||
DeviceControl.setLights(0, 100);
|
||||
}
|
||||
}
|
||||
|
||||
private void getInfo() {
|
||||
SensorInfo[] info = SensorManager.findSensors("acceleration", null);
|
||||
for (int i = 0; i < info.length; i++) {
|
||||
SensorInfo s = info[i];
|
||||
URL = s.getUrl();
|
||||
ChannelInfo[] ci = s.getChannelInfos();
|
||||
for (int r = 0; r < ci.length; r++) {
|
||||
ChannelInfo c = ci[r];
|
||||
channelNames[r] = c.getName();
|
||||
}
|
||||
}
|
||||
try {
|
||||
sensor = (SensorConnection) Connector.open(URL);
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void initLyric(Media med) {
|
||||
if (med == null) {return;}
|
||||
lrc = null;
|
||||
@ -205,13 +394,13 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
String fl = "";
|
||||
MetaData metaData = med.getMetaData();
|
||||
if (metaData != null) {
|
||||
Object data = metaData.getValue(MetaData.ARTIST_KEY);
|
||||
Object data = getValue(metaData, MetaData.ARTIST_KEY);
|
||||
if (data != null) at=at +(String)(data) + " - ";
|
||||
|
||||
data = metaData.getValue(MetaData.TITLE_KEY);
|
||||
data = getValue(metaData, MetaData.TITLE_KEY);
|
||||
if (data != null) at+=(String) data;
|
||||
|
||||
data = metaData.getValue(MetaData.FILE_URI_KEY);
|
||||
data = getValue(metaData, MetaData.FILE_URI_KEY);
|
||||
if (data != null) {fl=(String) data;fl=fl.substring(fl.lastIndexOf('/')+1, fl.lastIndexOf('.'));}
|
||||
|
||||
if(Lyrics.isExists(at)) lrc = new Lyrics(at);
|
||||
@ -221,6 +410,7 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
|
||||
private void nextTrack() {
|
||||
try {
|
||||
newTrack();
|
||||
mediaControl.next();
|
||||
} catch (ControlException ex) {
|
||||
ex.printStackTrace();
|
||||
@ -229,6 +419,7 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
|
||||
private void prevTrack() {
|
||||
try {
|
||||
newTrack();
|
||||
mediaControl.prev();
|
||||
} catch (ControlException ex) {
|
||||
ex.printStackTrace();
|
||||
@ -267,31 +458,13 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
}
|
||||
}
|
||||
|
||||
// public static String getTime(int mode) {
|
||||
// String dd, mm, yy, _h, m, s;
|
||||
// Calendar cal = Calendar.getInstance ();
|
||||
// dd = String.valueOf (cal.get (Calendar.DAY_OF_MONTH));
|
||||
// if (dd.length () == 1)
|
||||
// dd = "0" + dd;
|
||||
// mm = String.valueOf (cal.get (Calendar.MONTH) + 1);
|
||||
// if (mm.length () == 1)
|
||||
// mm = "0" + mm;
|
||||
// yy = String.valueOf (cal.get (Calendar.YEAR));
|
||||
// _h = String.valueOf (cal.get (Calendar.HOUR_OF_DAY));
|
||||
// if (_h.length () == 1)
|
||||
// _h = "0" + _h;
|
||||
// m = String.valueOf (cal.get (Calendar.MINUTE));
|
||||
// if (m.length () == 1)
|
||||
// m = "0" + m;
|
||||
// s = String.valueOf (cal.get (Calendar.SECOND));
|
||||
// if (s.length () == 1)
|
||||
// s = "0" + s;
|
||||
// String time;
|
||||
// if(mode==1) time = _h+":"+m+":"+s;
|
||||
// else if(mode==2) time = (dd+"."+mm+"."+yy.substring(2));
|
||||
// else time = (dd+"."+mm+"."+yy.substring(2)+" "+_h+":"+m+":"+s);
|
||||
// return time;
|
||||
// }
|
||||
private boolean getTime() {
|
||||
Calendar cal = Calendar.getInstance ();
|
||||
int ch = cal.get(Calendar.HOUR_OF_DAY);
|
||||
int cm = cal.get(Calendar.MINUTE);
|
||||
if(ch!=Rms.dh) return false;
|
||||
else return (cm>=Rms.dm);
|
||||
}
|
||||
|
||||
public void mediaControlUpdate(int eventId, ControlEvent event) {
|
||||
try {
|
||||
@ -321,6 +494,7 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
album = null;
|
||||
}
|
||||
}
|
||||
a = b = 0; repeat = 0;
|
||||
if(Rms.isLyric) initLyric(this.media);
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
@ -411,23 +585,15 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
|
||||
}
|
||||
|
||||
private int drawText(Graphics g, String name, String value, int y) {
|
||||
private int drawText(Graphics g, String value, int y) {
|
||||
g.setColor(line);
|
||||
g.drawLine(3, y-1, w-3, y-1);
|
||||
|
||||
if(Rms.skinid==3) {value=toEmo(value); name=toEmo(name);}
|
||||
if(Rms.skinid==3) {value=toEmo(value);}
|
||||
|
||||
g.setColor(text);
|
||||
g.setFont(smallFont_b);
|
||||
g.drawString(name, 5, y, 20);
|
||||
|
||||
int tw = 15+smallFont_b.stringWidth(name);
|
||||
g.setColor(valuet);
|
||||
if(smallFont_b.stringWidth(value)>tw) {
|
||||
g.translate(tw-10, g.getTranslateY());
|
||||
g.drawString(value, 2, y, 20);
|
||||
g.translate(-(tw-10), -g.getTranslateY());
|
||||
}else g.drawString(value, w-5, y, 24);
|
||||
g.setFont(smallFont_b);
|
||||
g.drawString(value, w/2, y, 17);
|
||||
|
||||
return y+(smallFont_b.getHeight()+2);
|
||||
}
|
||||
@ -447,15 +613,31 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private void downMode() {
|
||||
mode = 1-mode;
|
||||
e2=null;
|
||||
album = null;
|
||||
}
|
||||
|
||||
private void upMode() {
|
||||
mode = 1-mode;
|
||||
e2=null;
|
||||
album = null;
|
||||
}
|
||||
|
||||
private void ABRepeat() {
|
||||
try {
|
||||
repeat++;
|
||||
switch (repeat) {
|
||||
case 1: // ñòàâèì A
|
||||
a = media.getMediaTime();
|
||||
break;
|
||||
case 2: // ñòàâèì B
|
||||
b = media.getMediaTime();
|
||||
if(a>b) {
|
||||
int t = b; b=a; a=t;
|
||||
}
|
||||
break;
|
||||
case 3: // êîíåö ïîâòîðà
|
||||
a = b = 0;
|
||||
repeat = 0;
|
||||
break;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
}
|
37
src/Capuchin.java
Normal file
37
src/Capuchin.java
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
import com.sonyericsson.capuchin.*;
|
||||
import javax.microedition.lcdui.*;
|
||||
|
||||
/**
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class Capuchin {
|
||||
|
||||
//public FlashPlayer flashPlayer;
|
||||
public FlashImage flashImage;
|
||||
//public FlashCanvas flashCanvas;
|
||||
|
||||
public Capuchin(int i) {
|
||||
// flashPlayer = null;
|
||||
flashImage = null;
|
||||
// flashCanvas = null;
|
||||
try
|
||||
{
|
||||
flashImage = FlashImage.createImage(getClass().getResourceAsStream("/"+String.valueOf(i)+".swf"), null);
|
||||
// if(flashImage != null)
|
||||
// {
|
||||
// flashCanvas = new FlashCanvas(flashImage);
|
||||
// flashPlayer = FlashPlayer.createFlashPlayer(flashImage, flashCanvas);
|
||||
// flashCanvas.setFullScreenMode(true);
|
||||
// }
|
||||
}
|
||||
catch(Exception ex) {}
|
||||
}
|
||||
|
||||
public void drawFlash(Graphics g, int x, int y, int w, int h) {
|
||||
if(flashImage!=null) flashImage.render(g, x, y, w, h);
|
||||
}
|
||||
}
|
142
src/FindLyrics.java
Normal file
142
src/FindLyrics.java
Normal file
@ -0,0 +1,142 @@
|
||||
|
||||
import java.io.*;
|
||||
import javax.microedition.io.*;
|
||||
import javax.microedition.io.file.FileConnection;
|
||||
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class FindLyrics {
|
||||
|
||||
String MSG;
|
||||
|
||||
public FindLyrics() {
|
||||
|
||||
}
|
||||
public boolean find(String artist, String title) {
|
||||
MSG = "";
|
||||
String url = "http://www.lyricsplugin.com/winamp03/plugin/?artist="+urlName(artist)+"&title="+urlName(title);
|
||||
try {
|
||||
byte[] res = send(url);
|
||||
int lr1 = MSG.indexOf("<div id="+'"'+"lyrics"+'"'+">");
|
||||
int lr2 = MSG.indexOf("</div>", lr1);
|
||||
if((lr2-lr1)>30) {
|
||||
FileConnection fc;
|
||||
fc = (FileConnection) Connector.open("file:///" + Rms.lrcpath+artist+" - "+title+".html");
|
||||
if(fc.exists()) fc.delete();
|
||||
fc.create();
|
||||
OutputStream os = fc.openOutputStream();
|
||||
os.write(res);
|
||||
os.flush();
|
||||
os.close();
|
||||
fc.close();
|
||||
return true;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void scrob(String song) {
|
||||
String artist = song.substring(0, song.lastIndexOf('-')).trim();
|
||||
String title = song.substring(song.lastIndexOf('-')+1).trim();
|
||||
MSG = "";
|
||||
String url = "http://annimon.z83.ru/nowplaying.php?id="+Rms.id+"&a="+urlName(artist)+"&t="+urlName(title);
|
||||
try {
|
||||
send(url);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
|
||||
private byte[] send(String url) throws Exception {
|
||||
HttpConnection hc = null;
|
||||
InputStream is = null;
|
||||
byte[] res = null;
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
try {
|
||||
hc = (HttpConnection) Connector.open(url);
|
||||
int ch;
|
||||
is = hc.openInputStream();
|
||||
StringBuffer sb = new StringBuffer();
|
||||
while ((ch = is.read()) != -1) {
|
||||
sb.append(StringEncoder.decodeCharCP1251((byte)ch));
|
||||
bos.write(ch);
|
||||
}
|
||||
MSG = sb.toString();
|
||||
res = bos.toByteArray();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
try {
|
||||
if (bos != null) bos.close();
|
||||
if (is != null) is.close();
|
||||
if (hc != null) hc.close();
|
||||
} catch (Exception e2) {
|
||||
e2.printStackTrace();
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
private String urlName(String url) {
|
||||
if (url == null) return null;
|
||||
StringBuffer sb = new StringBuffer();
|
||||
for (int i = 0; i < url.length(); i++) {
|
||||
char ch = url.charAt(i);
|
||||
switch (ch) {
|
||||
default:
|
||||
if (ch < '\200') {
|
||||
sb.append(ch);
|
||||
break;
|
||||
}
|
||||
if (ch > '\177' && ch < '\u0800') {
|
||||
sb.append('%');
|
||||
sb.append(Integer.toHexString((ch >> 6 | 0xc0) + 256).substring(1));
|
||||
sb.append('%');
|
||||
sb.append(Integer.toHexString((ch & 0x3f | 0x80) + 256).substring(1));
|
||||
break;
|
||||
}
|
||||
if (ch > '\u07FF' && ch < '\0') {
|
||||
sb.append('%');
|
||||
sb.append(Integer.toHexString((ch >> 12 | 0xe0) + 256).substring(1));
|
||||
sb.append('%');
|
||||
sb.append(Integer.toHexString((ch >> 6 & 0x3f | 0x80) + 256).substring(1));
|
||||
sb.append('%');
|
||||
sb.append(Integer.toHexString((ch & 0x3f | 0x80) + 256).substring(1));
|
||||
}
|
||||
break;
|
||||
case 0: //'\0'
|
||||
case 32: sb.append("%20"); break;// ' '
|
||||
case 61: sb.append("%3d"); break;// '='
|
||||
case 43: sb.append("%2b"); break;// '+'
|
||||
case 39: sb.append("%27"); break;// '\''
|
||||
case 46: sb.append("%2E"); break;// '.'
|
||||
case 60: sb.append("%3c"); break;// '<'
|
||||
case 62: sb.append("%3e"); break;// '>'
|
||||
case 35: sb.append("%23"); break;// '#'
|
||||
case 37: sb.append("%25"); break;// '%'
|
||||
case 38: sb.append("%26"); break;// '&'
|
||||
case 123:sb.append("%7b"); break;// '{'
|
||||
case 125:sb.append("%7d"); break;// '}'
|
||||
case 92: sb.append("%5c"); break;// '\\'
|
||||
case 94: sb.append("%5e"); break;// '^'
|
||||
case 126:sb.append("%73"); break;// '~'
|
||||
case 91: sb.append("%5b"); break;// '['
|
||||
case 93: sb.append("%5d"); break;// ']'
|
||||
case 58: sb.append("%3A"); break;// ':'
|
||||
case 47: sb.append("%2F"); break;// '/'
|
||||
case 63: sb.append("%3F"); break;// '?'
|
||||
case 45: sb.append("%2D"); break;// '-'
|
||||
case 33: sb.append("%21"); break;// '!'
|
||||
case 59: sb.append("%3B"); break;// ';'
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
57
src/FindText.java
Normal file
57
src/FindText.java
Normal file
@ -0,0 +1,57 @@
|
||||
|
||||
import com.sonyericsson.multimedia.MetaData;
|
||||
import javax.microedition.lcdui.*;
|
||||
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
/**
|
||||
*
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class FindText extends Form implements CommandListener {
|
||||
|
||||
private Command back, ok;
|
||||
public TextField artist, title;
|
||||
|
||||
public FindText() {
|
||||
super(SEPS.midlet.lang.findtext);
|
||||
back = new Command(SEPS.midlet.lang.back, Command.BACK, 2);
|
||||
ok = new Command(SEPS.midlet.lang.ok, Command.OK, 1);
|
||||
String ar="",ti="";
|
||||
try{
|
||||
MetaData metaData = SEPS.midlet.cnv.media.getMetaData();
|
||||
ti = getValue(metaData, MetaData.TITLE_KEY);
|
||||
ar = getValue(metaData, MetaData.ARTIST_KEY);
|
||||
}catch(Exception ex){}
|
||||
artist = new TextField(SEPS.midlet.lang.artist, ar, 255, TextField.ANY);
|
||||
title = new TextField(SEPS.midlet.lang.title, ti, 255, TextField.ANY);
|
||||
append(artist);
|
||||
append(title);
|
||||
addCommand(ok);
|
||||
addCommand(back);
|
||||
setCommandListener(this);
|
||||
SEPS.midlet.dsp.setCurrent(this);
|
||||
}
|
||||
|
||||
private String getValue(MetaData metaData, String md) {
|
||||
String data = metaData.getValue(md);
|
||||
StringBuffer sb = new StringBuffer();
|
||||
for(int i=0; i<data.length(); i++) {
|
||||
sb.append(StringEncoder.checkCP1251(data.charAt(i)));//.decodeCharCP1251((byte) data.charAt(i)));
|
||||
}
|
||||
return sb.toString();//data;
|
||||
}
|
||||
|
||||
public void commandAction(Command c, Displayable d) {
|
||||
if (c == back) new Menu();
|
||||
|
||||
if (c == ok) {
|
||||
FindLyrics fl = new FindLyrics();
|
||||
boolean check = fl.find(artist.getString(), title.getString());//SEPS.midlet.dsp.setCurrent(SEPS.midlet.cnv);
|
||||
if(check) append(SEPS.midlet.lang.textsaving);
|
||||
else append(SEPS.midlet.lang.nofound);
|
||||
}
|
||||
}
|
||||
}
|
@ -12,18 +12,23 @@ import javax.microedition.lcdui.*;
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class Info extends Form implements CommandListener {
|
||||
private Command back = new Command("Íàçàä", Command.BACK, 1);
|
||||
private Command back = new Command(SEPS.midlet.lang.back, Command.BACK, 1);
|
||||
private StringItem Text;
|
||||
private Command site = new Command("Íà ñàéò", Command.HELP, 2);
|
||||
private Command site = new Command(SEPS.midlet.lang.site, Command.HELP, 2);
|
||||
private Command scrob = new Command(SEPS.midlet.lang.scrobdb, Command.HELP, 3);
|
||||
|
||||
|
||||
public Info() {
|
||||
super("Î ïðîãðàììå");
|
||||
super(SEPS.midlet.lang.about);
|
||||
String str = getText("/about");
|
||||
Text = new StringItem(null, str);
|
||||
append(Text);
|
||||
addCommand(site);
|
||||
addCommand(back);
|
||||
if(Rms.urlstat) {
|
||||
addCommand(scrob);
|
||||
append("ID="+Rms.id);
|
||||
}
|
||||
setCommandListener(this);
|
||||
}
|
||||
|
||||
@ -31,13 +36,23 @@ public class Info extends Form implements CommandListener {
|
||||
if(c==back) new Menu();
|
||||
if(c==site) {
|
||||
try {
|
||||
String url = "http://annimon.wen.ru/";
|
||||
String scr = "";
|
||||
if(Rms.id!=0) scr="annimon.z83.ru/seps/"+String.valueOf(Rms.id)+".txt";
|
||||
String url = "http://annimon.z83.ru/";
|
||||
if(url.length()!=22) return;
|
||||
SEPS.midlet.platformRequest(url);
|
||||
} catch (ConnectionNotFoundException ex) {
|
||||
new Menu();
|
||||
}
|
||||
}
|
||||
if(c==scrob) {
|
||||
try {
|
||||
String url = "http://annimon.z83.ru/seps/"+String.valueOf(Rms.id)+".txt";
|
||||
SEPS.midlet.platformRequest(url);
|
||||
} catch (ConnectionNotFoundException ex) {
|
||||
new Menu();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getText(String path) {
|
||||
@ -46,7 +61,7 @@ public class Info extends Form implements CommandListener {
|
||||
int ch = 0;
|
||||
try {
|
||||
while ((ch = dis.read()) != -1) {
|
||||
strBuff.append((char) ((ch >= 0xc0 && ch <= 0xFF) ? (ch + 0x350) : ch));
|
||||
strBuff.append(StringEncoder.decodeCharCP1251((byte)ch));
|
||||
}
|
||||
dis.close();
|
||||
} catch (Exception e) {e.printStackTrace();}
|
||||
|
97
src/Lang.java
Normal file
97
src/Lang.java
Normal file
@ -0,0 +1,97 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class Lang {
|
||||
|
||||
String menu, back, exit, ok, findtext, artist, title, textsaving, nofound;
|
||||
String site, scrobdb, about, sreturn, sleepmode, options, minimise;
|
||||
String sensetivity, textfolder, vibro, skin, visual, origseps, elements,
|
||||
gothic, emo,light, start, stop, flashlight, tooff,
|
||||
statlocal, scrobbling, origjava, circles, uiactivity, listforward;
|
||||
|
||||
public Lang(int id) {
|
||||
if(id==0) {
|
||||
menu = "Menu";
|
||||
back = "Back";
|
||||
exit = "Exit";
|
||||
ok = "Ok";
|
||||
findtext = "Text Search";
|
||||
artist = "Artist";
|
||||
title = "Title";
|
||||
textsaving = "Text saved\n";
|
||||
nofound = "Not found\n";
|
||||
site = "Site";
|
||||
scrobdb = "Scrobbling info";
|
||||
about = "About";
|
||||
sreturn = "Return";
|
||||
sleepmode = "Sleep Mode";
|
||||
options = "Options";
|
||||
minimise = "Minimise";
|
||||
sensetivity = "Sensetivity to switch:";
|
||||
textfolder = "Folder with the text:";
|
||||
vibro = "Vibration switch (in ms):";
|
||||
skin = "Skins";
|
||||
visual = "Visualization";
|
||||
origseps = "Original SEPS";
|
||||
gothic = "Gothic";
|
||||
emo = "Emo";
|
||||
light = "Backlight";
|
||||
start = "Launch player when program start";
|
||||
stop = "Close player when program exit";
|
||||
flashlight = "Flash backlight";
|
||||
statlocal = "Statistics (need to restart app)";
|
||||
scrobbling = "Scrobbling (annimon.z83.ru)";
|
||||
origjava = "Original Java";
|
||||
circles = "Circles (1.swf)";
|
||||
elements = "Elements: ";
|
||||
tooff = "Time to turn off (in minutes):";
|
||||
uiactivity = "Sync. with ActivityMenu";
|
||||
listforward = "List Forward";
|
||||
}else{
|
||||
menu = "Ìåíþ";
|
||||
back = "Íàçàä";
|
||||
exit = "Âûõîä";
|
||||
ok = "Ok";
|
||||
findtext = "Ïîèñê òåêñòîâ";
|
||||
artist = "Èñïîëíèòåëü";
|
||||
title = "Çàãîëîâîê";
|
||||
textsaving = "Òåêñò ñîõðàíåí\n";
|
||||
nofound = "Íå íàéäåíî\n";
|
||||
site = "Íà ñàéò";
|
||||
scrobdb = "Äàííûå ñêðîááëèíãà";
|
||||
about = "Î ïðîãðàììå";
|
||||
sreturn = "Âåðíóòüñÿ";
|
||||
sleepmode = "Ñïÿùèé ðåæèì";
|
||||
options = "Íàñòðîéêè";
|
||||
minimise = "Ñâåðíóòü";
|
||||
sensetivity = "×óâñòâèòåëüíîñòü ê ïåðåêëþ÷åíèþ:";
|
||||
textfolder = "Ïàïêà ñ òåêñòàìè:";
|
||||
vibro = "Âèáðàöèÿ ïðè ïåðåêëþ÷åíèè (â ìñ):";
|
||||
skin = "Ñêèíû";
|
||||
visual = "Âèçóàëèçàöèè";
|
||||
origseps = "Ñòàíäàðòíûé SEPS";
|
||||
gothic = "Ãîòè÷åñêèé";
|
||||
emo = "Ýìî";
|
||||
light = "Ïîñòîÿííàÿ ïîäñâåòêà";
|
||||
start = "Çàïóñêàòü ïëåéåð ïðè ñòàðòå ïðîãðàììû";
|
||||
stop = "Çàêðûâàòü ïëåéåð ïðè âûõîäå èç ïðîãðàììû";
|
||||
flashlight = "Ìèãàíèå ïîäñâåòêîé";
|
||||
statlocal = "Âåñòè ñòàòèñòèêó (íåîáõîäèì ïåðåçàïóñê)";
|
||||
scrobbling = "Ñêðîááëèíã";
|
||||
origjava = "Ñòàíäàðòíûé Java";
|
||||
circles = "Êðóãè (1.swf)";
|
||||
elements = "Âñåãî ýëåìåíòîâ: ";
|
||||
tooff = "Âðÿìÿ äî âûêëþ÷åíèÿ (â ìèíóòàõ):";
|
||||
uiactivity = "Ñèíõð. ñ Ìåíþ Ñîáûòèé";
|
||||
listforward = "Ëèñòàòü âïåðåä";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -87,7 +87,7 @@ public class Lyrics {
|
||||
|
||||
int ch = 0;
|
||||
while ((ch = is.read()) != -1) {
|
||||
sb.append((char) ((ch >= 0xc0 && ch <= 0xFF) ? (ch + 0x350) : ch));
|
||||
sb.append(StringEncoder.decodeCharCP1251((byte)ch));
|
||||
}
|
||||
is.close();
|
||||
fc.close();
|
||||
@ -108,6 +108,7 @@ public class Lyrics {
|
||||
{
|
||||
Vector v = new Vector();
|
||||
char c = '\n';
|
||||
for(int i=0; i<=5; i++) {text=("[00:00.00] \n")+text+("[999:00.00] \n");}
|
||||
int j = text.length();
|
||||
String s2 = "";
|
||||
for(int k = 0; k < j; k++)
|
||||
@ -115,7 +116,7 @@ public class Lyrics {
|
||||
int i = text.charAt(k);
|
||||
if(i == c)
|
||||
{
|
||||
if(s2.length() > 0)
|
||||
if(s2.length() > 0 && s2.startsWith("["))
|
||||
{
|
||||
if(time && isNumChar(s2.charAt(1))) v.addElement(s2.substring(0, s2.indexOf(']')+1).trim());
|
||||
else if(isNumChar(s2.charAt(1))) v.addElement(s2.substring(s2.lastIndexOf(']')+1).trim());
|
||||
@ -126,7 +127,7 @@ public class Lyrics {
|
||||
s2 = s2 + String.valueOf((char)i);
|
||||
}
|
||||
}
|
||||
if(s2.length() > 0) {
|
||||
if(s2.length() > 0 && s2.startsWith("[")) {
|
||||
if(time && isNumChar(s2.charAt(1))) v.addElement(s2.substring(0, s2.indexOf(']')+1).trim());
|
||||
else if(isNumChar(s2.charAt(1))) v.addElement(s2.substring(s2.lastIndexOf(']')+1).trim());
|
||||
}
|
||||
@ -174,7 +175,7 @@ public class Lyrics {
|
||||
* Ïðåîáðàçîâûâàåò âñå íåèíòåðíåò ññûëêè â íîðìàëüíûå, íàïðèìåð óáèðàÿ ïðîáåëû èëè ëèøíèå ñèìâîëû.
|
||||
* @param url - èñõîäíûé àäðåñ
|
||||
* @return - ïðàâèëüíûé àäðåñ íà âûõîäå
|
||||
*/
|
||||
|
||||
private String urlName(String url) {
|
||||
if (url == null) return null;
|
||||
StringBuffer sb = new StringBuffer();
|
||||
@ -229,5 +230,5 @@ public class Lyrics {
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
@ -15,8 +15,10 @@ public class Menu implements CommandListener {
|
||||
private Display dsp;
|
||||
|
||||
public Menu() {
|
||||
String[] m = new String[] {"Âåðíóòüñÿ", "Íàñòðîéêè", "Î ïðîãðàììå", "Ñâåðíóòü", "Âûõîä"};
|
||||
ls = new List("Ìåíþ", List.IMPLICIT, m, null);
|
||||
String[] m = new String[] {SEPS.midlet.lang.sreturn, SEPS.midlet.lang.sleepmode,
|
||||
SEPS.midlet.lang.findtext, SEPS.midlet.lang.options, SEPS.midlet.lang.about,
|
||||
SEPS.midlet.lang.minimise, SEPS.midlet.lang.exit};
|
||||
ls = new List(SEPS.midlet.lang.menu, List.IMPLICIT, m, null);
|
||||
ls.setCommandListener(this);
|
||||
dsp = SEPS.midlet.dsp;
|
||||
dsp.setCurrent(ls);
|
||||
@ -27,10 +29,12 @@ public class Menu implements CommandListener {
|
||||
int i = ls.getSelectedIndex();
|
||||
switch(i) {
|
||||
case 0: dsp.setCurrent(SEPS.midlet.cnv); break;
|
||||
case 1: dsp.setCurrent(new Options()); break;
|
||||
case 2: dsp.setCurrent(new Info()); break;
|
||||
case 3: dsp.setCurrent(null); break;
|
||||
case 4: SEPS.midlet.destroyApp(true); break;
|
||||
case 1: dsp.setCurrent(new SetSleepMode()); break;
|
||||
case 2: dsp.setCurrent(new FindText()); break;
|
||||
case 3: dsp.setCurrent(new Options()); break;
|
||||
case 4: dsp.setCurrent(new Info()); break;
|
||||
case 5: dsp.setCurrent(null); break;
|
||||
case 6: SEPS.midlet.destroyApp(true); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,4 @@
|
||||
import java.util.Random;
|
||||
import javax.microedition.lcdui.*;
|
||||
|
||||
/*
|
||||
@ -12,21 +13,24 @@ import javax.microedition.lcdui.*;
|
||||
public class Options extends Form implements CommandListener {
|
||||
|
||||
private Command back,ok;
|
||||
private TextField az, un, cc, hp;
|
||||
private ChoiceGroup skin, cRC;
|
||||
private TextField zw, az, un;
|
||||
private ChoiceGroup skin, vis, cRC, lang;
|
||||
|
||||
|
||||
public Options() {
|
||||
super("Íàñòðîéêè");
|
||||
back = new Command("Íàçàä", Command.BACK, 3);
|
||||
ok = new Command("Ok", Command.OK, 1);
|
||||
az = new TextField("Ïàïêà ñ òåêñòàìè:", Rms.lrcpath, 256, TextField.ANY);
|
||||
// un = new TextField(L.str[L.noc]+":", String.valueOf(P.undo), 2, TextField.NUMERIC);
|
||||
super(SEPS.midlet.lang.options);
|
||||
back = new Command(SEPS.midlet.lang.back, Command.BACK, 3);
|
||||
ok = new Command(SEPS.midlet.lang.ok, Command.OK, 1);
|
||||
zw = new TextField(SEPS.midlet.lang.sensetivity, String.valueOf(Rms.sensetivity), 4, TextField.NUMERIC);
|
||||
az = new TextField(SEPS.midlet.lang.textfolder, Rms.lrcpath, 256, TextField.ANY);
|
||||
un = new TextField(SEPS.midlet.lang.vibro, String.valueOf(Rms.vibrlen), 4, TextField.NUMERIC);
|
||||
// cc = new TextField(L.str[L.cch]+":", "000000", 6, TextField.ANY);
|
||||
// hp = new TextField(L.str[L.ach], String.valueOf(P.heap), 2, TextField.ANY);
|
||||
skin = new ChoiceGroup ("Ñêèíû", ChoiceGroup.EXCLUSIVE);
|
||||
lang = new ChoiceGroup ("Language / ßçûê", ChoiceGroup.EXCLUSIVE);
|
||||
skin = new ChoiceGroup (SEPS.midlet.lang.skin, ChoiceGroup.EXCLUSIVE);
|
||||
vis = new ChoiceGroup (SEPS.midlet.lang.visual, ChoiceGroup.EXCLUSIVE);
|
||||
cRC = new ChoiceGroup ("", ChoiceGroup.MULTIPLE);
|
||||
appendOther();
|
||||
appendSkin();
|
||||
StrokeStyle();
|
||||
}
|
||||
|
||||
@ -35,16 +39,27 @@ public class Options extends Form implements CommandListener {
|
||||
|
||||
if ((c==ok || c==List.SELECT_COMMAND)) {
|
||||
new Skin(Rms.skinid = skin.getSelectedIndex());
|
||||
SEPS.midlet.lang = new Lang(Rms.lngid = lang.getSelectedIndex());
|
||||
Rms.visid = vis.getSelectedIndex();
|
||||
if(Rms.visid!=0) SEPS.midlet.cnv.swf = new Capuchin (Rms.visid);
|
||||
Rms.sensetivity=Integer.parseInt(zw.getString());
|
||||
Rms.vibrlen=Integer.parseInt(un.getString());
|
||||
Rms.lrcpath=az.getString();
|
||||
// P.az=Integer.parseInt(az.getString());
|
||||
// P.curcolor = getHexValue(cc.getString());
|
||||
// P.heap = Integer.parseInt(hp.getString());
|
||||
Rms.light = cRC.isSelected(0);
|
||||
// P.dsI = cRC.isSelected(1);
|
||||
// P.isUndo = cRC.isSelected(2);
|
||||
// P.isEfView = cRC.isSelected(3);
|
||||
// P.isLight = cRC.isSelected(4);
|
||||
// P.BOC = cRC.isSelected(5);
|
||||
Rms.startPlayer = cRC.isSelected(1);
|
||||
Rms.closePlayer = cRC.isSelected(2);
|
||||
Rms.flash = cRC.isSelected(3);
|
||||
Rms.statGo = cRC.isSelected(4); if(!Rms.statGo) Rms.stat=Rms.statGo;
|
||||
Rms.urlstat = cRC.isSelected(5);
|
||||
Rms.actmenu = cRC.isSelected(6);
|
||||
Rms.listfw = cRC.isSelected(7);
|
||||
if(Rms.urlstat && Rms.id==0) {
|
||||
Random rnd = new Random();
|
||||
Rms.id = (rnd.nextInt() >>> 1) % 10000000;
|
||||
}
|
||||
// P.undo=Integer.parseInt(un.getString());
|
||||
// Editor.isteps = new Image[P.undo];
|
||||
// Editor.ist=0;
|
||||
@ -53,38 +68,61 @@ public class Options extends Form implements CommandListener {
|
||||
}
|
||||
|
||||
private void StrokeStyle() {
|
||||
append(lang);
|
||||
append(skin);
|
||||
append(zw);
|
||||
append(az);
|
||||
// append(cc);
|
||||
append(un);
|
||||
append(vis);
|
||||
// append(hp);
|
||||
append(cRC);
|
||||
// append(un);
|
||||
addCommand(ok);
|
||||
addCommand(back);
|
||||
setCommandListener(this);
|
||||
SEPS.midlet.dsp.setCurrent(this);
|
||||
}
|
||||
|
||||
private void appendOther() {
|
||||
skin.append("Ñòàíäàðòíûé SEPS", null);
|
||||
private void appendSkin() {
|
||||
lang.append("English", null);
|
||||
lang.append("Ðóññêèé", null);
|
||||
lang.setSelectedIndex(Rms.lngid, true);
|
||||
|
||||
skin.append(SEPS.midlet.lang.origseps, null);
|
||||
skin.append("ProPaintMobile", null);
|
||||
skin.append("Ãîòè÷åñêèé", null);
|
||||
skin.append("Ýìî", null);
|
||||
skin.append(SEPS.midlet.lang.gothic, null);
|
||||
skin.append(SEPS.midlet.lang.emo, null);
|
||||
skin.append("SEclub.ORG", null);
|
||||
skin.append("aNNiMON Forum", null);
|
||||
skin.setSelectedIndex(Rms.skinid, true);
|
||||
|
||||
cRC.append("Ïîñòîÿííàÿ ïîäñâåòêà", null);
|
||||
// cRC.append(L.str[L.stias], null);
|
||||
// cRC.append(L.str[L.aplca], null);
|
||||
// cRC.append(L.str[L.prwef], null);
|
||||
cRC.append(SEPS.midlet.lang.light, null);
|
||||
cRC.append(SEPS.midlet.lang.start, null);
|
||||
cRC.append(SEPS.midlet.lang.stop, null);
|
||||
cRC.append(SEPS.midlet.lang.flashlight, null);
|
||||
cRC.append(SEPS.midlet.lang.statlocal, null);
|
||||
cRC.append(SEPS.midlet.lang.scrobbling, null);
|
||||
cRC.append(SEPS.midlet.lang.uiactivity, null);
|
||||
cRC.append(SEPS.midlet.lang.listforward, null);
|
||||
// cRC.append(L.str[120], null);
|
||||
// cRC.append(L.str[123], null);
|
||||
cRC.setSelectedIndex(0, Rms.light);
|
||||
// cRC.setSelectedIndex(1, P.dsI);
|
||||
// cRC.setSelectedIndex(2, P.isUndo);
|
||||
// cRC.setSelectedIndex(3, P.isEfView);
|
||||
// cRC.setSelectedIndex(4, P.isLight);
|
||||
// cRC.setSelectedIndex(5, P.BOC);
|
||||
cRC.setSelectedIndex(1, Rms.startPlayer);
|
||||
cRC.setSelectedIndex(2, Rms.closePlayer);
|
||||
cRC.setSelectedIndex(3, Rms.flash);
|
||||
cRC.setSelectedIndex(4, Rms.stat);
|
||||
cRC.setSelectedIndex(5, Rms.urlstat);
|
||||
cRC.setSelectedIndex(6, Rms.actmenu);
|
||||
cRC.setSelectedIndex(7, Rms.listfw);
|
||||
|
||||
vis.append(SEPS.midlet.lang.origjava, null);
|
||||
vis.append(SEPS.midlet.lang.circles, null);
|
||||
vis.append("Kaleidoscope black (2.swf)", null);
|
||||
vis.append("Laura sb strobe (3.swf)", null);
|
||||
vis.append("Precision red (4.swf)", null);
|
||||
vis.append("Rain (5.swf)", null);
|
||||
vis.append("Power dots (6.swf)", null);
|
||||
// vis.append("Jet (7.swf)", null);
|
||||
// vis.append("Jet (8.swf)", null);
|
||||
vis.setSelectedIndex(Rms.visid, true);
|
||||
}
|
||||
}
|
||||
|
14
src/Rate.java
Normal file
14
src/Rate.java
Normal file
@ -0,0 +1,14 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class Rate {
|
||||
|
||||
String song;
|
||||
int rate;
|
||||
}
|
139
src/RateImpl.java
Normal file
139
src/RateImpl.java
Normal file
@ -0,0 +1,139 @@
|
||||
import java.io.*;
|
||||
import java.util.Vector;
|
||||
import javax.microedition.io.*;
|
||||
import javax.microedition.io.file.FileConnection;
|
||||
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class RateImpl {
|
||||
|
||||
public int numRates; //êîë-âî
|
||||
public Vector rates;
|
||||
|
||||
public int update(String song) {
|
||||
int s = rates.size();
|
||||
if(s!=0)
|
||||
for(int i=0; i<s; i++) {
|
||||
Rate r = (Rate) rates.elementAt(i);
|
||||
if(r.song.equals(song)) {
|
||||
r.rate++;
|
||||
rates.setElementAt(r, i);
|
||||
return r.rate;
|
||||
}
|
||||
}
|
||||
Rate r = new Rate();
|
||||
r.song = song;
|
||||
r.rate = 1;
|
||||
rates.addElement(r);
|
||||
return 1;
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
rates.removeAllElements();
|
||||
}
|
||||
|
||||
public void open() {
|
||||
FileConnection fc;
|
||||
rates = new Vector();
|
||||
StringBuffer sb = new StringBuffer();
|
||||
try {
|
||||
fc = (FileConnection) Connector.open("file:///c:/other/SEPS_Rate.txt", Connector.READ);
|
||||
if(!fc.exists()) {fc.close();return;}
|
||||
InputStream is = fc.openInputStream();
|
||||
int ch = 0;
|
||||
while ((ch = is.read()) != -1) {
|
||||
sb.append(StringEncoder.decodeCharCP1251((byte)ch));
|
||||
}
|
||||
is.close();
|
||||
fc.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
String s = sb.toString();
|
||||
char c = '\n';
|
||||
int j = s.length();
|
||||
String s2 = "";
|
||||
for(int k = 0; k < j; k++)
|
||||
{
|
||||
int i = s.charAt(k);
|
||||
if(i == c)
|
||||
{
|
||||
if(s2.length() > 0)
|
||||
{
|
||||
try {
|
||||
Rate r = new Rate();
|
||||
r.rate = Integer.parseInt(s2.substring(0, s2.lastIndexOf('|')).trim());
|
||||
r.song = s2.substring(s2.lastIndexOf('|') + 1).trim();
|
||||
rates.addElement(r);
|
||||
} catch (Exception ex) {
|
||||
}
|
||||
s2 = "";
|
||||
}
|
||||
}else s2 = s2 + String.valueOf((char)i);
|
||||
}
|
||||
if(s2.length() > 0) {
|
||||
try {
|
||||
Rate r = new Rate();
|
||||
r.rate = Integer.parseInt(s2.substring(0, s2.lastIndexOf('|')).trim());
|
||||
r.song = s2.substring(s2.lastIndexOf('|') + 1).trim();
|
||||
rates.addElement(r);
|
||||
} catch (Exception exc) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void save() {
|
||||
FileConnection fc;
|
||||
try {
|
||||
fc = (FileConnection) Connector.open("file:///c:/other/SEPS_Rate.txt");
|
||||
if(fc.exists()) {fc.delete();}
|
||||
fc.create();
|
||||
DataOutputStream os = fc.openDataOutputStream();
|
||||
Rate[] s = sortRate();
|
||||
int l = s.length;
|
||||
for(int i=0; i<l; i++) {
|
||||
addText(os, s[i].rate+" | "+s[i].song);
|
||||
}
|
||||
addText(os, SEPS.midlet.lang.elements+l);
|
||||
os.flush();
|
||||
os.close();
|
||||
fc.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void addText(DataOutputStream dos, String s1) throws IOException {
|
||||
byte[] bt = new byte[s1.length()+1];
|
||||
int ss = bt.length-1;
|
||||
for (int i = 0; i < ss; i++) {
|
||||
char c = s1.charAt(i);
|
||||
dos.writeByte(StringEncoder.encodeCharCP1251(c));
|
||||
}
|
||||
dos.writeByte((byte) '\n');
|
||||
|
||||
}
|
||||
|
||||
private Rate[] sortRate() {
|
||||
Rate[] s = new Rate[rates.size()];
|
||||
rates.copyInto(s);
|
||||
int sl = s.length;
|
||||
for(int i=0; i<sl; i++) {
|
||||
for(int j=0; j<sl-1; j++) {
|
||||
if(s[j].rate<s[j+1].rate) {
|
||||
Rate q=s[j];
|
||||
s[j]=s[j+1];
|
||||
s[j+1]=q;
|
||||
}
|
||||
}
|
||||
}
|
||||
return s;
|
||||
}
|
||||
}
|
52
src/Rms.java
52
src/Rms.java
@ -8,13 +8,33 @@ import javax.microedition.rms.*;
|
||||
*/
|
||||
public class Rms {
|
||||
|
||||
private static final String rmsName = "SEPSLite";
|
||||
private static final String rmsName = "SEPS";
|
||||
private static RecordStore rmsStore;
|
||||
public static boolean firstStart = true; // ïåðâûé ñòàðò
|
||||
public static int sensetivity = 800;
|
||||
public static int skinid = 0;
|
||||
public static boolean isLyric = true;
|
||||
public static String lrcpath = "c:/music/Lyrics/";
|
||||
public static boolean light = false;
|
||||
public static boolean startPlayer = true;//çàïóñêàòü ïëåéåð ïðè ñòàðòå ïðîãðàììû
|
||||
public static boolean closePlayer = true;//çàêðûâàòü ïëåéåð ïðè âûõîäå èç ïðîãðàììû
|
||||
public static int vibrlen = 200;
|
||||
public static boolean flash = true;//ìèãàíèå ïðè ïåðåêëþ÷åíèè
|
||||
public static int visid = 0;
|
||||
public static boolean statGo = false; //ïåðåêëþ÷àòåëü ñòàòèñòèêè
|
||||
public static boolean stat = false;//âåñòè ñòàòèñòèêó
|
||||
public static boolean urlstat = true;
|
||||
public static boolean actmenu = false;
|
||||
public static boolean listfw = false;
|
||||
public static boolean vis = true;
|
||||
public static boolean accel = true;
|
||||
public static String lastSong = "";
|
||||
public static int id = 0;
|
||||
public static int lngid = 0;
|
||||
|
||||
|
||||
public static int dh,dm;
|
||||
public static boolean slpmode = false;
|
||||
/**
|
||||
* Ñîõðàíåíèå íàñòðîåê
|
||||
*/
|
||||
@ -25,10 +45,25 @@ public class Rms {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
DataOutputStream dos = new DataOutputStream(baos);
|
||||
dos.writeBoolean(firstStart);
|
||||
dos.writeInt(sensetivity);
|
||||
dos.writeInt(skinid);
|
||||
dos.writeBoolean(isLyric);
|
||||
dos.writeUTF(lrcpath);
|
||||
dos.writeBoolean(light);
|
||||
dos.writeBoolean(startPlayer);
|
||||
dos.writeBoolean(closePlayer);
|
||||
dos.writeInt(vibrlen);
|
||||
dos.writeBoolean(flash);
|
||||
dos.writeInt(visid);
|
||||
dos.writeBoolean(stat);
|
||||
dos.writeUTF(lastSong);
|
||||
dos.writeInt(id);
|
||||
dos.writeBoolean(urlstat);
|
||||
dos.writeInt(lngid);
|
||||
dos.writeBoolean(actmenu);
|
||||
dos.writeBoolean(listfw);
|
||||
dos.writeBoolean(vis);
|
||||
dos.writeBoolean(accel);
|
||||
dos.flush();
|
||||
options = baos.toByteArray();
|
||||
dos.close();
|
||||
@ -63,10 +98,25 @@ public class Rms {
|
||||
try {
|
||||
DataInputStream dis = new DataInputStream(new ByteArrayInputStream(rmsStore.getRecord(1)));
|
||||
firstStart = dis.readBoolean();
|
||||
sensetivity = dis.readInt();
|
||||
skinid = dis.readInt();
|
||||
isLyric = dis.readBoolean();
|
||||
lrcpath = dis.readUTF();
|
||||
light = dis.readBoolean();
|
||||
startPlayer = dis.readBoolean();
|
||||
closePlayer = dis.readBoolean();
|
||||
vibrlen = dis.readInt();
|
||||
flash = dis.readBoolean();
|
||||
visid = dis.readInt();
|
||||
stat = dis.readBoolean();
|
||||
lastSong = dis.readUTF();
|
||||
id = dis.readInt();
|
||||
urlstat = dis.readBoolean();
|
||||
lngid = dis.readInt();
|
||||
actmenu = dis.readBoolean();
|
||||
listfw = dis.readBoolean();
|
||||
vis = dis.readBoolean();
|
||||
accel = dis.readBoolean();
|
||||
dis.close();
|
||||
} catch (Exception ex) {
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
import java.util.Random;
|
||||
import javax.microedition.lcdui.Display;
|
||||
import javax.microedition.midlet.*;
|
||||
|
||||
@ -14,16 +15,22 @@ public class SEPS extends MIDlet {
|
||||
public static SEPS midlet;
|
||||
public Display dsp;
|
||||
public Canv cnv;
|
||||
public Lang lang;
|
||||
|
||||
public SEPS() {
|
||||
midlet = this;
|
||||
Rms.restoreOptions();
|
||||
new Skin(Rms.skinid);
|
||||
cnv = new Canv();
|
||||
dsp = Display.getDisplay(this);
|
||||
}
|
||||
|
||||
public void startApp() {
|
||||
Rms.restoreOptions();
|
||||
lang = new Lang(Rms.lngid);
|
||||
if(Rms.id==0) {
|
||||
Random rnd = new Random();
|
||||
Rms.id = (rnd.nextInt() >>> 1) % 10000000;
|
||||
}
|
||||
new Skin(Rms.skinid);
|
||||
cnv = new Canv();
|
||||
dsp = Display.getDisplay(this);
|
||||
dsp.setCurrent(cnv);
|
||||
}
|
||||
|
||||
@ -32,8 +39,10 @@ public class SEPS extends MIDlet {
|
||||
|
||||
public void destroyApp(boolean unco) {
|
||||
if(Rms.firstStart) Rms.firstStart=false;
|
||||
if(Rms.stat) cnv.ri.save();
|
||||
if(Rms.statGo) Rms.stat=true;
|
||||
Rms.saveOptions();
|
||||
cnv.pauseTrack();
|
||||
if(Rms.closePlayer) cnv.pauseTrack();
|
||||
notifyDestroyed();
|
||||
}
|
||||
}
|
||||
|
52
src/SetSleepMode.java
Normal file
52
src/SetSleepMode.java
Normal file
@ -0,0 +1,52 @@
|
||||
|
||||
import java.util.Calendar;
|
||||
import javax.microedition.lcdui.*;
|
||||
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
/**
|
||||
*
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class SetSleepMode extends Form implements CommandListener {
|
||||
|
||||
private Command back, ok;
|
||||
private TextField zw;
|
||||
|
||||
public SetSleepMode() {
|
||||
super(SEPS.midlet.lang.sleepmode);
|
||||
back = new Command(SEPS.midlet.lang.back, Command.BACK, 2);
|
||||
ok = new Command(SEPS.midlet.lang.ok, Command.OK, 1);
|
||||
zw = new TextField(SEPS.midlet.lang.tooff, String.valueOf(10), 2, TextField.NUMERIC);
|
||||
append(zw);
|
||||
addCommand(ok);
|
||||
addCommand(back);
|
||||
setCommandListener(this);
|
||||
SEPS.midlet.dsp.setCurrent(this);
|
||||
}
|
||||
|
||||
public void commandAction(Command c, Displayable d) {
|
||||
if (c == back) {
|
||||
SEPS.midlet.dsp.setCurrent(SEPS.midlet.cnv);
|
||||
}
|
||||
|
||||
if (c == ok) {
|
||||
Calendar cal = Calendar.getInstance();
|
||||
//òåêóùåå âðåìÿ
|
||||
int ch = cal.get(Calendar.HOUR_OF_DAY);
|
||||
int cm = cal.get(Calendar.MINUTE);
|
||||
//âðåìÿ âûêëþ÷åíèÿ
|
||||
int dh = ch;
|
||||
int dm = cm + Integer.parseInt(zw.getString());
|
||||
while(dm>=60) {
|
||||
dm=dm-60; dh++;
|
||||
}
|
||||
if(dh>=24) dh=dh-24;
|
||||
Rms.slpmode=true;
|
||||
Rms.dh=dh; Rms.dm=dm;
|
||||
SEPS.midlet.dsp.setCurrent(SEPS.midlet.cnv);
|
||||
}
|
||||
}
|
||||
}
|
66
src/StringEncoder.java
Normal file
66
src/StringEncoder.java
Normal file
@ -0,0 +1,66 @@
|
||||
|
||||
|
||||
public class StringEncoder
|
||||
{
|
||||
protected static char cp1251 [] =
|
||||
{
|
||||
'\u0410', '\u0411', '\u0412', '\u0413', '\u0414', '\u0415', '\u0416',
|
||||
'\u0417', '\u0418', '\u0419', '\u041A', '\u041B', '\u041C', '\u041D',
|
||||
'\u041E', '\u041F', '\u0420', '\u0421', '\u0422', '\u0423', '\u0424',
|
||||
'\u0425', '\u0426', '\u0427', '\u0428', '\u0429', '\u042A', '\u042B',
|
||||
'\u042C', '\u042D', '\u042E', '\u042F', '\u0430', '\u0431', '\u0432',
|
||||
'\u0433', '\u0434', '\u0435', '\u0436', '\u0437', '\u0438', '\u0439',
|
||||
'\u043A', '\u043B', '\u043C', '\u043D', '\u043E', '\u043F', '\u0440',
|
||||
'\u0441', '\u0442', '\u0443', '\u0444', '\u0445', '\u0446', '\u0447',
|
||||
'\u0448', '\u0449', '\u044A', '\u044B', '\u044C', '\u044D', '\u044E',
|
||||
'\u044F'
|
||||
};
|
||||
|
||||
public static char decodeCharCP1251 (byte b)
|
||||
{
|
||||
int ich = b & 0xff;
|
||||
if (ich == 0xb8) // Ñ‘
|
||||
return 0x0451;
|
||||
else if (ich == 0xa8) // Ð<EFBFBD>
|
||||
return 0x0401;
|
||||
else if (ich >= 0xc0)
|
||||
return cp1251[ich-192];
|
||||
return (char)ich;
|
||||
}
|
||||
|
||||
public static byte encodeCharCP1251 (char ch)
|
||||
{
|
||||
if (ch > 0 && ch < 128)
|
||||
return (byte) ch;
|
||||
else if (ch == 0x401)
|
||||
return -88; // ¨
|
||||
else if (ch == 0x404)
|
||||
return -86; // ª
|
||||
else if (ch == 0x407)
|
||||
return -81; // ¯
|
||||
else if (ch == 0x451)
|
||||
return -72; // ¸
|
||||
else if (ch == 0x454)
|
||||
return -70; // º
|
||||
else if (ch == 0x457)
|
||||
return -65; // ¿
|
||||
return (byte)((byte)(ch) + 176);
|
||||
}
|
||||
|
||||
public static char checkCP1251 (char ch)
|
||||
{
|
||||
int bt = (byte) ch;
|
||||
if(bt < 0) return decodeCharCP1251((byte) (256 + bt));
|
||||
else return ch;
|
||||
/*byte b = encodeCharCP1251(ch);
|
||||
int ich = b & 0xff;
|
||||
if (ich == 0xb8) // Ñ‘
|
||||
return 0x0451;
|
||||
else if (ich == 0xa8) // Ð<EFBFBD>
|
||||
return 0x0401;
|
||||
else if (ich >= 0xc0)
|
||||
return (char)(ich-192);
|
||||
return (char)ich;*/
|
||||
//return decodeCharCP1251(encodeCharCP1251(ch));
|
||||
}
|
||||
}
|
36
src/about
36
src/about
@ -1,20 +1,47 @@
|
||||
Sony Ericsson Player Service 3.0
|
||||
Sony Ericsson Player Service 5.2
|
||||
|
||||
Автор: Виктор aNNiMON Мельник
|
||||
Ñàéò ðàçðàáîò÷èêà: http://annimon.wen.ru/
|
||||
Сайт разработчика: http://annimon.z83.ru/
|
||||
|
||||
Программа - управление родным плейером для телефонов Sony Ericsson с поддержкой MultimediaService API и датчиком движения.
|
||||
|
||||
Управление:
|
||||
Влево/Вправо/Движение акселерометром - Переключение песен.
|
||||
Вверх/Вниз - переключение режимов: Всё/Визуализация/Текст.
|
||||
1/3 - Ïåðåìîòêà íàçàä/âïåðåä.
|
||||
1 - Горячая клавиша поиска текста.
|
||||
3 - установить начало/конец отрезка или отключить повтор.
|
||||
4/6 - Перемотка назад/вперед.
|
||||
5/Огонь - Пауза.
|
||||
9 - Спящий режим.
|
||||
0 - Включение/Отключение текстов песен.
|
||||
* - Включение/Отключение визуализации.
|
||||
# - Включение/Отключение акселерометра.
|
||||
|
||||
Изменения:
|
||||
Версия 5.2
|
||||
- Добавлен пункт в настройках, при котором переключение треков будет идти только вперед, независимо от направления рывка.
|
||||
- Поддержка русской кодировки в именах файлов.
|
||||
- Другие исправления и изменения.
|
||||
Версия 5.0 && 5.1
|
||||
- Добавлена сортировка списка файлов по рейтингу.
|
||||
- Добавлен английский язык.
|
||||
- Исправлены найденные ошибки.
|
||||
- Добавил статистику проигрывания треков.
|
||||
- Исправил повтор треков при свернутом приложении.
|
||||
- Добавил поиск текстов песен.
|
||||
- Сделал некое подобие скробблинга. Данные о проигруемой музыке отсылаются на сайт annimon.z83.ru
|
||||
|
||||
Версия 4.0
|
||||
- Исправлена ошибка при открытии .lrc-файлов содержащих пустые строки.
|
||||
- Исправлена ошибка при отображении начальных строк текстов песен.
|
||||
- Добавил настройки: "Запускать плейер при старте программы", "Закрывать плейер при выходе из программы".
|
||||
- Добавил вибрацию при переключении треков и настройку длительности.
|
||||
- Добавил эффект мигания подсветкой при переключении треков и настройку.
|
||||
- Сменил клавиши перемотки с 1/3 на 4/6.
|
||||
- Добавил повтор отрезков. Кнопкой 3 устанавливаются отрезки.
|
||||
- Добавил спящий режим (кн. 9 или пункт в меню). По истечению времени программа закроется вместе с плейером.
|
||||
- Добавил настройку визуализаций. Теперь используется Project Capuchin.
|
||||
|
||||
Версия 3.0
|
||||
- Исправлен показ обложки в полноэкранном режиме.
|
||||
- Добавил поддержку текстов песен (lrc). Файлы кидаем в папку Lyrics. Например c:/music/Lyrics/Bullet For My Valentine - Hand of Blood.lrc
|
||||
@ -28,6 +55,9 @@ Sony Ericsson Player Service 3.0
|
||||
- Режим визуализации. Переключается клавишами Вверх/Вниз,
|
||||
- Добавил перемотку клавишами 1 и 3.
|
||||
|
||||
Скробблинг:
|
||||
В версии 5.0 сделал некое подобие скробблинга, то есть информация о проигруемом файле отсылается на сайт. Потом вы можете смотреть статистику проигрывания музыки.
|
||||
|
||||
Поддержка lrc:
|
||||
Lyrics-файл (.lrc) должен быть записан в кодировке WIN-1251, иначе возможны ошибки при чтении.
|
||||
Имя lrc-файла должно быть либо "[Название группы] - [Название песни].lrc", либо "[Название исходного фудиофайла].ltc".
|
||||
|
@ -1 +1,2 @@
|
||||
aNNiMON, Ну Вот юин эсприта, основной плагмэйкер... 2542902 Вот LocID
|
||||
//SE ñôîòîøîïèòü + aNNiMOON
|
Loading…
Reference in New Issue
Block a user