Transformer des URL Final Cut Pro en paths unix

muqaddarmuqaddar Administrateur
07:45 modifié dans API AppKit #1
Salut les gens d'ici,

Je récupère des strings "url" (je dirait plutot des fausses url) de FCP.
Comme ça :

file://localhost/Users/crooner/Documents/Final%20Cut%20Pro%20Documents/Capture%20Scratch/Untitled%20Project%201/Untitled5

Je pensais pouvoir en faire une NSURL, mais ça n'en est pas une (enfin je crois qu'elles commencent par file:///).

Je dois transformer ce path en path UNIX : /Users/etc...

Mais avec :
NSURL *url = [NSURL URLWithString:moviePathUrl];
l'url n'est pas "standard" et return nil...

Alors, je dois passer par un moulinette pour arriver à  mes fins ?


Réponses

  • Eddy58Eddy58 Membre
    07:45 modifié #2
    As-tu essayé avec la méthode fileURLWithPath: ? :o
  • muqaddarmuqaddar Administrateur
    07:45 modifié #3
    bah ça prend un path unix !!! c'est pas ce que je veux faire ! ;-)
  • muqaddarmuqaddar Administrateur
    avril 2006 modifié #4
    J'ai toujours un pb, même après bidouille :

    // remove the &quot;bad&quot; beginning of the FCP URL<br />					NSString *newStringUrl = [moviePathUrl substringFromIndex:16];<br />					NSString *newFileString = @&quot;file://&quot;;					<br />					NSString* finalUrlString = [newFileString stringByAppendingString:newStringUrl];<br />					<br />					// create the url<br />					NSURL *url = [NSURL URLWithString:finalUrlString];<br />					<br />					// convert to unix path <br />					moviePath = [url path];<br />
    


    ma finalUrlString Url est :
    file:///Users/crooner/Documents/Final%20Cut%20Pro%20Documents/Capture%20Scratch/Untitled%20Project%201/Untitled5

    Il me semble que ça a l'air conforme a une URL classique ! non ?

    Pourtant quand je fabrique l'url, "url" renvoie nil...
  • muqaddarmuqaddar Administrateur
    07:45 modifié #5
    Il doit y avoir un problème d'encoding :

    Quand j'écris la string url en absolu :
    @file:///Users/crooner/Documents/Final%20Cut%20Pro%20Documents/Capture%20Scratch/Untitled%20Project%201/Untitled5

    j'arrive à  la convertir en NSURL.

    et quand je récupère la même par une clé de dico (esxctement la même), je ne peux pas la convertir en NSURL.

    Quel encoding faut-il ? Je trouve rien dans la doc...
  • AliGatorAliGator Membre, Modérateur
    07:45 modifié #6
    Et si tu demande de sélectionner le projet (affiche un boite de dialogue pour sélectionner le fichier à  la limite, ou simplement tape le chemin UNIX en dur dans une NSString) et que tu convertis ensuite le chemin UNIX (que tu connais et dont tu es sûr) en NSURL, il te donne quoi comme NSURL ?

    Juste pour comparer l'url générée à  partir du path Unix par Cocoa lui même avec celle que tu essayes de lui donner. Le temps du débug, quoi.
    Parce qu'en effet ta finalUrlString semble une URL correcte et valide, mais rien ne vaut une comparaison avec ce qu'il attend réellement...

    De même, même si pour moi les "%20" sont tout ce qu'il y a de plus valide dans uen URL (ça respecte la RFC sur les URLs et tout), peut-être que Cocoa n'apprécie pas (ce qui serait un tord de la part d'Apple mais au moins on saurait d'où vient le problème)


    EDIT :
    Si tu mets l'url en dur dans ton code et que ça passe, comme ton fichier .m est en encodage MacRoman, la NSString le sera aussi. Alors que récupérée du dico elle est en UTF8. Essaye de convertir en MacRoman avant de convertir de URL vers Path ?
  • muqaddarmuqaddar Administrateur
    07:45 modifié #7
    dans 1144921711:

    EDIT :
    Si tu mets l'url en dur dans ton code et que ça passe, comme ton fichier .m est en encodage MacRoman, la NSString le sera aussi. Alors que récupérée du dico elle est en UTF8. Essaye de convertir en MacRoman avant de convertir de URL vers Path ?


    En fait, c'est dans l'étape d'avant que ça foire : méthode URLWithString ! ;-)
    Mais comment je la passe en MacRoman ma string, c'est ce que je cherche dans la doc NSString depuis tout à  l'heure. ;) merci.
  • BruBru Membre
    07:45 modifié #8
    Je ne vois pas trop ce qui bloque...

    Tu utilises la bonne méthode, et ton url me semble correcte.
    J'ai fait un test hier soir sur mon Mac, et j'ai pû correctement récupérer un NSURL...

    Peux tu nous donner l'url extact, telle que tu la passes à  la méthode ?

    .
  • muqaddarmuqaddar Administrateur
    07:45 modifié #9
    dans 1144926817:

    Je ne vois pas trop ce qui bloque...

    Tu utilises la bonne méthode, et ton url me semble correcte.
    J'ai fait un test hier soir sur mon Mac, et j'ai pû correctement récupérer un NSURL...

    Peux tu nous donner l'url extact, telle que tu la passes à  la méthode ?

    .



    Bien sûr, voilà  le code :

    // remove the &quot;bad&quot; beginning of the FCP URL<br />					NSString *newStringUrl = [moviePathUrl substringFromIndex:16];<br />					NSString *newFileString = @&quot;file://&quot;;					<br />					NSString* finalUrlString = [newFileString stringByAppendingString:newStringUrl];
    


    puis :
    // create the url<br />					NSURL *url = [[NSURL alloc] initWithString:finalUrlString];
    


    dans le debugger, la valeur de finalURLString est :
    file:///Users/crooner/Documents/Final%20Cut%20Pro%20Documents/Capture%20Scratch/Untitled%20Project%201/Untitled6

    mais url renvoie nil !

    et si j'écris la string url ds le code (la même), et que je fais la même chose, mon URL est bien créée !
  • Eddy58Eddy58 Membre
    07:45 modifié #10
    Essayes en forçant en MacOSRoman : :o
    [tt]
    NSString *urlString=[[NSString alloc] initWithData:[finalUrlString dataUsingEncoding:NSMacOSRomanStringEncoding allowLossyConversion:NO] encoding:NSMacOSRomanStringEncoding];
    NSURL *url=[[NSURL alloc] initWithString:urlString];
    [urlString release];
    [/tt]
  • BruBru Membre
    avril 2006 modifié #11
    dans 1144928773:

    file:///Users/crooner/Documents/Final%20Cut%20Pro%20Documents/Capture%20Scratch/Untitled%20Project%201/Untitled6


    Le problème est que file:/// représente une adresse relative, et non absolue.

    Or, lorsque tu lances ton prog, par défaut, il faudrait savoir quel est le current directory...

    L'adresse que fournit FCP ("file://localhost..." dans ton 1er post) est absolue et me semble bonne.

    .
  • muqaddarmuqaddar Administrateur
    07:45 modifié #12
    @ Eddy : je l'ai forcé en macosroman... même résultat... :(

    @ Bru :
    Avec la première adresse de FCP (file://), NSURL me renvoie nil aussi ! Pas chez toi ???
    ça ne marchait pas p-e au début pour la même histoire !

    J'ai pensé qu'il pouvait y avoir une histoire de caractère invisibles à  la fin de la chaà®ne, mais apparemment non.
  • BruBru Membre
    07:45 modifié #13
    Apparemment, tes urls sont dans un dictionary, non ?

    Si c'est le cas, envoie le moi, je vais tester sur ma machine...

    .
  • muqaddarmuqaddar Administrateur
    07:45 modifié #14
    dans 1144932642:

    Apparemment, tes urls sont dans un dictionary, non ?

    Si c'est le cas, envoie le moi, je vais tester sur ma machine...

    .



    Je crois que j'ai trouvé.
    J'ai balayé ma chaine lettre par lettre et il semble y avoir des caractères vides à  la fin... (12 en fait...). A moi de la nettoyer au début (qd je la stocke) ou à  la fin.
  • AliGatorAliGator Membre, Modérateur
    07:45 modifié #15
    Zut je revenais justement sur ce post pour te dire "tiens j'ai pensé à  un truc, y'a peut-être des caractères invisibles dans ta chaà®ne..." bon ben tu m'as devancé :D


    Sinon, Bru, "file:///Users" ne serait pas une URL absolue ?
    Je pensais que "file://" était le protocole, et que le 3e slash faisait donc partie du "chemin", qu'on pouvait donc comprendre comme "/Users" (donc URL absolue) ?
  • BruBru Membre
    07:45 modifié #16
    dans 1144934539:

    Zut je revenais justement sur ce post pour te dire "tiens j'ai pensé à  un truc, y'a peut-être des caractères invisibles dans ta chaà®ne..." bon ben tu m'as devancé :D
    Sinon, Bru, "file:///Users" ne serait pas une URL absolue ?
    Je pensais que "file://" était le protocole, et que le 3e slash faisait donc partie du "chemin", qu'on pouvait donc comprendre comme "/Users" (donc URL absolue) ?


    Pour simplifier, un(e) URL a grosso modo la structure suivante :
    <protocole> [size=10pt]: //[/size] <iden-reseau> [size=10pt]/[/size] <chemin>
    où :
    <protocole> (ou schéma) est le protocole utilisé : peut être par exemple http, file, ftp, telnet, etc.
    <iden-reseau> varie en fonction du protocole. Ca peut être un nom de machine (ftp, file), un domaine (http), etc.
    <chemin> est le chemin d'accès à  la ressource.

    le ":" est un séparateur : il permet de séparer les différentes composantes de l'URL.

    Dans le cadre du protocole file, on peut avoir :
    chemin absolu : file://machine/Users/machin/Documents/fichier
    chemin relatif absolu : il suffit de retirer la partie "machine" donc :
    file:///Users/machin/Documents/fichier.
    chemin relatif pur: il suffit de retirer la partie "domaine" et le chemin à  partir de la racine du domaine :
    file:Documents/fichier.

    .
  • AliGatorAliGator Membre, Modérateur
    avril 2006 modifié #17
    Ok, merci pour ces précisions Bru 8).
    Je me permet quand même de "rajouter une couche" : qu'appelles-tu le "relatif-absolu" (qui est justement le cas qui est traité dans ce post) ?

    Relatif à  la machine (pas de machine précisée donc c'est automatiquement la machine courrante, soit la même chose que "localhost"), mais Absolu au sein de la machine (quel que soit le working directory ça part de la racine du disque dur) ?

    C'est ce que j'avais compris de mon côté mais tu sembles dire que ce n'est pas ça puisque tu parles justement du working dir dans ton post précédent, donc ça doit être autre chose...
  • BruBru Membre
    07:45 modifié #18
    dans 1144937742:

    Relatif à  la machine (pas de machine précisée donc c'est automatiquement la machine courrante, soit la même chose que "localhsot"), mais Absolu u sein de la machine (quel que soit le working directory ça part de la racine du disque dur) ?


    Ben, c'est vrai que je me suis un peu embrouillé avec ftp (qui lui en relatif absolu part du working-dir du user).
    Il apparait bien, à  relire la doc RFC, qu'en protocole file, c'est la racine du disque dur qui est le départ.

    .
  • muqaddarmuqaddar Administrateur
    07:45 modifié #19
    Merci à  vous en tout cas.
    Mon problème de caractères vides venait d'un soucis de gestion mémoire pendant mon parsing.
Connectez-vous ou Inscrivez-vous pour répondre.